1
1
//
2
2
// DISCLAIMER
3
3
//
4
- // Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
4
+ // Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
5
5
//
6
6
// Licensed under the Apache License, Version 2.0 (the "License");
7
7
// you may not use this file except in compliance with the License.
@@ -38,6 +38,9 @@ var metricsGoTemplate []byte
38
38
//go:embed metrics.item.go.tmpl
39
39
var metricsItemGoTemplate []byte
40
40
41
+ //go:embed metrics.item.go_test.tmpl
42
+ var metricsItemGoTestTemplate []byte
43
+
41
44
//go:embed metrics.item.tmpl
42
45
var metricItemTemplate []byte
43
46
@@ -98,6 +101,8 @@ type Metric struct {
98
101
Type string `json:"type" yaml:"type"`
99
102
ShortDescription string `json:"shortDescription" yaml:"shortDescription"`
100
103
104
+ Global bool `json:"global" yaml:"global"`
105
+
101
106
Labels []Label `json:"labels" yaml:"labels"`
102
107
AlertingRules []Alerting `json:"alertingRules" yaml:"alertingRules"`
103
108
}
@@ -277,22 +282,22 @@ func generateLabels(labels []Label) string {
277
282
278
283
func generateMetricsGO (root string , in MetricsDoc ) error {
279
284
i , err := template .New ("metrics" ).Parse (string (metricsItemGoTemplate ))
285
+ if err != nil {
286
+ return err
287
+ }
280
288
289
+ t , err := template .New ("metrics" ).Parse (string (metricsItemGoTestTemplate ))
281
290
if err != nil {
282
291
return err
283
292
}
293
+
284
294
for _ , namespace := range in .Namespaces .Keys () {
285
295
for _ , g := range in .Namespaces [namespace ].Keys () {
286
296
for _ , metric := range in.Namespaces [namespace ][g ].Keys () {
287
297
details := in.Namespaces [namespace ][g ][metric ]
288
298
289
299
mname := fmt .Sprintf ("%s_%s_%s" , namespace , g , metric )
290
300
291
- out , err := os .OpenFile (path .Join (root , fmt .Sprintf ("%s.go" , mname )), os .O_CREATE | os .O_TRUNC | os .O_WRONLY , 0644 )
292
- if err != nil {
293
- return err
294
- }
295
-
296
301
parts := strings .Split (mname , "_" )
297
302
tparts := strings .Split (strings .Title (strings .Join (parts , " " )), " " )
298
303
@@ -311,6 +316,10 @@ func generateMetricsGO(root string, in MetricsDoc) error {
311
316
params = append (params , "value float64" )
312
317
keys = append (keys , "value" )
313
318
319
+ var mapTypes = map [string ]string {}
320
+ var mapKeys []string
321
+ var mapIKeys = map [string ]string {}
322
+
314
323
for _ , label := range details .Labels {
315
324
v := strings .Split (strings .ToLower (label .Key ), "_" )
316
325
for id := range v {
@@ -323,29 +332,60 @@ func generateMetricsGO(root string, in MetricsDoc) error {
323
332
324
333
k := strings .Join (v , "" )
325
334
335
+ v [0 ] = strings .Title (v [0 ])
336
+
337
+ kPublic := strings .Join (v , "" )
338
+
326
339
keys = append (keys , k )
340
+ mapKeys = append (mapKeys , kPublic )
341
+
342
+ mapIKeys [kPublic ] = k
327
343
328
344
if t := label .Type ; t != nil {
329
345
params = append (params , fmt .Sprintf ("%s %s" , k , * t ))
346
+ mapTypes [kPublic ] = * t
330
347
} else {
331
348
params = append (params , fmt .Sprintf ("%s string" , k ))
349
+ mapTypes [kPublic ] = "string"
332
350
}
333
351
}
334
352
335
- if err := i .Execute (out , map [string ]interface {}{
336
- "name" : mname ,
337
- "fname" : strings .Join (fnameParts , "" ),
338
- "ename" : strings .Join (tparts , "" ),
339
- "shortDescription" : details .ShortDescription ,
340
- "labels" : generateLabels (details .Labels ),
341
- "type" : details .Type ,
342
- "fparams" : strings .Join (params , ", " ),
343
- "fkeys" : strings .Join (keys , ", " ),
344
- }); err != nil {
353
+ save := func (template * template.Template , path string ) error {
354
+ out , err := os .OpenFile (path , os .O_CREATE | os .O_TRUNC | os .O_WRONLY , 0644 )
355
+ if err != nil {
356
+ return err
357
+ }
358
+
359
+ if err := template .Execute (out , map [string ]interface {}{
360
+ "name" : mname ,
361
+ "fname" : strings .Join (fnameParts , "" ),
362
+ "ename" : strings .Join (tparts , "" ),
363
+ "shortDescription" : details .ShortDescription ,
364
+ "global" : details .Global ,
365
+ "labels" : generateLabels (details .Labels ),
366
+ "type" : details .Type ,
367
+ "mapTypes" : mapTypes ,
368
+ "mapKeys" : mapKeys ,
369
+ "mapIKeys" : mapIKeys ,
370
+ "args" : strings .Join (params [1 :], ", " ),
371
+ "fparams" : strings .Join (params , ", " ),
372
+ "fkeys" : strings .Join (keys , ", " ),
373
+ }); err != nil {
374
+ return err
375
+ }
376
+
377
+ if err := out .Close (); err != nil {
378
+ return err
379
+ }
380
+
381
+ return nil
382
+ }
383
+
384
+ if err := save (i , path .Join (root , fmt .Sprintf ("%s.go" , mname ))); err != nil {
345
385
return err
346
386
}
347
387
348
- if err := out . Close ( ); err != nil {
388
+ if err := save ( t , path . Join ( root , fmt . Sprintf ( "%s_test.go" , mname )) ); err != nil {
349
389
return err
350
390
}
351
391
}
0 commit comments