aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorInnokentii Mokin <innokentii@ydb.tech>2024-12-24 20:58:15 +0300
committerGitHub <noreply@github.com>2024-12-24 20:58:15 +0300
commit20b281ba6ab73dbb8b37acc49402a0f021223afe (patch)
tree23451e068c26e354a40823bbfb0df2f3f40d5dcc
parent8165ac169019ce18729318c775eb674f82843c6d (diff)
downloadydb-20b281ba6ab73dbb8b37acc49402a0f021223afe.tar.gz
Make console ui indepentent of proto changes (#12927)
-rw-r--r--ydb/core/cms/json_proxy_proto.h56
1 files changed, 29 insertions, 27 deletions
diff --git a/ydb/core/cms/json_proxy_proto.h b/ydb/core/cms/json_proxy_proto.h
index d7983e9b2d..74fa3c4b72 100644
--- a/ydb/core/cms/json_proxy_proto.h
+++ b/ydb/core/cms/json_proxy_proto.h
@@ -17,7 +17,7 @@
#include <util/generic/serialized_enum.h>
-#include <iostream>
+#include <unordered_map>
namespace NKikimr::NCms {
@@ -33,6 +33,7 @@ public:
TJsonProxyProto(NMon::TEvHttpInfo::TPtr &event)
: RequestEvent(event)
{
+ RegisterDescriptor(NKikimrConfig::TImmediateControlsConfig::descriptor());
}
void Bootstrap(const TActorContext &ctx) {
@@ -62,32 +63,13 @@ protected:
return ReplyWithEnumDescription(*NKikimrBlobStorage::TPDiskState::E_descriptor(), ctx);
} else if (cgi.Has("type")) {
TString name = cgi.Get("type");
- if (name == ".NKikimrConfig.TImmediateControlsConfig")
- return ReplyWithTypeDescription(*NKikimrConfig::TImmediateControlsConfig::descriptor(), ctx);
- else if (name == ".NKikimrConfig.TImmediateControlsConfig.TDataShardControls")
- return ReplyWithTypeDescription(*NKikimrConfig::TImmediateControlsConfig::TDataShardControls::descriptor(), ctx);
- else if (name == ".NKikimrConfig.TImmediateControlsConfig.TDataShardControls.TExecutionProfileOptions")
- return ReplyWithTypeDescription(*NKikimrConfig::TImmediateControlsConfig::TDataShardControls::TExecutionProfileOptions::descriptor(), ctx);
- else if (name == ".NKikimrConfig.TImmediateControlsConfig.TTxLimitControls")
- return ReplyWithTypeDescription(*NKikimrConfig::TImmediateControlsConfig::TTxLimitControls::descriptor(), ctx);
- else if (name == ".NKikimrConfig.TImmediateControlsConfig.TCoordinatorControls")
- return ReplyWithTypeDescription(*NKikimrConfig::TImmediateControlsConfig::TCoordinatorControls::descriptor(), ctx);
- else if (name == ".NKikimrConfig.TImmediateControlsConfig.TSchemeShardControls")
- return ReplyWithTypeDescription(*NKikimrConfig::TImmediateControlsConfig::TSchemeShardControls::descriptor(), ctx);
- else if (name == ".NKikimrConfig.TImmediateControlsConfig.TTCMallocControls")
- return ReplyWithTypeDescription(*NKikimrConfig::TImmediateControlsConfig::TTCMallocControls::descriptor(), ctx);
- else if (name == ".NKikimrConfig.TImmediateControlsConfig.TVDiskControls")
- return ReplyWithTypeDescription(*NKikimrConfig::TImmediateControlsConfig::TVDiskControls::descriptor(), ctx);
- else if (name == ".NKikimrConfig.TImmediateControlsConfig.TPDiskControls")
- return ReplyWithTypeDescription(*NKikimrConfig::TImmediateControlsConfig::TPDiskControls::descriptor(), ctx);
- else if (name == ".NKikimrConfig.TImmediateControlsConfig.TTabletControls")
- return ReplyWithTypeDescription(*NKikimrConfig::TImmediateControlsConfig::TTabletControls::descriptor(), ctx);
- else if (name == ".NKikimrConfig.TImmediateControlsConfig.TDSProxyControls")
- return ReplyWithTypeDescription(*NKikimrConfig::TImmediateControlsConfig::TDSProxyControls::descriptor(), ctx);
- else if (name == ".NKikimrConfig.TImmediateControlsConfig.TBlobStorageControllerControls")
- return ReplyWithTypeDescription(*NKikimrConfig::TImmediateControlsConfig::TBlobStorageControllerControls::descriptor(), ctx);
- else if (name == ".NKikimrConfig.TImmediateControlsConfig.TTableServiceControls")
- return ReplyWithTypeDescription(*NKikimrConfig::TImmediateControlsConfig::TTableServiceControls::descriptor(), ctx);
+ if (name.length() > 1) {
+ name = name.substr(1);
+
+ if (auto it = TypeRegistry.find(name); it != TypeRegistry.end()) {
+ return ReplyWithTypeDescription(*it->second, ctx);
+ }
+ }
}
ctx.Send(RequestEvent->Sender,
@@ -197,7 +179,27 @@ protected:
NMon::IEvHttpInfoRes::EContentType::Custom));
}
+ void RegisterDescriptor(const google::protobuf::Descriptor* desc) {
+ if (!desc) {
+ return;
+ }
+
+ if (TypeRegistry.contains(desc->full_name())) {
+ return;
+ }
+
+ TypeRegistry[desc->full_name()] = desc;
+
+ for (int i = 0; i < desc->field_count(); ++i) {
+ auto* field = desc->field(i);
+ if (const auto* message = field->message_type(); message) {
+ RegisterDescriptor(message);
+ }
+ }
+ }
+
NMon::TEvHttpInfo::TPtr RequestEvent;
+ std::unordered_map<TString, const google::protobuf::Descriptor*> TypeRegistry;
};
} // namespace NKikimr::NCms