aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkomels <komels@ydb.tech>2023-02-17 13:59:41 +0300
committerkomels <komels@ydb.tech>2023-02-17 13:59:41 +0300
commit221c521309e51dc220108e6682fe5e9744094783 (patch)
tree12c35e11ff705cfc989fe4587fac98fa96484223
parent71c9dc43d48055edab1354e1406de37e3e6dd672 (diff)
downloadydb-221c521309e51dc220108e6682fe5e9744094783.tar.gz
Refactor for
-rw-r--r--ydb/core/client/server/msgbus_server_pq_metacache.cpp14
-rw-r--r--ydb/core/mind/hive/monitoring.cpp67
2 files changed, 76 insertions, 5 deletions
diff --git a/ydb/core/client/server/msgbus_server_pq_metacache.cpp b/ydb/core/client/server/msgbus_server_pq_metacache.cpp
index 91e7e7dac7..544392df6e 100644
--- a/ydb/core/client/server/msgbus_server_pq_metacache.cpp
+++ b/ydb/core/client/server/msgbus_server_pq_metacache.cpp
@@ -636,10 +636,18 @@ private:
RequestedNodesInfo = true;
NActorsProto::TRemoteHttpInfo info;
- auto* param = info.AddQueryParams();
- param->SetKey("page");
- param->SetValue("LandingData");
+ {
+ auto* param = info.AddQueryParams();
+ param->SetKey("page");
+ param->SetValue("MemStateNodes");
+ }
+ {
+ auto* param = info.AddQueryParams();
+ param->SetKey("format");
+ param->SetValue("json");
+ }
info.SetPath("/app");
+ LOG_DEBUG_S(ctx, NKikimrServices::PQ_METACACHE, "Send Hive nodes state request");
NTabletPipe::SendData(ctx, HivePipeClient, new NActors::NMon::TEvRemoteHttpInfo(info));
}
diff --git a/ydb/core/mind/hive/monitoring.cpp b/ydb/core/mind/hive/monitoring.cpp
index 522487eba8..3afccc647f 100644
--- a/ydb/core/mind/hive/monitoring.cpp
+++ b/ydb/core/mind/hive/monitoring.cpp
@@ -319,8 +319,13 @@ public:
bool Execute(TTransactionContext &txc, const TActorContext& ctx) override {
Y_UNUSED(txc);
TStringStream str;
- RenderHTMLPage(str);
- ctx.Send(Source, new NMon::TEvRemoteHttpInfoRes(str.Str()));
+ if (Event->Cgi().Get("format") == "json") {
+ RenderJsonPageWithExtraData(str);
+ ctx.Send(Source, new NMon::TEvRemoteJsonInfoRes(str.Str()));
+ } else {
+ RenderHTMLPage(str);
+ ctx.Send(Source, new NMon::TEvRemoteHttpInfoRes(str.Str()));
+ }
return true;
}
@@ -363,6 +368,64 @@ public:
out << "</tbody>";
out << "</table>";
}
+
+ void RenderJsonPageWithExtraData(IOutputStream &out) {
+ ui64 nodes = 0;
+ ui64 aliveNodes = 0;
+
+ for (const auto& pr : Self->Nodes) {
+ if (pr.second.IsAlive()) {
+ ++aliveNodes;
+ }
+ if (!pr.second.IsUnknown()) {
+ ++nodes;
+ }
+ }
+
+ NJson::TJsonValue jsonData;
+
+ jsonData["TotalNodes"] = nodes;
+ jsonData["AliveNodes"] = aliveNodes;
+
+ TVector<TNodeInfo*> nodeInfos;
+ nodeInfos.reserve(Self->Nodes.size());
+ for (auto& pr : Self->Nodes) {
+ if (!pr.second.IsUnknown()) {
+ nodeInfos.push_back(&pr.second);
+ }
+ }
+ TInstant aliveLine = TInstant::Now() - TDuration::Minutes(10);
+
+ NJson::TJsonValue& jsonNodes = jsonData["Nodes"];
+ for (TNodeInfo* nodeInfo : nodeInfos) {
+ TNodeInfo& node = *nodeInfo;
+ TNodeId id = node.Id;
+
+ if (!node.IsAlive() && TInstant::MilliSeconds(node.Statistics.GetLastAliveTimestamp()) < aliveLine) {
+ continue;
+ }
+
+ NJson::TJsonValue& jsonNode = jsonNodes.AppendValue(NJson::TJsonValue());
+ TString host;
+ auto it = Self->NodesInfo.find(node.Id);
+ if (it != Self->NodesInfo.end()) {
+ auto &ni = it->second;
+ if (ni.Host.empty()) {
+ host = ni.Address;
+ } else {
+ host = ni.Host;
+ }
+ }
+
+ jsonNode["Id"] = id;
+ jsonNode["Host"] = host;
+
+ jsonNode["Domain"] = node.ServicedDomains.empty() ? "" : Self->GetDomainName(node.GetServicedDomain());
+ jsonNode["Alive"] = node.IsAlive();
+ jsonNode["Down"] = node.Down;
+ }
+ NJson::WriteJson(&out, &jsonData);
+ }
};
class TTxMonEvent_MemStateDomains : public TTransactionBase<THive> {