@@ -2,29 +2,34 @@ package collector
22
33import (
44 "fmt"
5+
56 "github.com/go-kit/kit/log"
67 "github.com/go-kit/kit/log/level"
78 "github.com/tencentyun/tencentcloud-exporter/pkg/metric"
89)
910
1011var (
11- handlerFactoryMap = make (map [string ]func (* TcProductCollector , log.Logger ) (productHandler , error ))
12+ handlerFactoryMap = make (map [string ]func (* TcProductCollector , log.Logger ) (ProductHandler , error ))
1213)
1314
1415// 每个产品的指标处理逻辑
15- type productHandler interface {
16+ type ProductHandler interface {
1617 // 获取云监控指标namespace
1718 GetNamespace () string
18- // 对指标元数据做检验和补充
19- CheckMetricMeta (meta * metric.TcmMeta ) bool
20- // 是否包含该指标, ture=包含, false=不包含
21- IsIncludeMetric (m * metric.TcmMetric ) bool
19+ // 对指标元数据做检验, true=可用, false=跳过
20+ IsMetricMetaVaild (meta * metric.TcmMeta ) bool
21+ // 修改指标元数据
22+ ModifyMetricMeta (meta * metric.TcmMeta ) error
23+ // 对指标做校验, true=可用, false=跳过
24+ IsMetricVaild (m * metric.TcmMetric ) bool
25+ // 修改指标
26+ ModifyMetric (m * metric.TcmMetric ) error
2227 // 获取该指标下符合条件的所有实例, 并生成所有的series
2328 GetSeries (tcmMetric * metric.TcmMetric ) (series []* metric.TcmSeries , err error )
2429}
2530
2631// 将对应的产品handler注册到Factory中
27- func registerHandler (namespace string , isDefaultEnabled bool , factory func (* TcProductCollector , log.Logger ) (productHandler , error )) {
32+ func registerHandler (namespace string , isDefaultEnabled bool , factory func (* TcProductCollector , log.Logger ) (ProductHandler , error )) {
2833 handlerFactoryMap [namespace ] = factory
2934}
3035
@@ -34,61 +39,104 @@ type baseProductHandler struct {
3439 logger log.Logger
3540}
3641
37- func (h * baseProductHandler ) GetSeries (m * metric.TcmMetric ) (slist []* metric.TcmSeries , err error ) {
38- if len (m .Conf .OnlyIncludeInstances ) != 0 {
39- for _ , insId := range m .Conf .OnlyIncludeInstances {
40- ins , err := h .collector .InstanceRepo .Get (insId )
41- if err != nil {
42- level .Error (h .logger ).Log ("msg" , "Instance not found" , "id" , insId )
43- continue
44- }
45- ql := map [string ]string {
46- h .monitorQueryKey : ins .GetMonitorQueryKey (),
47- }
48- s , err := metric .NewTcmSeries (m , ql , ins )
49- if err != nil {
50- level .Error (h .logger ).Log ("msg" , "Create metric series fail" , "metric" , m .Meta .MetricName , "instacne" , insId )
51- continue
52- }
53- slist = append (slist , s )
42+ func (h * baseProductHandler ) IsMetricMetaVaild (meta * metric.TcmMeta ) bool {
43+ return true
44+ }
45+
46+ func (h * baseProductHandler ) ModifyMetricMeta (meta * metric.TcmMeta ) error {
47+ return nil
48+ }
49+
50+ func (h * baseProductHandler ) IsMetricVaild (m * metric.TcmMetric ) bool {
51+ return true
52+ }
53+
54+ func (h * baseProductHandler ) ModifyMetric (m * metric.TcmMetric ) error {
55+ return nil
56+ }
57+
58+ func (h * baseProductHandler ) GetSeries (m * metric.TcmMetric ) ([]* metric.TcmSeries , error ) {
59+ if m .Conf .IsIncludeOnlyInstance () {
60+ return h .GetSeriesByOnly (m )
61+ }
62+
63+ if m .Conf .IsIncludeAllInstance () {
64+ return h .GetSeriesByAll (m )
65+ }
66+
67+ if m .Conf .IsCustomQueryDimensions () {
68+ return h .GetSeriesByCustom (m )
69+ }
70+
71+ return nil , fmt .Errorf ("must config all_instances or only_include_instances or custom_query_dimensions" )
72+ }
73+
74+ func (h * baseProductHandler ) GetSeriesByOnly (m * metric.TcmMetric ) ([]* metric.TcmSeries , error ) {
75+ var slist []* metric.TcmSeries
76+ for _ , insId := range m .Conf .OnlyIncludeInstances {
77+ ins , err := h .collector .InstanceRepo .Get (insId )
78+ if err != nil {
79+ level .Error (h .logger ).Log ("msg" , "Instance not found" , "id" , insId )
80+ continue
81+ }
82+ ql := map [string ]string {
83+ h .monitorQueryKey : ins .GetMonitorQueryKey (),
84+ }
85+ s , err := metric .NewTcmSeries (m , ql , ins )
86+ if err != nil {
87+ level .Error (h .logger ).Log ("msg" , "Create metric series fail" ,
88+ "metric" , m .Meta .MetricName , "instacne" , insId )
89+ continue
90+ }
91+ slist = append (slist , s )
92+ }
93+ return slist , nil
94+ }
95+
96+ func (h * baseProductHandler ) GetSeriesByAll (m * metric.TcmMetric ) ([]* metric.TcmSeries , error ) {
97+ var slist []* metric.TcmSeries
98+ insList , err := h .collector .InstanceRepo .ListByFilters (m .Conf .InstanceFilters )
99+ if err != nil {
100+ return nil , err
101+ }
102+ for _ , ins := range insList {
103+ ql := map [string ]string {
104+ h .monitorQueryKey : ins .GetMonitorQueryKey (),
54105 }
55- } else if m .Conf .AllInstances {
56- insList , err := h .collector .InstanceRepo .ListByFilters (m .Conf .InstanceFilters )
106+ s , err := metric .NewTcmSeries (m , ql , ins )
57107 if err != nil {
58- return nil , err
108+ level .Error (h .logger ).Log ("msg" , "Create metric series fail" ,
109+ "metric" , m .Meta .MetricName , "instacne" , ins .GetInstanceId ())
110+ continue
111+ }
112+ slist = append (slist , s )
113+ }
114+ return slist , nil
115+ }
116+
117+ func (h * baseProductHandler ) GetSeriesByCustom (m * metric.TcmMetric ) ([]* metric.TcmSeries , error ) {
118+ var slist []* metric.TcmSeries
119+ for _ , ql := range m .Conf .CustomQueryDimensions {
120+ v , ok := ql [h .monitorQueryKey ]
121+ if ! ok {
122+ level .Error (h .logger ).Log (
123+ "msg" , fmt .Sprintf ("not found %s in queryDimensions" , h .monitorQueryKey ),
124+ "ql" , fmt .Sprintf ("%v" , ql ))
125+ continue
59126 }
60- for _ , ins := range insList {
61- ql := map [string ]string {
62- h .monitorQueryKey : ins .GetMonitorQueryKey (),
63- }
64- s , err := metric .NewTcmSeries (m , ql , ins )
65- if err != nil {
66- level .Error (h .logger ).Log ("msg" , "Create metric series fail" , "metric" , m .Meta .MetricName , "instacne" , ins .GetInstanceId ())
67- continue
68- }
69- slist = append (slist , s )
127+ ins , err := h .collector .InstanceRepo .Get (v )
128+ if err != nil {
129+ level .Error (h .logger ).Log ("msg" , "Instance not found" , "err" , err , "id" , v )
130+ continue
70131 }
71- } else {
72- for _ , ql := range m .Conf .CustomQueryDimensions {
73- v , ok := ql [h .monitorQueryKey ]
74- if ! ok {
75- level .Error (h .logger ).Log ("msg" , fmt .Sprintf ("not found %s in queryDimensions" , h .monitorQueryKey ),
76- "ql" , fmt .Sprintf ("%v" , ql ))
77- continue
78- }
79- ins , err := h .collector .InstanceRepo .Get (v )
80- if err != nil {
81- level .Error (h .logger ).Log ("msg" , "Instance not found" , "err" , err , "id" , v )
82- continue
83- }
84-
85- s , err := metric .NewTcmSeries (m , ql , ins )
86- if err != nil {
87- level .Error (h .logger ).Log ("msg" , "Create metric series fail" , "err" , err , "metric" , m .Meta .MetricName , "instacne" , ins .GetInstanceId ())
88- continue
89- }
90- slist = append (slist , s )
132+
133+ s , err := metric .NewTcmSeries (m , ql , ins )
134+ if err != nil {
135+ level .Error (h .logger ).Log ("msg" , "Create metric series fail" ,
136+ "err" , err , "metric" , m .Meta .MetricName , "instacne" , ins .GetInstanceId ())
137+ continue
91138 }
139+ slist = append (slist , s )
92140 }
93- return
141+ return slist , nil
94142}
0 commit comments