diff options
author | komels <komels@ydb.tech> | 2023-02-17 13:59:41 +0300 |
---|---|---|
committer | komels <komels@ydb.tech> | 2023-02-17 13:59:41 +0300 |
commit | 221c521309e51dc220108e6682fe5e9744094783 (patch) | |
tree | 12c35e11ff705cfc989fe4587fac98fa96484223 | |
parent | 71c9dc43d48055edab1354e1406de37e3e6dd672 (diff) | |
download | ydb-221c521309e51dc220108e6682fe5e9744094783.tar.gz |
Refactor for
-rw-r--r-- | ydb/core/client/server/msgbus_server_pq_metacache.cpp | 14 | ||||
-rw-r--r-- | ydb/core/mind/hive/monitoring.cpp | 67 |
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> { |