@@ -154,6 +154,50 @@ func (router *Router) getTrace(w http.ResponseWriter, r *http.Request) {
154
154
render .JSON (w , r , body )
155
155
}
156
156
157
+ func (router * Router ) getMetrics (w http.ResponseWriter , r * http.Request ) {
158
+ name := r .Header .Get ("x-kobs-plugin" )
159
+ metric := r .URL .Query ().Get ("metric" )
160
+ service := r .URL .Query ().Get ("service" )
161
+ groupByOperation := r .URL .Query ().Get ("groupByOperation" )
162
+ quantile := r .URL .Query ().Get ("quantile" )
163
+ ratePer := r .URL .Query ().Get ("ratePer" )
164
+ step := r .URL .Query ().Get ("step" )
165
+ timeEnd := r .URL .Query ().Get ("timeEnd" )
166
+ timeStart := r .URL .Query ().Get ("timeStart" )
167
+
168
+ log .Debug (r .Context (), "Get metrics parameters" , zap .String ("name" , name ), zap .String ("metric" , metric ), zap .String ("service" , service ), zap .String ("groupByOperation" , groupByOperation ), zap .String ("quantile" , quantile ), zap .String ("ratePer" , ratePer ), zap .String ("step" , step ), zap .String ("timeEnd" , timeEnd ), zap .String ("timeStart" , timeStart ))
169
+
170
+ i := router .getInstance (name )
171
+ if i == nil {
172
+ log .Error (r .Context (), "Could not find instance name" , zap .String ("name" , name ))
173
+ errresponse .Render (w , r , nil , http .StatusBadRequest , "Could not find instance name" )
174
+ return
175
+ }
176
+
177
+ parsedTimeStart , err := strconv .ParseInt (timeStart , 10 , 64 )
178
+ if err != nil {
179
+ log .Error (r .Context (), "Could not parse start time" , zap .Error (err ))
180
+ errresponse .Render (w , r , nil , http .StatusBadRequest , "Could not parse start time" )
181
+ return
182
+ }
183
+
184
+ parsedTimeEnd , err := strconv .ParseInt (timeEnd , 10 , 64 )
185
+ if err != nil {
186
+ log .Error (r .Context (), "Could not parse end time" , zap .Error (err ))
187
+ errresponse .Render (w , r , nil , http .StatusBadRequest , "Could not parse end time" )
188
+ return
189
+ }
190
+
191
+ body , err := i .GetMetrics (r .Context (), metric , service , groupByOperation , quantile , ratePer , step , parsedTimeStart , parsedTimeEnd )
192
+ if err != nil {
193
+ log .Error (r .Context (), "Could not get metrics" , zap .Error (err ))
194
+ errresponse .Render (w , r , err , http .StatusInternalServerError , "Could not get metrics" )
195
+ return
196
+ }
197
+
198
+ render .JSON (w , r , body )
199
+ }
200
+
157
201
// Mount mounts the Jaeger plugin routes in the plugins router of a kobs satellite instance.
158
202
func Mount (instances []plugin.Instance , clustersClient clusters.Client ) (chi.Router , error ) {
159
203
var jaegerInstances []instance.Instance
@@ -176,6 +220,7 @@ func Mount(instances []plugin.Instance, clustersClient clusters.Client) (chi.Rou
176
220
router .Get ("/operations" , router .getOperations )
177
221
router .Get ("/traces" , router .getTraces )
178
222
router .Get ("/trace" , router .getTrace )
223
+ router .Get ("/metrics" , router .getMetrics )
179
224
180
225
return router , nil
181
226
}
0 commit comments