Skip to content

Commit fac97b4

Browse files
committed
add database parameter to viewer/tabletinfo handler (ydb-platform#7499)
1 parent 2eb279f commit fac97b4

File tree

4 files changed

+54
-21
lines changed

4 files changed

+54
-21
lines changed

ydb/core/viewer/json_wb_req.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,11 @@ void InitViewerTabletInfoJsonHandler(TJsonHandlers& jsonHandlers) {
136136
.Summary = "Tablet information",
137137
.Description = "Returns information about tablets"
138138
});
139+
yaml.AddParameter({
140+
.Name = "database",
141+
.Description = "database name",
142+
.Type = "string",
143+
});
139144
yaml.AddParameter({
140145
.Name = "node_id",
141146
.Description = "node identifier",

ydb/core/viewer/json_wb_req.h

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,16 @@ class TJsonWhiteboardRequest : public TWhiteboardRequest<TRequestEventType, TRes
2424
using TThis = TJsonWhiteboardRequest<TRequestEventType, TResponseEventType>;
2525
using TBase = TWhiteboardRequest<TRequestEventType, TResponseEventType>;
2626
using TResponseType = typename TResponseEventType::ProtoRecordType;
27-
IViewer* Viewer;
28-
NMon::TEvHttpInfo::TPtr Event;
27+
using TBase::Event;
28+
using TBase::ReplyAndPassAway;
2929
TJsonSettings JsonSettings;
3030

3131
static constexpr NKikimrServices::TActivity::EType ActorActivityType() {
3232
return NKikimrServices::TActivity::VIEWER_HANDLER;
3333
}
3434

3535
TJsonWhiteboardRequest(IViewer* viewer, NMon::TEvHttpInfo::TPtr& ev)
36-
: Viewer(viewer)
37-
, Event(ev)
36+
: TBase(viewer, ev)
3837
{}
3938

4039
void Bootstrap() override {
@@ -65,7 +64,6 @@ class TJsonWhiteboardRequest : public TWhiteboardRequest<TRequestEventType, TRes
6564
TBase::RequestSettings.StaticNodesOnly = FromStringWithDefault<bool>(params.Get("static"), false);
6665
}
6766
TBase::RequestSettings.Format = params.Get("format");
68-
6967
TBase::Bootstrap();
7068
}
7169

@@ -120,11 +118,10 @@ class TJsonWhiteboardRequest : public TWhiteboardRequest<TRequestEventType, TRes
120118
}
121119
json << '}';
122120
}
123-
TBase::Send(Event->Sender, new NMon::TEvHttpInfoRes(Viewer->GetHTTPOKJSON(Event->Get(), std::move(json.Str())), 0, NMon::IEvHttpInfoRes::EContentType::Custom));
121+
ReplyAndPassAway(TBase::GetHTTPOKJSON(json.Str()));
124122
} catch (const std::exception& e) {
125-
TBase::Send(Event->Sender, new NMon::TEvHttpInfoRes(TString("HTTP/1.1 400 Bad Request\r\n\r\n") + e.what(), 0, NMon::IEvHttpInfoRes::EContentType::Custom));
123+
ReplyAndPassAway(TBase::GetHTTPBADREQUEST("text/plain", e.what()));
126124
}
127-
TBase::PassAway();
128125
}
129126
};
130127

