func main() { flag.Parse() // Scan the arguments list if versionFlag { fmt.Println("Version:", APP_VERSION) } else { // Fill InfluxDB connection settings var client *influxClient.Client = nil if databaseFlag != "" { config := new(influxClient.ClientConfig) config.Host = hostFlag config.Username = usernameFlag config.Password = passwordFlag config.Database = databaseFlag var err error client, err = influxClient.NewClient(config) if err != nil { panic(err) } } // Build collect list var collectList []GatherFunc for _, c := range strings.Split(collectFlag, ",") { switch strings.Trim(c, " ") { case "cpus": collectList = append(collectList, cpus) case "mem": collectList = append(collectList, mem) case "swap": collectList = append(collectList, swap) case "uptime": collectList = append(collectList, uptime) case "load": collectList = append(collectList, load) case "network": collectList = append(collectList, network) case "disks": collectList = append(collectList, disks) default: fmt.Fprintf(os.Stderr, "Unknown collect option `%s'\n", c) return } } if prefixFlag != "" && prefixFlag[len(prefixFlag)-1] != '.' { prefixFlag += "." } ch := make(chan *influxClient.Series, len(collectList)) // Without daemon mode, do at least one lap first := true for first || daemonFlag { first = false // Collect data var data []*influxClient.Series for _, cl := range collectList { go cl(prefixFlag, ch) } for i := len(collectList); i > 0; i-- { res := <-ch if res != nil { data = append(data, res) } else if !daemonFlag { // Loop if we haven't all data: // Since diffed data didn't respond the // first time they are collected, loop // one more time to have it first = true } } // Show data if !first && (databaseFlag == "" || verboseFlag != "") { if strings.ToLower(verboseFlag) == "text" || verboseFlag == "" { prettyPrinter(data) } else { b, _ := json.Marshal(data) fmt.Printf("%s\n", b) } } // Send data if client != nil && !first { if err := send(client, data); err != nil { panic(err) } } if daemonFlag || first { time.Sleep(daemonIntervalFlag) } } } }