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 }