@@ -14,62 +14,38 @@ using namespace NMonitoring;
14
14
class TJsonRender : public TViewerPipeClient {
15
15
using TThis = TJsonRender;
16
16
using TBase = TViewerPipeClient;
17
- TEvViewer::TEvViewerRequest::TPtr ViewerRequest;
18
- ui32 Timeout = 0 ;
17
+ using TBase::ReplyAndPassAway;
19
18
std::vector<TString> Metrics;
20
- TCgiParameters Params;
21
19
22
20
public:
23
21
TJsonRender (IViewer* viewer, NMon::TEvHttpInfo::TPtr& ev)
24
22
: TViewerPipeClient(viewer, ev)
25
23
{
26
- const auto & params (Event->Get ()->Request .GetParams ());
27
-
28
- InitConfig (params);
29
- Timeout = FromStringWithDefault<ui32>(params.Get (" timeout" ), 30000 );
30
- }
31
-
32
- TJsonRender (TEvViewer::TEvViewerRequest::TPtr& ev)
33
- : ViewerRequest(ev)
34
- {
35
- auto & request = ViewerRequest->Get ()->Record .GetRenderRequest ();
36
-
37
- TCgiParameters params (request.GetUri ());
38
- InitConfig (params);
39
- Direct = true ;
40
- Timeout = ViewerRequest->Get ()->Record .GetTimeout ();
41
24
}
42
25
43
26
void Bootstrap () override {
44
27
if (NeedToRedirect ()) {
45
28
return ;
46
29
}
47
- auto postData = Event
48
- ? Event->Get ()->Request .GetPostContent ()
49
- : ViewerRequest->Get ()->Record .GetRenderRequest ().GetContent ();
50
- BLOG_D (" PostData=" << postData);
51
30
NKikimrGraph::TEvGetMetrics getRequest;
52
- if (postData) {
53
- Params = TCgiParameters (postData);
54
- if (Params.Has (" target" )) {
55
- TString metric;
56
- size_t num = 0 ;
57
- for (;;) {
58
- metric = Params.Get (" target" , num);
59
- if (metric.empty ()) {
60
- break ;
61
- }
62
- Metrics.push_back (metric);
63
- ++num;
31
+ if (Params.Has (" target" )) {
32
+ TString metric;
33
+ size_t num = 0 ;
34
+ for (;;) {
35
+ metric = Params.Get (" target" , num);
36
+ if (metric.empty ()) {
37
+ break ;
64
38
}
39
+ Metrics.push_back (metric);
40
+ ++num;
65
41
}
66
42
SendGraphRequest ();
67
43
} else {
68
- ReplyAndPassAway (Viewer-> GetHTTPBADREQUEST (Event-> Get (), {} , " Bad Request" ));
44
+ ReplyAndPassAway (GetHTTPBADREQUEST (" text/plain " , " Bad Request" ));
69
45
return ;
70
46
}
71
47
72
- Become (&TThis::StateWork, TDuration::MilliSeconds ( Timeout) , new TEvents::TEvWakeup ());
48
+ Become (&TThis::StateWork, Timeout, new TEvents::TEvWakeup ());
73
49
}
74
50
75
51
STATEFN (StateWork) {
@@ -90,7 +66,7 @@ class TJsonRender : public TViewerPipeClient {
90
66
" \x03\x00\x00\x00\x25\xdb\x56\xca\x00\x00\x00\x03\x50\x4c\x54\x45\x00\x00\x00\xa7\x7a\x3d\xda\x00\x00 "
91
67
" \x00\x01\x74\x52\x4e\x53\x00\x40\xe6\xd8\x66\x00\x00\x00\x0a\x49\x44\x41\x54\x08\xd7\x63\x60\x00\x00 "
92
68
" \x00\x02\x00\x01\xe2\x21\xbc\x33\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82 " ;
93
- Send (Event-> Sender , new NMon::TEvHttpInfoRes (Viewer-> GetHTTPOK (Event-> Get (), " image/png" , png1x1), 0 , NMon::IEvHttpInfoRes::EContentType::Custom ));
69
+ ReplyAndPassAway ( GetHTTPOK (" image/png" , png1x1));
94
70
return PassAway ();
95
71
}
96
72
if (Params.Has (" from" )) {
@@ -106,82 +82,56 @@ class TJsonRender : public TViewerPipeClient {
106
82
}
107
83
108
84
void HandleRenderResponse (NKikimrGraph::TEvMetricsResult& response) {
109
- if (Event) {
110
- NJson::TJsonValue json;
85
+ NJson::TJsonValue json;
111
86
112
- if (response.GetError ()) {
113
- json[" status" ] = " error" ;
114
- json[" error" ] = response.GetError ();
115
- return ReplyAndPassAway (GetHTTPOKJSON (json));
116
- }
117
- if (response.DataSize () != Metrics.size ()) {
87
+ if (response.GetError ()) {
88
+ json[" status" ] = " error" ;
89
+ json[" error" ] = response.GetError ();
90
+ return ReplyAndPassAway (GetHTTPOKJSON (json));
91
+ }
92
+ if (response.DataSize () != Metrics.size ()) {
93
+ json[" status" ] = " error" ;
94
+ json[" error" ] = " Invalid data size received" ;
95
+ return ReplyAndPassAway (GetHTTPOKJSON (json));
96
+ }
97
+ for (size_t nMetric = 0 ; nMetric < response.DataSize (); ++nMetric) {
98
+ const auto & protoMetric (response.GetData (nMetric));
99
+ if (response.TimeSize () != protoMetric.ValuesSize ()) {
118
100
json[" status" ] = " error" ;
119
- json[" error" ] = " Invalid data size received" ;
101
+ json[" error" ] = " Invalid value size received" ;
120
102
return ReplyAndPassAway (GetHTTPOKJSON (json));
121
103
}
104
+ }
105
+ { // graphite
106
+ json.SetType (NJson::JSON_ARRAY);
122
107
for (size_t nMetric = 0 ; nMetric < response.DataSize (); ++nMetric) {
123
108
const auto & protoMetric (response.GetData (nMetric));
124
- if (response.TimeSize () != protoMetric.ValuesSize ()) {
125
- json[" status" ] = " error" ;
126
- json[" error" ] = " Invalid value size received" ;
127
- return ReplyAndPassAway (GetHTTPOKJSON (json));
128
- }
129
- }
130
- { // graphite
131
- json.SetType (NJson::JSON_ARRAY);
132
- for (size_t nMetric = 0 ; nMetric < response.DataSize (); ++nMetric) {
133
- const auto & protoMetric (response.GetData (nMetric));
134
- NJson::TJsonValue& jsonMetric (json.AppendValue ({}));
135
- jsonMetric[" target" ] = Metrics[nMetric];
136
- jsonMetric[" title" ] = Metrics[nMetric];
137
- jsonMetric[" tags" ][" name" ] = Metrics[nMetric];
138
- NJson::TJsonValue& jsonDataPoints (jsonMetric[" datapoints" ]);
139
- jsonDataPoints.SetType (NJson::JSON_ARRAY);
140
- for (size_t nTime = 0 ; nTime < response.TimeSize (); ++nTime) {
141
- NJson::TJsonValue& jsonDataPoint (jsonDataPoints.AppendValue ({}));
142
- double value = protoMetric.GetValues (nTime);
143
- if (isnan (value)) {
144
- jsonDataPoint.AppendValue (NJson::TJsonValue (NJson::JSON_NULL));
145
- } else {
146
- jsonDataPoint.AppendValue (value);
147
- }
148
- jsonDataPoint.AppendValue (response.GetTime (nTime));
109
+ NJson::TJsonValue& jsonMetric (json.AppendValue ({}));
110
+ jsonMetric[" target" ] = Metrics[nMetric];
111
+ jsonMetric[" title" ] = Metrics[nMetric];
112
+ jsonMetric[" tags" ][" name" ] = Metrics[nMetric];
113
+ NJson::TJsonValue& jsonDataPoints (jsonMetric[" datapoints" ]);
114
+ jsonDataPoints.SetType (NJson::JSON_ARRAY);
115
+ for (size_t nTime = 0 ; nTime < response.TimeSize (); ++nTime) {
116
+ NJson::TJsonValue& jsonDataPoint (jsonDataPoints.AppendValue ({}));
117
+ double value = protoMetric.GetValues (nTime);
118
+ if (isnan (value)) {
119
+ jsonDataPoint.AppendValue (NJson::TJsonValue (NJson::JSON_NULL));
120
+ } else {
121
+ jsonDataPoint.AppendValue (value);
149
122
}
123
+ jsonDataPoint.AppendValue (response.GetTime (nTime));
150
124
}
151
125
}
152
-
153
- ReplyAndPassAway (GetHTTPOKJSON (json));
154
- } else {
155
- TEvViewer::TEvViewerResponse* viewerResponse = new TEvViewer::TEvViewerResponse ();
156
- viewerResponse->Record .MutableRenderResponse ()->CopyFrom (response);
157
- ReplyAndPassAway (viewerResponse);
158
126
}
127
+
128
+ ReplyAndPassAway (GetHTTPOKJSON (json));
159
129
}
160
130
161
131
void Handle (NGraph::TEvGraph::TEvMetricsResult::TPtr& ev) {
162
132
HandleRenderResponse (ev->Get ()->Record );
163
133
}
164
134
165
- void HandleTimeout () {
166
- if (Event) {
167
- ReplyAndPassAway (Viewer->GetHTTPGATEWAYTIMEOUT (Event->Get ()));
168
- } else {
169
- auto * response = new TEvViewer::TEvViewerResponse ();
170
- response->Record .MutableRenderResponse ()->SetError (" Request timed out" );
171
- ReplyAndPassAway (response);
172
- }
173
- }
174
-
175
- void ReplyAndPassAway (TEvViewer::TEvViewerResponse* response) {
176
- Send (ViewerRequest->Sender , response);
177
- PassAway ();
178
- }
179
-
180
- void ReplyAndPassAway (TString data) {
181
- Send (Event->Sender , new NMon::TEvHttpInfoRes (std::move (data), 0 , NMon::IEvHttpInfoRes::EContentType::Custom));
182
- PassAway ();
183
- }
184
-
185
135
void ReplyAndPassAway () override {
186
136
}
187
137
0 commit comments