diff options
Diffstat (limited to 'lib/agent/apiv1-monitoring.go')
-rw-r--r-- | lib/agent/apiv1-monitoring.go | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/lib/agent/apiv1-monitoring.go b/lib/agent/apiv1-monitoring.go new file mode 100644 index 0000000..cf651ce --- /dev/null +++ b/lib/agent/apiv1-monitoring.go @@ -0,0 +1,214 @@ +/* + * Copyright (C) 2017-2019 "IoT.bzh" + * Author Sebastien Douheret <sebastien@iot.bzh> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package agent + +import ( + "net/http" + + "gerrit.automotivelinux.org/gerrit/src/xds/xds-agent.git/lib/aglafb" + common "gerrit.automotivelinux.org/gerrit/src/xds/xds-common.git" + "github.com/gin-gonic/gin" +) + +//************************* AGL XDS Monitoring ************************* + +// getMonitoringTopo : return current AGL daemons topology using monitoring +func (s *APIService) getMonitoringTopo(c *gin.Context) { + + xdspvr, err := s._initXdsMonitoring() + if err != nil { + common.APIError(c, err.Error()) + return + } + + var res aglafb.AfbReply + if err = xdspvr.GetTopo(&res); err != nil { + common.APIError(c, err.Error()) + return + } + + if res.Request.Status != "success" { + common.APIError(c, res.Request.Info) + return + } + + c.JSON(http.StatusOK, res.Response) +} + +// startMonitoring : resquest to monitoring to start tracing +func (s *APIService) startMonitoring(c *gin.Context) { + + xdspvr, err := s._initXdsMonitoring() + if err != nil { + common.APIError(c, err.Error()) + return + } + + var cfg XdsSuperVTraceConfig + if c.BindJSON(&cfg) != nil { + common.APIError(c, "Invalid config argument") + return + } + s.Log.Debugf("Start Monitoring cfgArg %v", cfg) + + res := aglafb.NewAfbReply() + if err = xdspvr.StartTrace(cfg, res); err != nil { + common.APIError(c, err.Error()) + return + } + + if !res.Success() { + common.APIError(c, res.GetInfo()) + return + } + + c.JSON(http.StatusOK, res.Response) +} + +// stopMonitoring : resquest to monitoring to stop tracing +func (s *APIService) stopMonitoring(c *gin.Context) { + + xdspvr, err := s._initXdsMonitoring() + if err != nil { + common.APIError(c, err.Error()) + return + } + + var res aglafb.AfbReply + if err = xdspvr.StopTrace(&res); err != nil { + common.APIError(c, err.Error()) + return + } + + if res.Request.Status != "success" { + common.APIError(c, res.Request.Info) + return + } + + c.JSON(http.StatusOK, res.Response) +} + +// _initXdsMonitoring . +func (s *APIService) _initXdsMonitoring() (*XdsMonitoring, error) { + + if s.XdsMonitoring == nil { + xs := NewXdsMonitoring(s.Context) + if err := xs.Connect(); err != nil { + return nil, err + } + s.XdsMonitoring = xs + } + return s.XdsMonitoring, nil +} + +//************************* AGL Low Collector ************************* + +// XdsLowCollectorConfig Configuration structure for ALC +type XdsLowCollectorConfig struct { + Time int `json:"time"` +} + +// StartLowCollector : resquest to Start low collector +func (s *APIService) StartLowCollector(c *gin.Context) { + + alc, err := s._initXdsLowCollector() + if err != nil { + common.APIError(c, err.Error()) + return + } + + s.Log.Debugf("Init & config AGL Low Collector") + + if err = alc.Init(); err != nil { + common.APIError(c, err.Error()) + return + } + + // // Config is optional, if not set used define settings + var cfg XdsLowCollectorConfig + c.ShouldBindJSON(&cfg) + + s.Log.Debugf("Start Low Collector cfgArg %v", cfg) + + if err = alc.Start(cfg.Time); err != nil { + common.APIError(c, err.Error()) + return + } + + c.JSON(http.StatusOK, "done") +} + +// StopLowCollector : resquest to Stop low collector +func (s *APIService) StopLowCollector(c *gin.Context) { + + alc, err := s._initXdsLowCollector() + if err != nil { + common.APIError(c, err.Error()) + return + } + + s.Log.Debugf("Stop AGL Low Collector") + + if err = alc.Stop(); err != nil { + common.APIError(c, err.Error()) + } + + // SEB TODO + res := "done" + c.JSON(http.StatusOK, res) +} + +// ReadLowCollector : read one data +func (s *APIService) ReadLowCollector(c *gin.Context) { + + alc, err := s._initXdsLowCollector() + if err != nil { + common.APIError(c, err.Error()) + return + } + plugin := "cpu" + s.Log.Debugf("Read data of %s plugin AGL Low Collector", plugin) + + var data interface{} + if err = alc.Read(&data); err != nil { + common.APIError(c, err.Error()) + } + + // SEB TODO + res := "done" + c.JSON(http.StatusOK, res) +} + +// ResetLowCollector : Reset Low Collector +func (s *APIService) ResetLowCollector(c *gin.Context) { + // SEB TODO + common.APIError(c, "Not implemented yet") +} + +// _initXdsLowCollector . +func (s *APIService) _initXdsLowCollector() (*XdsLowCollector, error) { + + if s.XdsLowCollector == nil { + alc := NewXdsLowCollector(s.Context) + if err := alc.Connect(); err != nil { + return nil, err + } + s.XdsLowCollector = alc + } + return s.XdsLowCollector, nil +} |