99 "strings"
1010 "time"
1111
12+ "github.com/alibaba/pouch/apis/metrics"
1213 "github.com/alibaba/pouch/apis/types"
1314 "github.com/alibaba/pouch/daemon/mgr"
1415 "github.com/alibaba/pouch/pkg/httputils"
@@ -22,6 +23,12 @@ import (
2223)
2324
2425func (s * Server ) createContainer (ctx context.Context , rw http.ResponseWriter , req * http.Request ) error {
26+ label := "create"
27+ metrics .ContainerActionsCounter .WithLabelValues (label ).Inc ()
28+ defer func (start time.Time ) {
29+ metrics .ContainerActionsTimer .WithLabelValues (label ).Observe (time .Since (start ).Seconds ())
30+ }(time .Now ())
31+
2532 config := & types.ContainerCreateConfig {}
2633 reader := req .Body
2734 var ex error
@@ -57,6 +64,8 @@ func (s *Server) createContainer(ctx context.Context, rw http.ResponseWriter, re
5764 return err
5865 }
5966
67+ metrics .ContainerSuccessActionsCounter .WithLabelValues (label ).Inc ()
68+
6069 return EncodeResponse (rw , http .StatusCreated , container )
6170}
6271
@@ -150,6 +159,12 @@ func (s *Server) getContainers(ctx context.Context, rw http.ResponseWriter, req
150159}
151160
152161func (s * Server ) startContainer (ctx context.Context , rw http.ResponseWriter , req * http.Request ) error {
162+ label := "start"
163+ metrics .ContainerActionsCounter .WithLabelValues (label ).Inc ()
164+ defer func (start time.Time ) {
165+ metrics .ContainerActionsTimer .WithLabelValues (label ).Observe (time .Since (start ).Seconds ())
166+ }(time .Now ())
167+
153168 name := mux .Vars (req )["name" ]
154169
155170 options := & types.ContainerStartOptions {
@@ -162,6 +177,8 @@ func (s *Server) startContainer(ctx context.Context, rw http.ResponseWriter, req
162177 return err
163178 }
164179
180+ metrics .ContainerSuccessActionsCounter .WithLabelValues (label ).Inc ()
181+
165182 rw .WriteHeader (http .StatusNoContent )
166183 return nil
167184}
@@ -171,6 +188,11 @@ func (s *Server) restartContainer(ctx context.Context, rw http.ResponseWriter, r
171188 t int
172189 err error
173190 )
191+ label := "restart"
192+ metrics .ContainerActionsCounter .WithLabelValues (label ).Inc ()
193+ defer func (start time.Time ) {
194+ metrics .ContainerActionsTimer .WithLabelValues (label ).Observe (time .Since (start ).Seconds ())
195+ }(time .Now ())
174196
175197 if v := req .FormValue ("t" ); v != "" {
176198 if t , err = strconv .Atoi (v ); err != nil {
@@ -184,6 +206,8 @@ func (s *Server) restartContainer(ctx context.Context, rw http.ResponseWriter, r
184206 return err
185207 }
186208
209+ metrics .ContainerSuccessActionsCounter .WithLabelValues (label ).Inc ()
210+
187211 rw .WriteHeader (http .StatusNoContent )
188212 return nil
189213}
@@ -194,6 +218,12 @@ func (s *Server) stopContainer(ctx context.Context, rw http.ResponseWriter, req
194218 err error
195219 )
196220
221+ label := "stop"
222+ metrics .ContainerActionsCounter .WithLabelValues (label ).Inc ()
223+ defer func (start time.Time ) {
224+ metrics .ContainerActionsTimer .WithLabelValues (label ).Observe (time .Since (start ).Seconds ())
225+ }(time .Now ())
226+
197227 if v := req .FormValue ("t" ); v != "" {
198228 if t , err = strconv .Atoi (v ); err != nil {
199229 return httputils .NewHTTPError (err , http .StatusBadRequest )
@@ -206,6 +236,8 @@ func (s *Server) stopContainer(ctx context.Context, rw http.ResponseWriter, req
206236 return err
207237 }
208238
239+ metrics .ContainerSuccessActionsCounter .WithLabelValues (label ).Inc ()
240+
209241 rw .WriteHeader (http .StatusNoContent )
210242 return nil
211243}
@@ -233,13 +265,21 @@ func (s *Server) unpauseContainer(ctx context.Context, rw http.ResponseWriter, r
233265}
234266
235267func (s * Server ) renameContainer (ctx context.Context , rw http.ResponseWriter , req * http.Request ) error {
268+ label := "rename"
269+ metrics .ContainerActionsCounter .WithLabelValues (label ).Inc ()
270+ defer func (start time.Time ) {
271+ metrics .ContainerActionsTimer .WithLabelValues (label ).Observe (time .Since (start ).Seconds ())
272+ }(time .Now ())
273+
236274 oldName := mux .Vars (req )["name" ]
237275 newName := req .FormValue ("name" )
238276
239277 if err := s .ContainerMgr .Rename (ctx , oldName , newName ); err != nil {
240278 return err
241279 }
242280
281+ metrics .ContainerSuccessActionsCounter .WithLabelValues (label ).Inc ()
282+
243283 rw .WriteHeader (http .StatusNoContent )
244284 return nil
245285}
@@ -270,6 +310,12 @@ func (s *Server) attachContainer(ctx context.Context, rw http.ResponseWriter, re
270310}
271311
272312func (s * Server ) updateContainer (ctx context.Context , rw http.ResponseWriter , req * http.Request ) error {
313+ label := "update"
314+ metrics .ContainerActionsCounter .WithLabelValues (label ).Inc ()
315+ defer func (start time.Time ) {
316+ metrics .ContainerActionsTimer .WithLabelValues (label ).Observe (time .Since (start ).Seconds ())
317+ }(time .Now ())
318+
273319 config := & types.UpdateConfig {}
274320
275321 // set pre update hook plugin
@@ -293,11 +339,19 @@ func (s *Server) updateContainer(ctx context.Context, rw http.ResponseWriter, re
293339 return httputils .NewHTTPError (err , http .StatusInternalServerError )
294340 }
295341
342+ metrics .ContainerSuccessActionsCounter .WithLabelValues (label ).Inc ()
343+
296344 rw .WriteHeader (http .StatusOK )
297345 return nil
298346}
299347
300348func (s * Server ) upgradeContainer (ctx context.Context , rw http.ResponseWriter , req * http.Request ) error {
349+ label := "upgrade"
350+ metrics .ContainerActionsCounter .WithLabelValues (label ).Inc ()
351+ defer func (start time.Time ) {
352+ metrics .ContainerActionsTimer .WithLabelValues (label ).Observe (time .Since (start ).Seconds ())
353+ }(time .Now ())
354+
301355 config := & types.ContainerUpgradeConfig {}
302356 // decode request body
303357 if err := json .NewDecoder (req .Body ).Decode (config ); err != nil {
@@ -314,6 +368,8 @@ func (s *Server) upgradeContainer(ctx context.Context, rw http.ResponseWriter, r
314368 return err
315369 }
316370
371+ metrics .ContainerSuccessActionsCounter .WithLabelValues (label ).Inc ()
372+
317373 rw .WriteHeader (http .StatusOK )
318374 return nil
319375}
@@ -399,6 +455,12 @@ func (s *Server) resizeContainer(ctx context.Context, rw http.ResponseWriter, re
399455}
400456
401457func (s * Server ) removeContainers (ctx context.Context , rw http.ResponseWriter , req * http.Request ) error {
458+ label := "delete"
459+ metrics .ContainerActionsCounter .WithLabelValues (label ).Inc ()
460+ defer func (start time.Time ) {
461+ metrics .ContainerActionsTimer .WithLabelValues (label ).Observe (time .Since (start ).Seconds ())
462+ }(time .Now ())
463+
402464 name := mux .Vars (req )["name" ]
403465
404466 option := & types.ContainerRemoveOptions {
@@ -412,6 +474,8 @@ func (s *Server) removeContainers(ctx context.Context, rw http.ResponseWriter, r
412474 return err
413475 }
414476
477+ metrics .ContainerSuccessActionsCounter .WithLabelValues (label ).Inc ()
478+
415479 rw .WriteHeader (http .StatusNoContent )
416480 return nil
417481}
0 commit comments