aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/monlib/service/pages/index_mon_page.cpp
diff options
context:
space:
mode:
authorAlexey Efimov <xeno@prnwatch.com>2022-05-17 11:34:57 +0300
committerAlexey Efimov <xeno@prnwatch.com>2022-05-17 11:34:57 +0300
commit742718e4953ed9e9f897f5194871fc7cec65caa3 (patch)
tree6501c24969779138b433d19606a22791742e38b9 /library/cpp/monlib/service/pages/index_mon_page.cpp
parent1e1dfc1b3545147948cc2190bb15161f630507e9 (diff)
downloadydb-742718e4953ed9e9f897f5194871fc7cec65caa3.tar.gz
add http-mon via ic proxy KIKIMR-14742
ref:b3a758f33f4578f7f8ce2e822783faf41a5ab6cd
Diffstat (limited to 'library/cpp/monlib/service/pages/index_mon_page.cpp')
-rw-r--r--library/cpp/monlib/service/pages/index_mon_page.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/library/cpp/monlib/service/pages/index_mon_page.cpp b/library/cpp/monlib/service/pages/index_mon_page.cpp
index 1d3d6dac37..de2a5a058c 100644
--- a/library/cpp/monlib/service/pages/index_mon_page.cpp
+++ b/library/cpp/monlib/service/pages/index_mon_page.cpp
@@ -106,6 +106,39 @@ IMonPage* TIndexMonPage::FindPage(const TString& relativePath) {
}
}
+IMonPage* TIndexMonPage::FindPageByAbsolutePath(const TString& absolutePath) {
+ TIndexMonPage* page = this;
+ TString path = absolutePath;
+ if (path.StartsWith("/")) {
+ path.erase(0, 1);
+ }
+ while (!path.empty()) {
+ TString tryPath = path;
+ while (!tryPath.empty()) {
+ IMonPage* found = page->FindPage(tryPath);
+ if (found == nullptr) {
+ size_t slash = tryPath.find_last_of('/');
+ if (slash == TString::npos) {
+ return nullptr;
+ }
+ tryPath.resize(slash);
+ } else {
+ if (tryPath.size() == path.size()) {
+ return found;
+ }
+ if (found->IsIndex()) {
+ path = path.substr(tryPath.size() + 1);
+ page = static_cast<TIndexMonPage*>(found);
+ break;
+ } else {
+ return found;
+ }
+ }
+ }
+ }
+ return nullptr;
+}
+
TIndexMonPage* TIndexMonPage::FindIndexPage(const TString& relativePath) {
return VerifyDynamicCast<TIndexMonPage*>(FindPage(relativePath));
}