Skip to content

Commit 0e39c53

Browse files
authored
Statistics: updated HTML page (#8471)
1 parent bf8c633 commit 0e39c53

File tree

3 files changed

+91
-20
lines changed

3 files changed

+91
-20
lines changed

ydb/core/statistics/aggregator/aggregator_impl.cpp

Lines changed: 73 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -883,9 +883,31 @@ void TStatisticsAggregator::ResetTraversalState(NIceDb::TNiceDb& db) {
883883
TraversalRound = 0;
884884
}
885885

886-
template <typename T, typename S>
887-
void PrintContainerStart(const T& container, size_t count, TStringStream& str,
888-
std::function<S(const typename T::value_type&)> extractor)
886+
TString TStatisticsAggregator::GetNavigateTypeString() const {
887+
switch (NavigateType) {
888+
case Analyze:
889+
return "Analyze";
890+
case Traversal:
891+
return "Traversal";
892+
}
893+
}
894+
895+
TString TStatisticsAggregator::TForceTraversalTable::GetStatusString() const {
896+
switch (Status) {
897+
case EStatus::None:
898+
return "None";
899+
case EStatus::AnalyzeStarted:
900+
return "AnalyzeStarted";
901+
case EStatus::AnalyzeFinished:
902+
return "AnalyzeFinished";
903+
case EStatus::TraversalStarted:
904+
return "TraversalStarted";
905+
case EStatus::TraversalFinished:
906+
return "TraversalFinished";
907+
}
908+
}
909+
910+
void PrintContainerStart(const auto& container, size_t count, TStringStream& str, auto extractor)
889911
{
890912
if (container.empty()) {
891913
return;
@@ -922,49 +944,46 @@ bool TStatisticsAggregator::OnRenderAppHtmlPage(NMon::TEvRemoteHttpInfo::TPtr ev
922944
str << "BaseStatistics: " << BaseStatistics.size() << Endl;
923945
str << "SchemeShards: " << SchemeShards.size() << Endl;
924946
{
925-
std::function<TSSId(const std::pair<const TSSId, size_t>&)> extr =
926-
[](const auto& x) { return x.first; };
947+
auto extr = [](const auto& x) { return x.first; };
927948
PrintContainerStart(SchemeShards, 4, str, extr);
928949
}
929950
str << "Nodes: " << Nodes.size() << Endl;
930951
{
931-
std::function<TNodeId(const std::pair<const TNodeId, size_t>&)> extr =
932-
[](const auto& x) { return x.first; };
952+
auto extr = [](const auto& x) { return x.first; };
933953
PrintContainerStart(Nodes, 8, str, extr);
934954
}
935955
str << "RequestedSchemeShards: " << RequestedSchemeShards.size() << Endl;
936956
{
937-
std::function<TSSId(const TSSId&)> extr = [](const auto& x) { return x; };
957+
auto extr = [](const auto& x) { return x; };
938958
PrintContainerStart(RequestedSchemeShards, 4, str, extr);
939959
}
940960
str << "FastCounter: " << FastCounter << Endl;
941961
str << "FastCheckInFlight: " << FastCheckInFlight << Endl;
942962
str << "FastSchemeShards: " << FastSchemeShards.size() << Endl;
943963
{
944-
std::function<TSSId(const TSSId&)> extr = [](const auto& x) { return x; };
964+
auto extr = [](const auto& x) { return x; };
945965
PrintContainerStart(FastSchemeShards, 4, str, extr);
946966
}
947967
str << "FastNodes: " << FastNodes.size() << Endl;
948968
{
949-
std::function<TNodeId(const TNodeId&)> extr = [](const auto& x) { return x; };
969+
auto extr = [](const auto& x) { return x; };
950970
PrintContainerStart(FastNodes, 8, str, extr);
951971
}
952972
str << "PropagationInFlight: " << PropagationInFlight << Endl;
953973
str << "PropagationSchemeShards: " << PropagationSchemeShards.size() << Endl;
954974
{
955-
std::function<TSSId(const TSSId&)> extr = [](const auto& x) { return x; };
975+
auto extr = [](const auto& x) { return x; };
956976
PrintContainerStart(PropagationSchemeShards, 4, str, extr);
957977
}
958978
str << "PropagationNodes: " << PropagationNodes.size() << Endl;
959979
{
960-
std::function<TNodeId(const TNodeId&)> extr = [](const auto& x) { return x; };
980+
auto extr = [](const auto& x) { return x; };
961981
PrintContainerStart(FastNodes, 8, str, extr);
962982
}
963983
str << "LastSSIndex: " << LastSSIndex << Endl;
964984
str << "PendingRequests: " << PendingRequests.size() << Endl;
965985
str << "ProcessUrgentInFlight: " << ProcessUrgentInFlight << Endl << Endl;
966986

967-
str << "TraversalPathId: " << TraversalPathId << Endl;
968987
str << "Columns: " << Columns.size() << Endl;
969988
str << "DatashardRanges: " << DatashardRanges.size() << Endl;
970989
str << "CountMinSketches: " << CountMinSketches.size() << Endl << Endl;
@@ -973,16 +992,54 @@ bool TStatisticsAggregator::OnRenderAppHtmlPage(NMon::TEvRemoteHttpInfo::TPtr ev
973992
if (!ScheduleTraversalsByTime.Empty()) {
974993
auto* oldestTable = ScheduleTraversalsByTime.Top();
975994
str << " oldest table: " << oldestTable->PathId
976-
<< ", ordest table update time: " << oldestTable->LastUpdateTime << Endl;
995+
<< ", update time: " << oldestTable->LastUpdateTime.ToStringUpToSeconds() << Endl;
977996
}
978997
str << "ScheduleTraversalsBySchemeShard: " << ScheduleTraversalsBySchemeShard.size() << Endl;
979998
if (!ScheduleTraversalsBySchemeShard.empty()) {
980999
str << " " << ScheduleTraversalsBySchemeShard.begin()->first << Endl;
981-
std::function<TPathId(const TPathId&)> extr = [](const auto& x) { return x; };
1000+
auto extr = [](const auto& x) { return x; };
9821001
PrintContainerStart(ScheduleTraversalsBySchemeShard.begin()->second, 2, str, extr);
9831002
}
984-
str << "TraversalStartTime: " << TraversalStartTime << Endl;
1003+
str << "ForceTraversals: " << ForceTraversals.size() << Endl;
1004+
if (!ForceTraversals.empty()) {
1005+
auto extr = [](const auto& x) { return x.CreatedAt.ToStringUpToSeconds(); };
1006+
PrintContainerStart(ForceTraversals, 2, str, extr);
1007+
}
1008+
1009+
str << Endl;
1010+
str << "NavigateType: " << GetNavigateTypeString() << Endl;
1011+
str << "NavigateAnalyzeOperationId: " << NavigateAnalyzeOperationId << Endl;
1012+
str << "NavigatePathId: " << NavigatePathId << Endl;
1013+
1014+
str << Endl;
1015+
str << "ForceTraversalOperationId: " << ForceTraversalOperationId << Endl;
1016+
if (ForceTraversalOperationId) {
1017+
auto forceTraversal = CurrentForceTraversalOperation();
1018+
str << " CreatedAt: " << forceTraversal->CreatedAt << Endl;
1019+
str << ", ReplyToActorId: " << forceTraversal->ReplyToActorId << Endl;
1020+
str << ", Types: " << forceTraversal->Types << Endl;
1021+
str << ", Tables size: " << forceTraversal->Tables.size() << Endl;
1022+
str << ", Tables: " << Endl;
1023+
1024+
for (size_t i = 0; i < forceTraversal->Tables.size(); ++i) {
1025+
const TForceTraversalTable& table = forceTraversal->Tables[i];
1026+
str << " Table[" << i << "] PathId: " << table.PathId << Endl;
1027+
str << " Status: " << table.GetStatusString() << Endl;
1028+
str << " AnalyzedShards size: " << table.AnalyzedShards.size() << Endl;
1029+
str << " ColumnTags: " << table.ColumnTags << Endl;
1030+
}
1031+
}
1032+
1033+
str << Endl;
1034+
str << "TraversalStartTime: " << TraversalStartTime.ToStringUpToSeconds() << Endl;
1035+
str << "TraversalPathId: " << TraversalPathId << Endl;
1036+
str << "TraversalIsColumnTable: " << TraversalIsColumnTable << Endl;
1037+
str << "TraversalStartKey: " << TraversalStartKey.GetBuffer() << Endl;
9851038

1039+
str << Endl;
1040+
str << "GlobalTraversalRound: " << GlobalTraversalRound << Endl;
1041+
str << "TraversalRound: " << TraversalRound << Endl;
1042+
str << "HiveRequestRound: " << HiveRequestRound << Endl;
9861043
}
9871044
}
9881045

ydb/core/statistics/aggregator/aggregator_impl.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,8 @@ class TStatisticsAggregator : public TActor<TStatisticsAggregator>, public NTabl
335335
Traversal
336336
};
337337
ENavigateType NavigateType = Analyze;
338+
TString GetNavigateTypeString() const;
339+
338340
TString NavigateAnalyzeOperationId;
339341
TPathId NavigatePathId;
340342

@@ -386,6 +388,8 @@ class TStatisticsAggregator : public TActor<TStatisticsAggregator>, public NTabl
386388
TraversalFinished,
387389
};
388390
EStatus Status = EStatus::None;
391+
392+
TString GetStatusString() const;
389393
};
390394
struct TForceTraversalOperation {
391395
TString OperationId;

ydb/core/statistics/aggregator/ut/ut_analyze_columnshard.cpp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,7 @@ Y_UNIT_TEST_SUITE(AnalyzeColumnshard) {
4949
auto& runtime = *env.GetServer().GetRuntime();
5050
auto sender = runtime.AllocateEdgeActor();
5151

52-
auto schemeShardStatsBlocker = runtime.AddObserver<TEvStatistics::TEvSchemeShardStats>([&](auto& ev) {
53-
ev.Reset();
54-
});
52+
TBlockEvents<TEvStatistics::TEvAnalyzeTableResponse> block(runtime);
5553

5654
auto tableInfo = CreateDatabaseColumnTables(env, 1, 1)[0];
5755

@@ -64,7 +62,19 @@ Y_UNIT_TEST_SUITE(AnalyzeColumnshard) {
6462

6563
AnalyzeStatus(runtime, sender, tableInfo.SaTabletId, operationId, NKikimrStat::TEvAnalyzeStatusResponse::STATUS_ENQUEUED);
6664

67-
schemeShardStatsBlocker.Remove();
65+
// Check EvRemoteHttpInfo
66+
{
67+
auto httpRequest = std::make_unique<NActors::NMon::TEvRemoteHttpInfo>("/app?");
68+
runtime.SendToPipe(tableInfo.SaTabletId, sender, httpRequest.release(), 0, {});
69+
auto httpResponse = runtime.GrabEdgeEventRethrow<NActors::NMon::TEvRemoteHttpInfoRes>(sender);
70+
TString body = httpResponse->Get()->Html;
71+
Cerr << body << Endl;
72+
UNIT_ASSERT(body.Size() > 500);
73+
UNIT_ASSERT(body.Contains("ForceTraversals: 1"));
74+
}
75+
76+
block.Unblock();
77+
block.Stop();
6878

6979
auto analyzeResonse = runtime.GrabEdgeEventRethrow<TEvStatistics::TEvAnalyzeResponse>(sender);
7080
UNIT_ASSERT_VALUES_EQUAL(analyzeResonse->Get()->Record.GetOperationId(), operationId);

0 commit comments

Comments
 (0)