aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/monlib
diff options
context:
space:
mode:
authorAlexander Smirnov <alex@ydb.tech>2025-04-18 00:51:50 +0000
committerAlexander Smirnov <alex@ydb.tech>2025-04-18 00:51:50 +0000
commitfcf98cbcba210753db1754ca6e28c295c535ffbb (patch)
tree1b529bd303f9c788e4f398933d7deb47cfd8c3b2 /library/cpp/monlib
parent1f62eb9b72a10d093a2acd13c434a8a94fa695bc (diff)
parent8e5325590b3037c576e7f9981903f5112e181ffe (diff)
downloadydb-fcf98cbcba210753db1754ca6e28c295c535ffbb.tar.gz
Merge branch 'rightlib' into merge-libs-250418-0050
Diffstat (limited to 'library/cpp/monlib')
-rw-r--r--library/cpp/monlib/dynamic_counters/page.cpp91
1 files changed, 68 insertions, 23 deletions
diff --git a/library/cpp/monlib/dynamic_counters/page.cpp b/library/cpp/monlib/dynamic_counters/page.cpp
index 5cd750026fb..73b1309d814 100644
--- a/library/cpp/monlib/dynamic_counters/page.cpp
+++ b/library/cpp/monlib/dynamic_counters/page.cpp
@@ -4,6 +4,7 @@
#include <library/cpp/monlib/service/pages/templates.h>
#include <library/cpp/string_utils/quote/quote.h>
+#include <util/string/builder.h>
#include <util/string/split.h>
#include <util/system/tls.h>
@@ -26,6 +27,19 @@ TMaybe<EFormat> ParseFormat(TStringBuf str) {
}
}
+namespace {
+
+TStringBuf GetParams(NMonitoring::IMonHttpRequest& request) {
+ TStringBuf uri = request.GetUri();
+ TStringBuf params = uri.After('?');
+ if (params.Size() == uri.Size()) {
+ params.Clear();
+ }
+ return params;
+}
+
+}
+
void TDynamicCountersPage::Output(NMonitoring::IMonHttpRequest& request) {
if (OutputCallback) {
OutputCallback();
@@ -37,28 +51,51 @@ void TDynamicCountersPage::Output(NMonitoring::IMonHttpRequest& request) {
};
TVector<TStringBuf> parts;
- StringSplitter(request.GetPathInfo())
- .Split('/')
- .SkipEmpty()
- .Collect(&parts);
-
- TMaybe<EFormat> format = !parts.empty() ? ParseFormat(parts.back()) : Nothing();
- if (format) {
- parts.pop_back();
- }
+ TMaybe<EFormat> format;
+ TStringBuf params = GetParams(request);
+
+ if (request.GetPathInfo().empty() && !params.empty()) {
+ StringSplitter(params).Split('&').SkipEmpty().Consume([&](TStringBuf part) {
+ TStringBuf name;
+ TStringBuf value;
+ part.Split('=', name, value);
+ if (name.StartsWith("@")) {
+ if (name == "@format") {
+ format = ParseFormat(value);
+ } else if (name == "@name_label") {
+ nameLabel = value;
+ } else if (name == "@private") {
+ visibility = TCountableBase::EVisibility::Private;
+ }
+ } else {
+ parts.push_back(part);
+ }
+ return true;
+ });
+ } else {
+ StringSplitter(request.GetPathInfo())
+ .Split('/')
+ .SkipEmpty()
+ .Collect(&parts);
+
+ format = !parts.empty() ? ParseFormat(parts.back()) : Nothing();
+ if (format) {
+ parts.pop_back();
+ }
- if (!parts.empty() && parts.back().StartsWith(TStringBuf("name_label="))) {
- TVector<TString> labels;
- StringSplitter(parts.back()).Split('=').SkipEmpty().Collect(&labels);
- if (labels.size() == 2U) {
- nameLabel = labels.back();
+ if (!parts.empty() && parts.back().StartsWith(TStringBuf("name_label="))) {
+ TVector<TString> labels;
+ StringSplitter(parts.back()).Split('=').SkipEmpty().Collect(&labels);
+ if (labels.size() == 2U) {
+ nameLabel = labels.back();
+ }
+ parts.pop_back();
}
- parts.pop_back();
- }
- if (!parts.empty() && parts.back() == TStringBuf("private")) {
- visibility = TCountableBase::EVisibility::Private;
- parts.pop_back();
+ if (!parts.empty() && parts.back() == TStringBuf("private")) {
+ visibility = TCountableBase::EVisibility::Private;
+ parts.pop_back();
+ }
}
auto counters = Counters;
@@ -121,9 +158,15 @@ void TDynamicCountersPage::HandleAbsentSubgroup(IMonHttpRequest& request) {
void TDynamicCountersPage::BeforePre(IMonHttpRequest& request) {
IOutputStream& out = request.Output();
+ TStringBuf params = GetParams(request);
+ TStringBuilder base;
+ base << Path << '?';
+ if (!params.empty()) {
+ base << params << '&';
+ }
HTML(out) {
DIV() {
- out << "<a href='" << request.GetPath() << "/json'>Counters as JSON</a>";
+ out << "<a href='" << base << "@format=json'>Counters as JSON</a>";
out << " for Solomon";
}
@@ -133,9 +176,11 @@ void TDynamicCountersPage::BeforePre(IMonHttpRequest& request) {
UL() {
currentCounters->EnumerateSubgroups([&](const TString& name, const TString& value) {
LI() {
- TString pathPart = name + "=" + value;
- Quote(pathPart, "");
- out << "\n<a href='" << request.GetPath() << "/" << pathPart << "'>" << name << " " << value << "</a>";
+ auto escName = name;
+ auto escValue = value;
+ Quote(escName);
+ Quote(escValue);
+ out << "\n<a href='" << base << escName << '=' << escValue << "'>" << name << " " << value << "</a>";
}
});
}