diff options
author | hor911 <hor911@ydb.tech> | 2022-08-22 03:15:53 +0300 |
---|---|---|
committer | hor911 <hor911@ydb.tech> | 2022-08-22 03:15:53 +0300 |
commit | 2c34e084dba881eb83cdbe230c20bb500f63c72c (patch) | |
tree | 9c51e4ad6e8a7968454becb954e548790e0718cf | |
parent | 8b5bbce3b135c225199b7234b07c0cb47f53dfa4 (diff) | |
download | ydb-2c34e084dba881eb83cdbe230c20bb500f63c72c.tar.gz |
Query introspection
-rw-r--r-- | ydb/core/yq/libs/actors/run_actor.cpp | 114 |
1 files changed, 113 insertions, 1 deletions
diff --git a/ydb/core/yq/libs/actors/run_actor.cpp b/ydb/core/yq/libs/actors/run_actor.cpp index 0c629a0e516..cccc6148fa3 100644 --- a/ydb/core/yq/libs/actors/run_actor.cpp +++ b/ydb/core/yq/libs/actors/run_actor.cpp @@ -1737,7 +1737,119 @@ private: void Handle(NMon::TEvHttpInfo::TPtr& ev) { TStringStream html; html << "<h2>RunActor</h2>"; - html << "<p>QueryId: <b>" << Params.QueryId << "</b></p>"; + + if (ExecuterId != NActors::TActorId{}) { + html << "<table class='table simple-table1 table-hover table-condensed'>"; + html << "<thead><tr>"; + html << "<th>Graph</th>"; + html << "<th>Executer</th>"; + html << "<th>Controller</th>"; + html << "<th>Checkpoint Coord</th>"; + html << "</tr></thead><tbody>"; + html << "<tr>"; + html << "<td>"; + if (EvaluationInProgress) html << "EVAL"; + else html << DqGraphIndex << " of " << DqGraphParams.size(); + html << "<td>"; + html << "<td>" << ExecuterId << "</td>"; + html << "<td>" << ControlId << "</td>"; + html << "<td>" << CheckpointCoordinatorId << "</td>"; + html << "</tr>"; + html << "</tbody></table>"; + } + + html << "<table class='table simple-table1 table-hover table-condensed'>"; + html << "<thead><tr>"; + html << "<th>Param</th>"; + html << "<th>Value</th>"; + html << "</tr></thead><tbody>"; + html << "<tr><td>Cloud ID</td><td>" << Params.CloudId << "</td></tr>"; + html << "<tr><td>Scope</td><td>" << Params.Scope.ToString() << "</td></tr>"; + html << "<tr><td>Query ID</td><td>" << Params.QueryId << "</td></tr>"; + html << "<tr><td>User ID</td><td>" << Params.UserId << "</td></tr>"; + html << "<tr><td>Owner</td><td>" << Params.Owner << "</td></tr>"; + html << "<tr><td>Result ID</td><td>" << Params.ResultId << "</td></tr>"; + html << "<tr><td>Prev Rev</td><td>" << Params.PreviousQueryRevision << "</td></tr>"; + html << "<tr><td>Query Type</td><td>" << YandexQuery::QueryContent::QueryType_Name(Params.QueryType) << "</td></tr>"; + html << "<tr><td>Exec Mode</td><td>" << YandexQuery::ExecuteMode_Name(Params.ExecuteMode) << "</td></tr>"; + html << "<tr><td>St Load Mode</td><td>" << YandexQuery::StateLoadMode_Name(Params.StateLoadMode) << "</td></tr>"; + html << "<tr><td>Disposition</td><td>" << Params.StreamingDisposition << "</td></tr>"; + html << "<tr><td>Status</td><td>" << YandexQuery::QueryMeta::ComputeStatus_Name(Params.Status) << "</td></tr>"; + html << "</tbody></table>"; + + if (Params.Connections.size()) { + html << "<table class='table simple-table1 table-hover table-condensed'>"; + html << "<thead><tr>"; + html << "<th>Connection</th>"; + html << "<th>Type</th>"; + html << "<th>ID</th>"; + html << "<th>Description</th>"; + html << "</tr></thead><tbody>"; + for (const auto& connection : Params.Connections) { + html << "<tr>"; + html << "<td>" << connection.content().name() << "</td>"; + html << "<td>"; + switch (connection.content().setting().connection_case()) { + case YandexQuery::ConnectionSetting::kYdbDatabase: + html << "YDB"; + break; + case YandexQuery::ConnectionSetting::kClickhouseCluster: + html << "CLICKHOUSE"; + break; + case YandexQuery::ConnectionSetting::kObjectStorage: + html << "OBJECT STORAGE"; + break; + case YandexQuery::ConnectionSetting::kDataStreams: + html << "DATA STREAMS"; + break; + case YandexQuery::ConnectionSetting::kMonitoring: + html << "MONITORING"; + break; + default: + html << "UNDEFINED"; + break; + } + html << "</td>"; + html << "<td>" << connection.meta().id() << "</td>"; + html << "<td>" << connection.content().description() << "</td>"; + html << "</tr>"; + } + html << "</tbody></table>"; + } + + if (Params.Bindings.size()) { + html << "<table class='table simple-table1 table-hover table-condensed'>"; + html << "<thead><tr>"; + html << "<th>Binding</th>"; + html << "<th>Type</th>"; + html << "<th>ID</th>"; + html << "<th>Connection ID</th>"; + html << "<th>Description</th>"; + html << "</tr></thead><tbody>"; + for (const auto& binding : Params.Bindings) { + html << "<tr>"; + html << "<td>" << binding.content().name() << "</td>"; + html << "<td>"; + switch (binding.content().setting().binding_case()) { + case YandexQuery::BindingSetting::kDataStreams: + html << "DATA STREAMS"; + break; + case YandexQuery::BindingSetting::kObjectStorage: + html << "OBJECT STORAGE"; + break; + default: + html << "UNDEFINED"; + break; + } + html << "</td>"; + html << "<td>" << binding.meta().id() << "</td>"; + html << "<td>" << binding.content().connection_id() << "</td>"; + html << "<td>" << binding.content().description() << "</td>"; + html << "</tr>"; + } + html << "</tbody></table>"; + } + Send(ev->Sender, new NMon::TEvHttpInfoRes(html.Str())); } |