func Toml(w http.ResponseWriter, r *http.Request) { buf, err := ioutil.ReadAll(r.Body) if err != nil { http.Error(w, err.Error(), 500) return } mib := conf.MIB{} err = json.Unmarshal(buf, &mib) if err != nil { http.Error(w, err.Error(), 500) return } meta := &struct{ Name string }{} err = json.Unmarshal(buf, meta) if err != nil { http.Error(w, err.Error(), 500) return } toToml := struct { MIBs map[string]conf.MIB }{MIBs: map[string]conf.MIB{meta.Name: mib}} toml.NewEncoder(w).Encode(toToml) }
func toToml(fname string) { var c conf.Conf b, err := ioutil.ReadFile(*flagConf) if err != nil { slog.Fatal(err) } extra := new(bytes.Buffer) var hap conf.HAProxy for i, line := range strings.Split(string(b), "\n") { if strings.TrimSpace(line) == "" { continue } sp := strings.SplitN(line, "=", 2) if len(sp) != 2 { slog.Fatalf("expected = in %v:%v", *flagConf, i+1) } k := strings.TrimSpace(sp[0]) v := strings.TrimSpace(sp[1]) switch k { case "host": c.Host = v case "hostname": c.Hostname = v case "filter": c.Filter = strings.Split(v, ",") case "coldir": c.ColDir = v case "snmp": for _, s := range strings.Split(v, ",") { sp := strings.Split(s, "@") if len(sp) != 2 { slog.Fatal("invalid snmp string:", v) } c.SNMP = append(c.SNMP, conf.SNMP{ Community: sp[0], Host: sp[1], }) } case "icmp": for _, i := range strings.Split(v, ",") { c.ICMP = append(c.ICMP, conf.ICMP{Host: i}) } case "haproxy": if v != "" { for _, s := range strings.Split(v, ",") { sp := strings.SplitN(s, ":", 2) if len(sp) != 2 { slog.Fatal("invalid haproxy string:", v) } if hap.User != "" || hap.Password != "" { slog.Fatal("only one haproxy line allowed") } hap.User = sp[0] hap.Password = sp[1] } } case "haproxy_instance": sp := strings.SplitN(v, ":", 2) if len(sp) != 2 { slog.Fatal("invalid haproxy_instance string:", v) } hap.Instances = append(hap.Instances, conf.HAProxyInstance{ Tier: sp[0], URL: sp[1], }) case "tags": tags, err := opentsdb.ParseTags(v) if err != nil { slog.Fatal(err) } c.Tags = tags case "aws": for _, s := range strings.Split(v, ",") { sp := strings.SplitN(s, ":", 2) if len(sp) != 2 { slog.Fatal("invalid AWS string:", v) } accessKey := sp[0] idx := strings.LastIndex(sp[1], "@") if idx == -1 { slog.Fatal("invalid AWS string:", v) } secretKey := sp[1][:idx] region := sp[1][idx+1:] if len(accessKey) == 0 || len(secretKey) == 0 || len(region) == 0 { slog.Fatal("invalid AWS string:", v) } c.AWS = append(c.AWS, conf.AWS{ AccessKey: accessKey, SecretKey: secretKey, Region: region, }) } case "vsphere": for _, s := range strings.Split(v, ",") { sp := strings.SplitN(s, ":", 2) if len(sp) != 2 { slog.Fatal("invalid vsphere string:", v) } user := sp[0] idx := strings.LastIndex(sp[1], "@") if idx == -1 { slog.Fatal("invalid vsphere string:", v) } pwd := sp[1][:idx] host := sp[1][idx+1:] if len(user) == 0 || len(pwd) == 0 || len(host) == 0 { slog.Fatal("invalid vsphere string:", v) } c.Vsphere = append(c.Vsphere, conf.Vsphere{ User: user, Password: pwd, Host: host, }) } case "freq": freq, err := strconv.Atoi(v) if err != nil { slog.Fatal(err) } c.Freq = freq case "process": if runtime.GOOS == "linux" { var p struct { Command string Name string Args string } sp := strings.Split(v, ",") if len(sp) > 1 { p.Name = sp[1] } if len(sp) > 2 { p.Args = sp[2] } p.Command = sp[0] extra.WriteString(fmt.Sprintf(` [[Process]] Command = %q Name = %q Args = %q `, p.Command, p.Name, p.Args)) } else if runtime.GOOS == "windows" { extra.WriteString(fmt.Sprintf(` [[Process]] Name = %q `, v)) } case "process_dotnet": c.ProcessDotNet = append(c.ProcessDotNet, conf.ProcessDotNet{Name: v}) case "keepalived_community": c.KeepalivedCommunity = v default: slog.Fatalf("unknown key in %v:%v", *flagConf, i+1) } } if len(hap.Instances) > 0 { c.HAProxy = append(c.HAProxy, hap) } f, err := os.Create(fname) if err != nil { slog.Fatal(err) } if err := toml.NewEncoder(f).Encode(&c); err != nil { slog.Fatal(err) } if _, err := extra.WriteTo(f); err != nil { slog.Fatal(err) } f.Close() }
func (cfg *Config) Dump(w io.Writer) error { e := toml.NewEncoder(w) e.Indent = "" return e.Encode(cfg) }