func TestMesosSlave(t *testing.T) { var acc testutil.Accumulator m := Mesos{ Masters: []string{}, Slaves: []string{slaveTestServer.Listener.Addr().String()}, SlaveTasks: true, Timeout: 10, } err := m.Gather(&acc) if err != nil { t.Errorf(err.Error()) } acc.AssertContainsFields(t, "mesos", slaveMetrics) jf := jsonparser.JSONFlattener{} err = jf.FlattenJSON("", slaveTaskMetrics) if err != nil { t.Errorf(err.Error()) } acc.AssertContainsFields(t, "mesos-tasks", jf.Fields) }
// This should not belong to the object func (m *Mesos) gatherMainMetrics(a string, defaultPort string, role Role, acc telegraf.Accumulator) error { var jsonOut map[string]interface{} host, _, err := net.SplitHostPort(a) if err != nil { host = a a = a + defaultPort } tags := map[string]string{ "server": host, "role": string(role), } ts := strconv.Itoa(m.Timeout) + "ms" resp, err := client.Get("http://" + a + "/metrics/snapshot?timeout=" + ts) if err != nil { return err } data, err := ioutil.ReadAll(resp.Body) resp.Body.Close() if err != nil { return err } if err = json.Unmarshal([]byte(data), &jsonOut); err != nil { return errors.New("Error decoding JSON response") } m.filterMetrics(role, &jsonOut) jf := jsonparser.JSONFlattener{} err = jf.FlattenJSON("", jsonOut) if err != nil { return err } if role == MASTER { if jf.Fields["master/elected"] != 0.0 { tags["state"] = "leader" } else { tags["state"] = "standby" } } acc.AddFields("mesos", jf.Fields, tags) return nil }
// This should not belong to the object func (m *Mesos) gatherMetrics(a string, acc telegraf.Accumulator) error { var jsonOut map[string]interface{} host, _, err := net.SplitHostPort(a) if err != nil { host = a a = a + ":5050" } tags := map[string]string{ "server": host, } if m.Timeout == 0 { log.Println("[mesos] Missing timeout value, setting default value (100ms)") m.Timeout = 100 } ts := strconv.Itoa(m.Timeout) + "ms" resp, err := client.Get("http://" + a + "/metrics/snapshot?timeout=" + ts) if err != nil { return err } data, err := ioutil.ReadAll(resp.Body) resp.Body.Close() if err != nil { return err } if err = json.Unmarshal([]byte(data), &jsonOut); err != nil { return errors.New("Error decoding JSON response") } m.removeGroup(&jsonOut) jf := jsonparser.JSONFlattener{} err = jf.FlattenJSON("", jsonOut) if err != nil { return err } acc.AddFields("mesos", jf.Fields, tags) return nil }
func (m *Mesos) gatherSlaveTaskMetrics(address string, defaultPort string, acc telegraf.Accumulator) error { var metrics []TaskStats host, _, err := net.SplitHostPort(address) if err != nil { host = address address = address + defaultPort } tags := map[string]string{ "server": host, } ts := strconv.Itoa(m.Timeout) + "ms" resp, err := client.Get("http://" + address + "/monitor/statistics?timeout=" + ts) if err != nil { return err } data, err := ioutil.ReadAll(resp.Body) resp.Body.Close() if err != nil { return err } if err = json.Unmarshal([]byte(data), &metrics); err != nil { return errors.New("Error decoding JSON response") } for _, task := range metrics { tags["framework_id"] = task.FrameworkID jf := jsonparser.JSONFlattener{} err = jf.FlattenJSON("", task.Statistics) if err != nil { return err } timestamp := time.Unix(int64(jf.Fields["timestamp"].(float64)), 0) jf.Fields["executor_id"] = task.ExecutorID acc.AddFields("mesos_tasks", jf.Fields, tags, timestamp) } return nil }
func (e *Elasticsearch) gatherNodeStats(url string, acc telegraf.Accumulator) error { nodeStats := &struct { ClusterName string `json:"cluster_name"` Nodes map[string]*node `json:"nodes"` }{} if err := e.gatherData(url, nodeStats); err != nil { return err } for id, n := range nodeStats.Nodes { tags := map[string]string{ "node_id": id, "node_host": n.Host, "node_name": n.Name, "cluster_name": nodeStats.ClusterName, } for k, v := range n.Attributes { tags["node_attribute_"+k] = v } stats := map[string]interface{}{ "indices": n.Indices, "os": n.OS, "process": n.Process, "jvm": n.JVM, "thread_pool": n.ThreadPool, "fs": n.FS, "transport": n.Transport, "http": n.HTTP, "breakers": n.Breakers, } now := time.Now() for p, s := range stats { f := jsonparser.JSONFlattener{} err := f.FlattenJSON("", s) if err != nil { return err } acc.AddFields("elasticsearch_"+p, f.Fields, tags, now) } } return nil }