From f072f171d8b7df26e28306952b9fffdd5e37900c Mon Sep 17 00:00:00 2001 From: emeric Date: Sat, 9 Mar 2024 19:02:02 +0100 Subject: [PATCH] Added some profiling events for the subsonic API --- src/libs/subsonic/impl/SubsonicResource.cpp | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/libs/subsonic/impl/SubsonicResource.cpp b/src/libs/subsonic/impl/SubsonicResource.cpp index 92797b30..d99ed32b 100644 --- a/src/libs/subsonic/impl/SubsonicResource.cpp +++ b/src/libs/subsonic/impl/SubsonicResource.cpp @@ -28,8 +28,10 @@ #include "database/Session.hpp" #include "database/User.hpp" #include "utils/EnumSet.hpp" +#include "utils/LiteralString.hpp" #include "utils/IConfig.hpp" #include "utils/ILogger.hpp" +#include "utils/IProfiler.hpp" #include "utils/Service.hpp" #include "utils/String.hpp" #include "utils/Utils.hpp" @@ -159,7 +161,7 @@ namespace API::Subsonic CheckImplementedFunc checkFunc{}; }; - static const std::unordered_map requestEntryPoints + static const std::unordered_map requestEntryPoints { // System {"/ping", {handlePingRequest}}, @@ -310,17 +312,26 @@ namespace API::Subsonic auto itEntryPoint{ requestEntryPoints.find(requestPath) }; if (itEntryPoint != requestEntryPoints.end()) { + LMS_SCOPED_PROFILE_OVERVIEW("Subsonic", itEntryPoint->first); + if (itEntryPoint->second.checkFunc) itEntryPoint->second.checkFunc(); checkUserTypeIsAllowed(requestContext, itEntryPoint->second.allowedUserTypes); - const Response resp{ (itEntryPoint->second.func)(requestContext) }; + const Response resp{ [&] { + LMS_SCOPED_PROFILE_DETAILED("Subsonic", "HandleRequest"); + return itEntryPoint->second.func(requestContext); + }()}; + + { + LMS_SCOPED_PROFILE_DETAILED("Subsonic", "WriteResponse"); + + resp.write(response.out(), format); + response.setMimeType(std::string{ ResponseFormatToMimeType(format) }); + } - resp.write(response.out(), format); - response.setMimeType(std::string{ ResponseFormatToMimeType(format) }); LMS_LOG(API_SUBSONIC, DEBUG, "Request " << requestId << " '" << requestPath << "' handled!"); - return; }