diff options
| author | Martin Ridgers <[email protected]> | 2021-10-01 11:50:43 +0200 |
|---|---|---|
| committer | Martin Ridgers <[email protected]> | 2021-10-01 11:50:43 +0200 |
| commit | a2dc648979bad70037e19ce75ae506f9455e8fd3 (patch) | |
| tree | 4d902270db982a24df05eecdf53d0535b601d582 /zenserver/cache/structuredcache.cpp | |
| parent | Removed `-fshort-wchar` compiler flag on Linux (diff) | |
| parent | Added upstream cache perf metrics. (diff) | |
| download | zen-a2dc648979bad70037e19ce75ae506f9455e8fd3.tar.xz zen-a2dc648979bad70037e19ce75ae506f9455e8fd3.zip | |
Merged main
Diffstat (limited to 'zenserver/cache/structuredcache.cpp')
| -rw-r--r-- | zenserver/cache/structuredcache.cpp | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/zenserver/cache/structuredcache.cpp b/zenserver/cache/structuredcache.cpp index 74cee6614..dc96aecae 100644 --- a/zenserver/cache/structuredcache.cpp +++ b/zenserver/cache/structuredcache.cpp @@ -6,6 +6,7 @@ #include <zencore/compress.h> #include <zencore/fmtutils.h> #include <zencore/logging.h> +#include <zencore/scopeguard.h> #include <zencore/stream.h> #include <zencore/timer.h> #include <zenhttp/httpserver.h> @@ -193,10 +194,17 @@ HttpStructuredCacheService::HandleRequest(HttpServerRequest& Request) { CacheRef Ref; + metrics::OperationTiming::Scope $(m_HttpRequests); + if (!ValidateKeyUri(Request, /* out */ Ref)) { std::string_view Key = Request.RelativeUri(); + if (Key.empty()) + { + return HandleStatusRequest(Request); + } + if (std::all_of(begin(Key), end(Key), [](const char c) { return std::isalnum(c); })) { // Bucket reference @@ -262,11 +270,11 @@ HttpStructuredCacheService::HandleCacheRecordRequest(HttpServerRequest& Request, case kHead: case kGet: { - HandleGetCacheRecord(Request, Ref, Policy); if (Verb == kHead) { Request.SetSuppressResponseBody(); } + HandleGetCacheRecord(Request, Ref, Policy); } break; case kPut: @@ -829,4 +837,22 @@ HttpStructuredCacheService::ValidateKeyUri(HttpServerRequest& Request, CacheRef& return true; } + +void +HttpStructuredCacheService::HandleStatusRequest(zen::HttpServerRequest& Request) +{ + CbObjectWriter Cbo; + Cbo << "ok" << true; + + EmitSnapshot("requests", m_HttpRequests, Cbo); + if (m_UpstreamCache) + { + Cbo.BeginObject("upstream"); + m_UpstreamCache->GetStatus(Cbo); + Cbo.EndObject(); + } + + Request.WriteResponse(HttpResponseCode::OK, Cbo.Save()); +} + } // namespace zen |