From 6f2c6dca33579d239924efd532aae20df9cf8260 Mon Sep 17 00:00:00 2001 From: zhaoxiangchun <1422928955@qq.com> Date: Mon, 27 Sep 2021 15:13:04 +0800 Subject: [PATCH] feat(cloudmon): usage add domain.servers and project.servers statistic --- pkg/cloudmon/collectors/usageservice.go | 54 +++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/pkg/cloudmon/collectors/usageservice.go b/pkg/cloudmon/collectors/usageservice.go index bf59be532c..903f4b9b67 100644 --- a/pkg/cloudmon/collectors/usageservice.go +++ b/pkg/cloudmon/collectors/usageservice.go @@ -15,6 +15,8 @@ package collectors import ( + "fmt" + "strings" "time" "yunion.io/x/jsonutils" @@ -79,6 +81,12 @@ func reportUsage(session *mcclient.ClientSession, args *common.ReportOptions) er } //查询host-type==""的情况,对应onecloud-控制面板-全部 要展示的内容 dataList, err = packMetricList(session, dataList, imageUsageFieldsDict, "host-type", "", nowTime) + //获取域/项目 虚拟机usage + data, err := getDomainAndProjectServerUsage(session, nowTime) + if err != nil { + return errors.Wrap(err, "getDomainAndProjectServerUsage err") + } + dataList = append(dataList, data...) //写入influDb return sendMetrics(session, dataList, args.Debug) } @@ -162,3 +170,49 @@ func jsonTometricData(obj *jsonutils.JSONDict, metric *influxdb.SMetricData, metric.Metrics = append(metric.Metrics, metricPairs...) return metric, nil } + +type resourceUsage struct { + Count string + Id string + Name string +} + +func getDomainAndProjectServerUsage(session *mcclient.ClientSession, nowTime time.Time) ([]influxdb.SMetricData, error) { + metrics := make([]influxdb.SMetricData, 0) + for urlKey, tag := range map[string]string{ + "domain-statistics": "domain_id.project_domain", + "project-statistics": "tenant_id.tenant", + } { + jsonObject, err := modules.Servers.GetById(session, urlKey, jsonutils.NewDict()) + if err != nil { + return nil, errors.Wrapf(err, "get server-%s err", urlKey) + } + usageArr := jsonObject.(*jsonutils.JSONArray) + for i := 0; i < usageArr.Size(); i++ { + metric := influxdb.SMetricData{Name: measureMent, Timestamp: nowTime} + usageObj, _ := usageArr.GetAt(i) + usage := new(resourceUsage) + usageObj.Unmarshal(usage) + key := "" + if strings.Contains(urlKey, "domain") { + key = "domain" + } else { + key = "project" + } + metric.Metrics = append(metric.Metrics, influxdb.SKeyValue{ + Key: fmt.Sprintf("%s.servers", key), + Value: usage.Count, + }) + tagArr := strings.Split(tag, ".") + metric.Tags = append(metric.Tags, influxdb.SKeyValue{ + Key: tagArr[0], + Value: usage.Id, + }, influxdb.SKeyValue{ + Key: tagArr[1], + Value: usage.Name, + }) + metrics = append(metrics, metric) + } + } + return metrics, nil +}