diff options
Diffstat (limited to 'args.go')
-rw-r--r-- | args.go | 56 |
1 files changed, 56 insertions, 0 deletions
@@ -0,0 +1,56 @@ +package main + +import ( + "strings" + "encoding/json" + "gopkg.in/yaml.v2" + "gopkg.in/alecthomas/kingpin.v2" + "github.com/prometheus/prometheus/model/relabel" +) + +func jsonDump(v any) string{ + j, err := json.Marshal(v) + if err != nil{ + return "!!error" + } + return string(j) +} + +type srcListA []string +// kingpin.Value +func (self *srcListA) String() string{ + return jsonDump(self) +} +func (self *srcListA) Set(arg string) error{ + *self = append(*self, arg) + return nil +} +// kingpin.remainderArg +func (*srcListA) IsCumulative() bool{ + return true +} +func argSrcList(s kingpin.Settings) *[]string{ + ret := []string{} + s.SetValue((*srcListA)(&ret)) + return &ret +} + +type relabelA map[string]*[]*relabel.Config +// kingpin.Value +func (self relabelA) String() string{ + return jsonDump(self) +} +func (self relabelA) Set(val string) error{ + va := strings.SplitN(val, "=", 2) + self[va[0]] = &[]*relabel.Config{} + return yaml.UnmarshalStrict(([]byte)(va[1]), self[va[0]]) +} +// kingpin.repeatableFlag +func (relabelA) IsCumulative() bool{ + return true +} +func argRelabel(s kingpin.Settings) map[string]*[]*relabel.Config{ + ret := make(map[string]*[]*relabel.Config) + s.SetValue((relabelA)(ret)) + return ret +} |