ydb/core/viewer/viewer_tabletinfo.h

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,19 @@ class TJsonTabletInfo : public TJsonWhiteboardRequest<TEvWhiteboard::TEvTabletSt
8484
void Bootstrap() override {
8585
BLOG_TRACE("Bootstrap()");
8686
const auto& params(Event->Get()->Request.GetParams());
87+
TBase::RequestSettings.Timeout = FromStringWithDefault<ui32>(params.Get("timeout"), 10000);
88+
TString database = params.Get("database");
89+
if (database) {
90+
RegisterWithSameMailbox(CreateBoardLookupActor(MakeEndpointsBoardPath(database), TBase::SelfId(), EBoardLookupMode::Second));
91+
Become(&TThis::StateRequestedLookup, TDuration::MilliSeconds(TBase::RequestSettings.Timeout), new TEvents::TEvWakeup());
92+
return;
93+
}
94+
CheckPath();
95+
}
96+
97+
void CheckPath() {
98+
BLOG_TRACE("CheckPath()");
99+
const auto& params(Event->Get()->Request.GetParams());
87100
ReplyWithDeadTabletsInfo = params.Has("path");
88101
if (params.Has("path")) {
89102
TBase::RequestSettings.Timeout = FromStringWithDefault<ui32>(params.Get("timeout"), 10000);
@@ -94,23 +107,31 @@ class TJsonTabletInfo : public TJsonWhiteboardRequest<TEvWhiteboard::TEvTabletSt
94107
}
95108
NKikimrSchemeOp::TDescribePath* record = request->Record.MutableDescribePath();
96109
record->SetPath(params.Get("path"));
97-
98-
TActorId txproxy = MakeTxProxyID();
99-
TBase::Send(txproxy, request.Release());
100-
UnsafeBecome(&TThis::StateRequestedDescribe, TDuration::MilliSeconds(TBase::RequestSettings.Timeout), new TEvents::TEvWakeup());
110+
TBase::Send(MakeTxProxyID(), request.Release());
111+
Become(&TThis::StateRequestedDescribe, TDuration::MilliSeconds(TBase::RequestSettings.Timeout), new TEvents::TEvWakeup());
101112
} else {
102113
TBase::Bootstrap();
103-
if (!TBase::RequestSettings.FilterFields.empty()) {
104-
if (IsMatchesWildcard(TBase::RequestSettings.FilterFields, "(TabletId=*)")) {
105-
TString strTabletId(TBase::RequestSettings.FilterFields.substr(10, TBase::RequestSettings.FilterFields.size() - 11));
106-
TTabletId uiTabletId(FromStringWithDefault<TTabletId>(strTabletId, {}));
107-
if (uiTabletId) {
108-
Tablets[uiTabletId] = NKikimrTabletBase::TTabletTypes::Unknown;
109-
Request->Record.AddFilterTabletId(uiTabletId);
110-
}
114+
}
115+
}
116+
117+
THolder<TEvWhiteboard::TEvTabletStateRequest> BuildRequest() override {
118+
THolder<TEvWhiteboard::TEvTabletStateRequest> request = TBase::BuildRequest();
119+
if (!TBase::RequestSettings.FilterFields.empty()) {
120+
if (IsMatchesWildcard(TBase::RequestSettings.FilterFields, "(TabletId=*)")) {
121+
TString strTabletId(TBase::RequestSettings.FilterFields.substr(10, TBase::RequestSettings.FilterFields.size() - 11));
122+
TTabletId uiTabletId(FromStringWithDefault<TTabletId>(strTabletId, {}));
123+
if (uiTabletId) {
124+
Tablets[uiTabletId] = NKikimrTabletBase::TTabletTypes::Unknown;
125+
Request->Record.AddFilterTabletId(uiTabletId);
111126
}
112127
}
113128
}
129+
return request;
130+
}
131+
132+
void Handle(TEvStateStorage::TEvBoardInfo::TPtr& ev) {
133+
TBase::RequestSettings.FilterNodeIds = TBase::GetNodesFromBoardReply(ev);
134+
CheckPath();
114135
}
115136

116137
TString GetColumnValue(const TCell& cell, const NKikimrSchemeOp::TColumnDescription& type) {
@@ -343,6 +364,13 @@ class TJsonTabletInfo : public TJsonWhiteboardRequest<TEvWhiteboard::TEvTabletSt
343364
TBase::FilterResponse(response);
344365
}
345366

367+
STATEFN(StateRequestedLookup) {
368+
switch (ev->GetTypeRewrite()) {
369+
hFunc(TEvStateStorage::TEvBoardInfo, Handle);
370+
cFunc(TEvents::TSystem::Wakeup, HandleTimeout);
371+
}
372+
}
373+
346374
STATEFN(StateRequestedDescribe) {
347375
switch (ev->GetTypeRewrite()) {
348376
hFunc(NSchemeShard::TEvSchemeShard::TEvDescribeSchemeResult, Handle);

ydb/core/viewer/wb_req.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,11 @@ class TWhiteboardRequest : public TViewerPipeClient {
5050
}
5151

5252
TWhiteboardRequest() = default;
53+
TWhiteboardRequest(IViewer* viewer, NMon::TEvHttpInfo::TPtr& ev)
54+
: TBase(viewer, ev)
55+
{}
5356

54-
THolder<TRequestEventType> BuildRequest() {
57+
virtual THolder<TRequestEventType> BuildRequest() {
5558
THolder<TRequestEventType> request = MakeHolder<TRequestEventType>();
5659
constexpr bool hasFormat = requires(const TRequestEventType* r) {r->Record.GetFormat();};
5760
if constexpr (hasFormat) {

0 commit comments

Comments
 (0)