diff options
author | innokentii <innokentii@yandex-team.com> | 2023-04-28 12:20:38 +0300 |
---|---|---|
committer | innokentii <innokentii@yandex-team.com> | 2023-04-28 12:20:38 +0300 |
commit | 286e997bc2bac59ce93a6bd4f9ca895e692655c5 (patch) | |
tree | 5e95fa29505dcf6d05355e77a61424534be492fe | |
parent | 2f4b8b4083ec7b5ea9c036b1c8fb64b6d1f16058 (diff) | |
download | ydb-286e997bc2bac59ce93a6bd4f9ca895e692655c5.tar.gz |
Add more configs instrospection
add more configs instrospection
-rw-r--r-- | ydb/core/cms/console/configs_dispatcher.cpp | 78 | ||||
-rw-r--r-- | ydb/core/cms/console/configs_dispatcher.h | 6 | ||||
-rw-r--r-- | ydb/core/cms/console/yaml_config/console_dumper.cpp | 11 | ||||
-rw-r--r-- | ydb/core/cms/console/yaml_config/util.h | 15 | ||||
-rw-r--r-- | ydb/core/driver_lib/cli_utils/cli_cmds_server.cpp | 10 | ||||
-rw-r--r-- | ydb/core/driver_lib/run/config.h | 3 | ||||
-rw-r--r-- | ydb/core/driver_lib/run/kikimr_services_initializers.cpp | 4 | ||||
-rw-r--r-- | ydb/core/driver_lib/run/kikimr_services_initializers.h | 2 |
8 files changed, 109 insertions, 20 deletions
diff --git a/ydb/core/cms/console/configs_dispatcher.cpp b/ydb/core/cms/console/configs_dispatcher.cpp index a83f01ebd6e..833547d3fd4 100644 --- a/ydb/core/cms/console/configs_dispatcher.cpp +++ b/ydb/core/cms/console/configs_dispatcher.cpp @@ -6,6 +6,7 @@ #include "util.h" #include <ydb/core/cms/console/util/config_index.h> +#include <ydb/core/cms/console/yaml_config/util.h> #include <ydb/core/cms/console/yaml_config/yaml_config.h> #include <ydb/core/mind/tenant_pool.h> #include <ydb/core/mon/mon.h> @@ -15,6 +16,7 @@ #include <library/cpp/actors/core/mon.h> #include <library/cpp/actors/interconnect/interconnect.h> #include <library/cpp/json/json_reader.h> +#include <library/cpp/json/json_writer.h> #include <util/generic/bitmap.h> #include <util/generic/ptr.h> @@ -127,7 +129,11 @@ public: return NKikimrServices::TActivity::CONFIGS_DISPATCHER_ACTOR; } - TConfigsDispatcher(const NKikimrConfig::TAppConfig &config, const TMap<TString, TString> &labels); + TConfigsDispatcher( + const NKikimrConfig::TAppConfig &config, + const TMap<TString, TString> &labels, + const NKikimrConfig::TAppConfig &initialCmsConfig, + const NKikimrConfig::TAppConfig &initialCmsYamlConfig); void Bootstrap(); @@ -155,6 +161,8 @@ public: void Handle(TEvConfigsDispatcher::TEvRemoveConfigSubscriptionRequest::TPtr &ev); void Handle(TEvConsole::TEvConfigNotificationRequest::TPtr &ev); + void ReplyMonJson(TActorId mailbox); + STATEFN(StateInit) { TRACE_EVENT(NKikimrServices::CONFIGS_DISPATCHER); @@ -206,8 +214,10 @@ public: private: TMap<TString, TString> Labels; - NKikimrConfig::TAppConfig InitialConfig; + const NKikimrConfig::TAppConfig InitialConfig; NKikimrConfig::TAppConfig CurrentConfig; + const NKikimrConfig::TAppConfig InitialCmsConfig; + const NKikimrConfig::TAppConfig InitialCmsYamlConfig; ui64 NextRequestCookie; TVector<TActorId> HttpRequests; TActorId CommonSubscriptionClient; @@ -226,11 +236,17 @@ private: bool YamlConfigEnabled = false; }; -TConfigsDispatcher::TConfigsDispatcher(const NKikimrConfig::TAppConfig &config, const TMap<TString, TString> &labels) - : Labels(labels) - , InitialConfig(config) - , CurrentConfig(config) - , NextRequestCookie(Now().GetValue()) +TConfigsDispatcher::TConfigsDispatcher( + const NKikimrConfig::TAppConfig &config, + const TMap<TString, TString> &labels, + const NKikimrConfig::TAppConfig &initialCmsConfig, + const NKikimrConfig::TAppConfig &initialCmsYamlConfig) + : Labels(labels) + , InitialConfig(config) + , CurrentConfig(config) + , InitialCmsConfig(initialCmsConfig) + , InitialCmsYamlConfig(initialCmsYamlConfig) + , NextRequestCookie(Now().GetValue()) { } @@ -327,12 +343,46 @@ NKikimrConfig::TAppConfig TConfigsDispatcher::ParseYamlProtoConfig() void TConfigsDispatcher::Handle(NMon::TEvHttpInfo::TPtr &ev) { + if (auto it = ev->Get()->Request.GetHeaders().FindHeader("Content-Type"); it && it->Value() == "application/json") { + ReplyMonJson(ev->Sender); + return; + } + if (HttpRequests.empty()) Send(GetNameserviceActorId(), new TEvInterconnect::TEvListNodes); HttpRequests.push_back(ev->Sender); } +void TConfigsDispatcher::ReplyMonJson(TActorId mailbox) { + TStringStream str; + str << NMonitoring::HTTPOKJSON; + + NJson::TJsonValue response; + response.SetType(NJson::EJsonValueType::JSON_MAP); + + auto& labels = response["labels"]; + labels.SetType(NJson::EJsonValueType::JSON_ARRAY); + for (auto &[key, value] : Labels) { + NJson::TJsonValue label; + label.SetType(NJson::EJsonValueType::JSON_MAP); + label.InsertValue("name", key); + label.InsertValue("value", value); + labels.AppendValue(std::move(label)); + } + + response.InsertValue("yaml_config", YamlConfig); + response.InsertValue("resolved_json_config", NJson::ReadJsonFastTree(ResolvedJsonConfig, true)); + response.InsertValue("current_json_config", NJson::ReadJsonFastTree(NProtobufJson::Proto2Json(CurrentConfig, NYamlConfig::GetProto2JsonConfig()), true)); + response.InsertValue("initial_json_config", NJson::ReadJsonFastTree(NProtobufJson::Proto2Json(InitialConfig, NYamlConfig::GetProto2JsonConfig()), true)); + response.InsertValue("initial_cms_json_config", NJson::ReadJsonFastTree(NProtobufJson::Proto2Json(InitialCmsConfig, NYamlConfig::GetProto2JsonConfig()), true)); + response.InsertValue("initial_cms_yaml_json_config", NJson::ReadJsonFastTree(NProtobufJson::Proto2Json(InitialCmsYamlConfig, NYamlConfig::GetProto2JsonConfig()), true)); + + NJson::WriteJson(&str, &response, {}); + + Send(mailbox, new NMon::TEvHttpInfoRes(str.Str(), 0, NMon::IEvHttpInfoRes::EContentType::Custom)); +} + void TConfigsDispatcher::Handle(TEvConsole::TEvConfigNotificationRequest::TPtr &ev) { const auto &rec = ev->Get()->Record; @@ -537,6 +587,14 @@ void TConfigsDispatcher::Handle(TEvInterconnect::TEvNodesInfo::TPtr &ev) COLLAPSED_REF_CONTENT("initial-config", "Initial config") { NHttp::OutputConfigHTML(str, InitialConfig); } + str << "<br />" << Endl; + COLLAPSED_REF_CONTENT("initial-cms-config", "Initial CMS config") { + NHttp::OutputConfigHTML(str, InitialCmsConfig); + } + str << "<br />" << Endl; + COLLAPSED_REF_CONTENT("initial-cms-yaml-config", "Initial CMS YAML config") { + NHttp::OutputConfigHTML(str, InitialCmsYamlConfig); + } } } } @@ -850,9 +908,11 @@ void TConfigsDispatcher::Handle(TEvConsole::TEvConfigNotificationResponse::TPtr IActor *CreateConfigsDispatcher( const NKikimrConfig::TAppConfig &config, - const TMap<TString, TString> &labels) + const TMap<TString, TString> &labels, + const NKikimrConfig::TAppConfig &initialCmsConfig, + const NKikimrConfig::TAppConfig &initialCmsYamlConfig) { - return new TConfigsDispatcher(config, labels); + return new TConfigsDispatcher(config, labels, initialCmsConfig, initialCmsYamlConfig); } } // namespace NKikimr::NConsole diff --git a/ydb/core/cms/console/configs_dispatcher.h b/ydb/core/cms/console/configs_dispatcher.h index 0c470db68cf..879e8bf58fe 100644 --- a/ydb/core/cms/console/configs_dispatcher.h +++ b/ydb/core/cms/console/configs_dispatcher.h @@ -111,7 +111,11 @@ struct TEvConfigsDispatcher { * are compared to the current one and notifications are not sent to local * subscribers if there is no config modification detected. */ -IActor *CreateConfigsDispatcher(const NKikimrConfig::TAppConfig &config, const TMap<TString, TString> &labels); +IActor *CreateConfigsDispatcher( + const NKikimrConfig::TAppConfig &config, + const TMap<TString, TString> &labels, + const NKikimrConfig::TAppConfig &initialCmsConfig = {}, + const NKikimrConfig::TAppConfig &initialCmsYamlConfig = {}); inline TActorId MakeConfigsDispatcherID(ui32 node = 0) { char x[12] = { 'c', 'o', 'n', 'f', 'i', 'g', 's', 'd', 'i', 's', 'p' }; diff --git a/ydb/core/cms/console/yaml_config/console_dumper.cpp b/ydb/core/cms/console/yaml_config/console_dumper.cpp index 42226003559..b173afea78f 100644 --- a/ydb/core/cms/console/yaml_config/console_dumper.cpp +++ b/ydb/core/cms/console/yaml_config/console_dumper.cpp @@ -1,8 +1,9 @@ #include "console_dumper.h" +#include "util.h" + #include <ydb/core/cms/console/yaml_config/yaml_config.h> #include <ydb/core/cms/console/util/config_index.h> -#include <library/cpp/protobuf/json/proto2json.h> #include <library/cpp/yaml/fyamlcpp/fyamlcpp.h> namespace NYamlConfig { @@ -169,14 +170,6 @@ NKikimrConfig::TAppConfig BundleDomainConfig(const TDomainItemsContainer &items) return config; } -NProtobufJson::TProto2JsonConfig GetProto2JsonConfig() { - return NProtobufJson::TProto2JsonConfig() - .SetFormatOutput(false) - .SetEnumMode(NProtobufJson::TProto2JsonConfig::EnumName) - .SetFieldNameMode(NProtobufJson::TProto2JsonConfig::FieldNameSnakeCaseDense) - .SetStringifyNumbers(NProtobufJson::TProto2JsonConfig::StringifyLongNumbersForDouble); -} - TVector<TSelectorData> FillSelectorsData(const TSelectorItemsContainer &items) { TVector<TSelectorData> selectors; diff --git a/ydb/core/cms/console/yaml_config/util.h b/ydb/core/cms/console/yaml_config/util.h new file mode 100644 index 00000000000..30a97705bb4 --- /dev/null +++ b/ydb/core/cms/console/yaml_config/util.h @@ -0,0 +1,15 @@ +#pragma once + +#include <library/cpp/protobuf/json/proto2json.h> + +namespace NYamlConfig { + +inline NProtobufJson::TProto2JsonConfig GetProto2JsonConfig() { + return NProtobufJson::TProto2JsonConfig() + .SetFormatOutput(false) + .SetEnumMode(NProtobufJson::TProto2JsonConfig::EnumName) + .SetFieldNameMode(NProtobufJson::TProto2JsonConfig::FieldNameSnakeCaseDense) + .SetStringifyNumbers(NProtobufJson::TProto2JsonConfig::StringifyLongNumbersForDouble); +} + +} // NYamlConfig diff --git a/ydb/core/driver_lib/cli_utils/cli_cmds_server.cpp b/ydb/core/driver_lib/cli_utils/cli_cmds_server.cpp index a111b88ccee..85cfdadeaa1 100644 --- a/ydb/core/driver_lib/cli_utils/cli_cmds_server.cpp +++ b/ydb/core/driver_lib/cli_utils/cli_cmds_server.cpp @@ -790,6 +790,11 @@ protected: yamlConfig); } + RunConfig.InitialCmsConfig.CopyFrom(appConfig); + + RunConfig.InitialCmsYamlConfig.CopyFrom(yamlConfig); + NYamlConfig::ReplaceUnmanagedKinds(appConfig, RunConfig.InitialCmsYamlConfig); + if (yamlConfig.HasYamlConfigEnabled() && yamlConfig.GetYamlConfigEnabled()) { BaseConfig.Swap(&yamlConfig); NYamlConfig::ReplaceUnmanagedKinds(result.GetConfig(), BaseConfig); @@ -1113,6 +1118,11 @@ protected: yamlConfig); } + RunConfig.InitialCmsConfig.CopyFrom(result.GetConfig()); + + RunConfig.InitialCmsYamlConfig.CopyFrom(yamlConfig); + NYamlConfig::ReplaceUnmanagedKinds(result.GetConfig(), RunConfig.InitialCmsYamlConfig); + if (yamlConfig.HasYamlConfigEnabled() && yamlConfig.GetYamlConfigEnabled()) { appConfig = yamlConfig; NYamlConfig::ReplaceUnmanagedKinds(result.GetConfig(), appConfig); diff --git a/ydb/core/driver_lib/run/config.h b/ydb/core/driver_lib/run/config.h index ae8f8ee61e2..c486031d786 100644 --- a/ydb/core/driver_lib/run/config.h +++ b/ydb/core/driver_lib/run/config.h @@ -121,6 +121,9 @@ struct TKikimrRunConfig { TString ClusterName; + NKikimrConfig::TAppConfig InitialCmsConfig; + NKikimrConfig::TAppConfig InitialCmsYamlConfig; + TKikimrRunConfig(NKikimrConfig::TAppConfig& appConfig, ui32 nodeId = 0, const TKikimrScopeId& scopeId = {}); }; diff --git a/ydb/core/driver_lib/run/kikimr_services_initializers.cpp b/ydb/core/driver_lib/run/kikimr_services_initializers.cpp index 69dbfcd74dc..561d7ad221c 100644 --- a/ydb/core/driver_lib/run/kikimr_services_initializers.cpp +++ b/ydb/core/driver_lib/run/kikimr_services_initializers.cpp @@ -2587,11 +2587,13 @@ void THttpProxyServiceInitializer::InitializeServices(NActors::TActorSystemSetup TConfigsDispatcherInitializer::TConfigsDispatcherInitializer(const TKikimrRunConfig& runConfig) : IKikimrServicesInitializer(runConfig) , Labels(runConfig.Labels) + , InitialCmsConfig(runConfig.InitialCmsConfig) + , InitialCmsYamlConfig(runConfig.InitialCmsYamlConfig) { } void TConfigsDispatcherInitializer::InitializeServices(NActors::TActorSystemSetup* setup, const NKikimr::TAppData* appData) { - IActor* actor = NConsole::CreateConfigsDispatcher(Config, Labels); + IActor* actor = NConsole::CreateConfigsDispatcher(Config, Labels, InitialCmsConfig, InitialCmsYamlConfig); setup->LocalServices.push_back(std::pair<TActorId, TActorSetupCmd>( NConsole::MakeConfigsDispatcherID(NodeId), TActorSetupCmd(actor, TMailboxType::HTSwap, appData->UserPoolId))); diff --git a/ydb/core/driver_lib/run/kikimr_services_initializers.h b/ydb/core/driver_lib/run/kikimr_services_initializers.h index 913de4961f2..20b109ae4cf 100644 --- a/ydb/core/driver_lib/run/kikimr_services_initializers.h +++ b/ydb/core/driver_lib/run/kikimr_services_initializers.h @@ -459,6 +459,8 @@ public: private: TMap<TString, TString> Labels; + NKikimrConfig::TAppConfig InitialCmsConfig; + NKikimrConfig::TAppConfig InitialCmsYamlConfig; }; class TConfigsCacheInitializer : public IKikimrServicesInitializer { |