aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhor911 <hor911@ydb.tech>2022-08-22 03:15:53 +0300
committerhor911 <hor911@ydb.tech>2022-08-22 03:15:53 +0300
commit2c34e084dba881eb83cdbe230c20bb500f63c72c (patch)
tree9c51e4ad6e8a7968454becb954e548790e0718cf
parent8b5bbce3b135c225199b7234b07c0cb47f53dfa4 (diff)
downloadydb-2c34e084dba881eb83cdbe230c20bb500f63c72c.tar.gz
Query introspection
-rw-r--r--ydb/core/yq/libs/actors/run_actor.cpp114
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()));
}