@@ -55,24 +55,28 @@ func (c *Metrics) Collect(ch chan<- prometheus.Metric) {
5555
5656 GaugeMetricDataForBucket := c .GenerateBucketUsageData ()
5757 for bucket , data := range GaugeMetricDataForBucket {
58- ch <- prometheus .MustNewConstMetric (c .metrics ["bucket_usage_byte_metric" ], prometheus .GaugeValue , float64 (data .value ), bucket , data .owner , data .storageClass )
58+ for _ , v := range data {
59+ ch <- prometheus .MustNewConstMetric (c .metrics ["bucket_usage_byte_metric" ], prometheus .GaugeValue , float64 (v .value ), bucket , v .owner , v .storageClass )
60+ }
5961 }
6062
6163 GaugeMetricDataForUid := c .GenerateUserUsageData ()
6264 for uid , data := range GaugeMetricDataForUid {
63- ch <- prometheus .MustNewConstMetric (c .metrics ["user_usage_byte_metric" ], prometheus .GaugeValue , float64 (data .value ), uid , data .storageClass )
65+ for _ , v := range data {
66+ ch <- prometheus .MustNewConstMetric (c .metrics ["user_usage_byte_metric" ], prometheus .GaugeValue , float64 (v .value ), uid , v .storageClass )
67+ }
6468 }
6569}
6670
6771// Get bucket usage cache which like <key><value> = <u_b_test><STANDARD:233333>
68- func (c * Metrics ) GenerateBucketUsageData () (GaugeMetricData map [string ]UsageDataWithBucket ) {
72+ func (c * Metrics ) GenerateBucketUsageData () (GaugeMetricData map [string ][] UsageDataWithBucket ) {
6973 buckets , err := adminServer .Yig .MetaStorage .GetBuckets ()
7074 if err != nil {
7175 helper .Logger .Error ("Get usage data for prometheus failed:" ,
7276 err .Error ())
7377 return
7478 }
75- GaugeMetricData = make (map [string ]UsageDataWithBucket )
79+ GaugeMetricData = make (map [string ][] UsageDataWithBucket )
7680 for _ , bucket := range buckets {
7781 key := BucketUsagePrefix + bucket .Name
7882 usageCache , err := redis .GetUsage (key )
@@ -81,65 +85,68 @@ func (c *Metrics) GenerateBucketUsageData() (GaugeMetricData map[string]UsageDat
8185 err .Error ())
8286 return
8387 }
84- data , err := parseUsage (usageCache )
88+ datas , err := parseUsage (usageCache )
8589 if err != nil {
8690 helper .Logger .Error ("Parse usage data from redis for prometheus failed:" ,
8791 err .Error ())
8892 return
8993 }
90- if data . storageClass != "" {
91- GaugeMetricData [bucket .Name ] = UsageDataWithBucket {data .value , bucket .OwnerId , data .storageClass }
94+ for _ , data := range datas {
95+ GaugeMetricData [bucket .Name ] = append ( GaugeMetricData [ bucket . Name ], UsageDataWithBucket {data .value , bucket .OwnerId , data .storageClass })
9296 }
9397 }
9498 return
9599}
96100
97101// Get bucket usage cache which like <key><value> = <u_p_hehehehe><STANDARD 233333>
98- func (c * Metrics ) GenerateUserUsageData () (GaugeMetricData map [string ]UsageData ) {
102+ func (c * Metrics ) GenerateUserUsageData () (GaugeMetricData map [string ][] UsageData ) {
99103 buckets , err := adminServer .Yig .MetaStorage .GetBuckets ()
100104 if err != nil {
101105 helper .Logger .Error ("Get usage data for prometheus failed:" ,
102106 err .Error ())
103107 return
104108 }
105- GaugeMetricData = make (map [string ]UsageData )
109+ GaugeMetricData = make (map [string ][] UsageData )
106110 for _ , bucket := range buckets {
107- if GaugeMetricData [bucket .OwnerId ]. storageClass == "" {
111+ if len ( GaugeMetricData [bucket .OwnerId ]) == 0 {
108112 key := PidUsagePrefix + bucket .OwnerId
109113 usageCache , err := redis .GetUsage (key )
110114 if err != nil {
111115 helper .Logger .Error ("Get usage data from redis for prometheus failed:" ,
112116 err .Error ())
113117 return
114118 }
115- data , err := parseUsage (usageCache )
119+ datas , err := parseUsage (usageCache )
116120 if err != nil {
117121 helper .Logger .Error ("Parse usage data from redis for prometheus failed:" ,
118122 err .Error ())
119123 return
120124 }
121- if data . storageClass != "" {
122- GaugeMetricData [bucket .OwnerId ] = UsageData {value : data .value , storageClass : data .storageClass }
125+ for _ , data := range datas {
126+ GaugeMetricData [bucket .OwnerId ] = append ( GaugeMetricData [ bucket . OwnerId ], UsageData {value : data .value , storageClass : data .storageClass })
123127 }
124128 }
125129 }
126130 return
127131}
128132
129133// get usage from redis
130- // <Storage-Class >:<usagenumber>
134+ // <Storage-Class1>:<usagenumber>,<Storage-Class2 >:<usagenumber>
131135// eg. STANDARD:2222
132- func parseUsage (value string ) (* UsageData , error ) {
133- var err error
134- data := new (UsageData )
136+ func parseUsage (value string ) (datas []* UsageData , err error ) {
135137 if value == "" {
136- return data , nil
138+ return
137139 }
138- allParams := strings .Split (value , ":" )
139- data .value , err = strconv .ParseInt (allParams [1 ], 10 , 64 )
140- if err != nil {
141- return data , err
140+ storageClass := strings .Split (value , "," )
141+ for _ , v := range storageClass {
142+ data := new (UsageData )
143+ allParams := strings .Split (v , ":" )
144+ data .value , err = strconv .ParseInt (allParams [1 ], 10 , 64 )
145+ if err != nil {
146+ return
147+ }
148+ data .storageClass = allParams [0 ]
149+ datas = append (datas , data )
142150 }
143- data .storageClass = allParams [0 ]
144- return data , nil
151+ return
145152}
0 commit comments