|
@@ -36,7 +36,7 @@ public:
|
|
|
}
|
|
|
|
|
|
void Bootstrap() override {
|
|
|
- TBase::RequestSettings.MergeFields = TWhiteboardInfo<TResponseType>::GetDefaultMergeField();
|
|
|
+ TBase::RequestSettings.MergeFields = Event->Get()->Record.GetMergeFields();
|
|
|
TBase::RequestSettings.Timeout = Event->Get()->Record.GetTimeout();
|
|
|
for (TNodeId nodeId : Event->Get()->Record.GetLocation().GetNodeId()) {
|
|
|
TBase::RequestSettings.FilterNodeIds.push_back(nodeId);
|
|
@@ -74,15 +74,26 @@ public:
|
|
|
NKikimr::NViewer::MergeWhiteboardResponses(*(response->Record.MutableBSGroupResponse()), perNodeStateInfo, fields);
|
|
|
}
|
|
|
|
|
|
+ static void Merge(NKikimrViewer::TEvViewerResponse& viewerResponse, TNodeId nodeId, TResponseType& nodeResponse);
|
|
|
+
|
|
|
void ReplyAndPassAway() override {
|
|
|
auto response = MakeHolder<TEvViewer::TEvViewerResponse>();
|
|
|
auto& locationResponded = (*response->Record.MutableLocationResponded());
|
|
|
- auto perNodeStateInfo = TBase::GetPerNodeStateInfo();
|
|
|
- for (const auto& [nodeId, nodeResponse] : perNodeStateInfo) {
|
|
|
- locationResponded.AddNodeId(nodeId);
|
|
|
- }
|
|
|
|
|
|
- MergeWhiteboardResponses(response.Get(), perNodeStateInfo, TBase::RequestSettings.MergeFields);
|
|
|
+ if (TBase::RequestSettings.MergeFields) {
|
|
|
+ auto perNodeStateInfo = TBase::GetPerNodeStateInfo();
|
|
|
+ for (const auto& [nodeId, nodeResponse] : perNodeStateInfo) {
|
|
|
+ locationResponded.AddNodeId(nodeId);
|
|
|
+ }
|
|
|
+ MergeWhiteboardResponses(response.Get(), perNodeStateInfo, TBase::RequestSettings.MergeFields);
|
|
|
+ } else {
|
|
|
+ for (auto& [nodeId, nodeResponse] : TBase::NodeResponses) {
|
|
|
+ if (nodeResponse.IsOk()) {
|
|
|
+ locationResponded.AddNodeId(nodeId);
|
|
|
+ Merge(response->Record, nodeId, nodeResponse.Get()->Record);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
TBase::Send(Event->Sender, response.Release(), 0, Event->Cookie);
|
|
|
TBase::PassAway();
|
|
@@ -120,6 +131,17 @@ THolder<TEvWhiteboard::TEvTabletStateRequest> TViewerWhiteboardRequest<TEvWhiteb
|
|
|
return request;
|
|
|
}
|
|
|
|
|
|
+template<>
|
|
|
+void TViewerWhiteboardRequest<TEvWhiteboard::TEvTabletStateRequest, TEvWhiteboard::TEvTabletStateResponse>::Merge(
|
|
|
+ NKikimrViewer::TEvViewerResponse& viewerResponse, TNodeId nodeId, NKikimrWhiteboard::TEvTabletStateResponse& nodeResponse) {
|
|
|
+ auto& target = *viewerResponse.MutableTabletResponse();
|
|
|
+ for (auto& info : *nodeResponse.MutableTabletStateInfo()) {
|
|
|
+ auto& i = *target.AddTabletStateInfo();
|
|
|
+ i.MergeFrom(info);
|
|
|
+ i.SetNodeId(nodeId);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
template<>
|
|
|
THolder<TEvWhiteboard::TEvSystemStateRequest> TViewerWhiteboardRequest<TEvWhiteboard::TEvSystemStateRequest, TEvWhiteboard::TEvSystemStateResponse>::BuildRequest() {
|
|
|
auto request = TBase::BuildRequest();
|
|
@@ -127,6 +149,17 @@ THolder<TEvWhiteboard::TEvSystemStateRequest> TViewerWhiteboardRequest<TEvWhiteb
|
|
|
return request;
|
|
|
}
|
|
|
|
|
|
+template<>
|
|
|
+void TViewerWhiteboardRequest<TEvWhiteboard::TEvSystemStateRequest, TEvWhiteboard::TEvSystemStateResponse>::Merge(
|
|
|
+ NKikimrViewer::TEvViewerResponse& viewerResponse, TNodeId nodeId, NKikimrWhiteboard::TEvSystemStateResponse& nodeResponse) {
|
|
|
+ auto& target = *viewerResponse.MutableSystemResponse();
|
|
|
+ for (auto& info : *nodeResponse.MutableSystemStateInfo()) {
|
|
|
+ auto& i = *target.AddSystemStateInfo();
|
|
|
+ i.MergeFrom(info);
|
|
|
+ i.SetNodeId(nodeId);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
template<>
|
|
|
THolder<TEvWhiteboard::TEvVDiskStateRequest> TViewerWhiteboardRequest<TEvWhiteboard::TEvVDiskStateRequest, TEvWhiteboard::TEvVDiskStateResponse>::BuildRequest() {
|
|
|
auto request = TBase::BuildRequest();
|
|
@@ -134,6 +167,17 @@ THolder<TEvWhiteboard::TEvVDiskStateRequest> TViewerWhiteboardRequest<TEvWhitebo
|
|
|
return request;
|
|
|
}
|
|
|
|
|
|
+template<>
|
|
|
+void TViewerWhiteboardRequest<TEvWhiteboard::TEvVDiskStateRequest, TEvWhiteboard::TEvVDiskStateResponse>::Merge(
|
|
|
+ NKikimrViewer::TEvViewerResponse& viewerResponse, TNodeId nodeId, NKikimrWhiteboard::TEvVDiskStateResponse& nodeResponse) {
|
|
|
+ auto& target = *viewerResponse.MutableVDiskResponse();
|
|
|
+ for (auto& info : *nodeResponse.MutableVDiskStateInfo()) {
|
|
|
+ auto& i = *target.AddVDiskStateInfo();
|
|
|
+ i.MergeFrom(info);
|
|
|
+ i.SetNodeId(nodeId);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
template<>
|
|
|
THolder<TEvWhiteboard::TEvPDiskStateRequest> TViewerWhiteboardRequest<TEvWhiteboard::TEvPDiskStateRequest, TEvWhiteboard::TEvPDiskStateResponse>::BuildRequest() {
|
|
|
auto request = TBase::BuildRequest();
|
|
@@ -141,6 +185,17 @@ THolder<TEvWhiteboard::TEvPDiskStateRequest> TViewerWhiteboardRequest<TEvWhitebo
|
|
|
return request;
|
|
|
}
|
|
|
|
|
|
+template<>
|
|
|
+void TViewerWhiteboardRequest<TEvWhiteboard::TEvPDiskStateRequest, TEvWhiteboard::TEvPDiskStateResponse>::Merge(
|
|
|
+ NKikimrViewer::TEvViewerResponse& viewerResponse, TNodeId nodeId, NKikimrWhiteboard::TEvPDiskStateResponse& nodeResponse) {
|
|
|
+ auto& target = *viewerResponse.MutablePDiskResponse();
|
|
|
+ for (auto& info : *nodeResponse.MutablePDiskStateInfo()) {
|
|
|
+ auto& i = *target.AddPDiskStateInfo();
|
|
|
+ i.MergeFrom(info);
|
|
|
+ i.SetNodeId(nodeId);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
template<>
|
|
|
THolder<TEvWhiteboard::TEvBSGroupStateRequest> TViewerWhiteboardRequest<TEvWhiteboard::TEvBSGroupStateRequest, TEvWhiteboard::TEvBSGroupStateResponse>::BuildRequest() {
|
|
|
auto request = TBase::BuildRequest();
|
|
@@ -148,6 +203,17 @@ THolder<TEvWhiteboard::TEvBSGroupStateRequest> TViewerWhiteboardRequest<TEvWhite
|
|
|
return request;
|
|
|
}
|
|
|
|
|
|
+template<>
|
|
|
+void TViewerWhiteboardRequest<TEvWhiteboard::TEvBSGroupStateRequest, TEvWhiteboard::TEvBSGroupStateResponse>::Merge(
|
|
|
+ NKikimrViewer::TEvViewerResponse& viewerResponse, TNodeId nodeId, NKikimrWhiteboard::TEvBSGroupStateResponse& nodeResponse) {
|
|
|
+ auto& target = *viewerResponse.MutableBSGroupResponse();
|
|
|
+ for (auto& info : *nodeResponse.MutableBSGroupStateInfo()) {
|
|
|
+ auto& i = *target.AddBSGroupStateInfo();
|
|
|
+ i.MergeFrom(info);
|
|
|
+ i.SetNodeId(nodeId);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
bool IsPostContent(const NMon::TEvHttpInfo::TPtr& event) {
|
|
|
if (event->Get()->Request.GetMethod() == HTTP_METHOD_POST) {
|
|
|
const THttpHeaders& headers = event->Get()->Request.GetHeaders();
|