Loading go-apps/meep-tc-sidecar/destination.go +1 −1 Original line number Diff line number Diff line Loading @@ -144,7 +144,7 @@ func (u *destination) compute() (st stat) { mean := int32(math.Round(float64(st.mean) / 1000000.0)) // Store latency metric err := metricStore.SetLatencyMetric(u.hostName, u.remoteName, lat, mean) err := metricStore.SetLatencyMetric(u.hostName, u.remoteName, lat) if err != nil { log.Error("Failed to set latency metric") } Loading go-packages/meep-metric-store/events.go +22 −9 Original line number Diff line number Diff line Loading @@ -26,12 +26,8 @@ const metricEvent = "events" // SetEventMetric func (ms *MetricStore) SetEventMetric(eventType string, eventStr string) error { tags := map[string]string{ "type": eventType, } fields := map[string]interface{}{ "event": eventStr, } tags := map[string]string{"type": eventType} fields := map[string]interface{}{"event": eventStr} return ms.SetMetric(metricEvent, tags, fields) } Loading @@ -44,9 +40,7 @@ func (ms *MetricStore) GetLastEventMetric(eventType string) (event string, err e } // Get latest Net metric tags := map[string]string{ "type": eventType, } tags := map[string]string{"type": eventType} fields := []string{"event"} valuesArray, err := ms.GetMetric(metricEvent, tags, fields, "", 1) if err != nil { Loading @@ -61,3 +55,22 @@ func (ms *MetricStore) GetLastEventMetric(eventType string) (event string, err e } return event, nil } // GetLatencyMetrics func (ms *MetricStore) GetEventMetrics(eventType string, duration string, count int) (metrics []map[string]interface{}, err error) { // Make sure we have set a store if ms.name == "" { err = errors.New("Store name not specified") return } // Get Traffic metrics tags := map[string]string{"type": eventType} fields := []string{"event"} metrics, err = ms.GetMetric(metricEvent, tags, fields, duration, count) if err != nil { log.Error("Failed to retrieve metrics with error: ", err.Error()) return } return } go-packages/meep-metric-store/events_test.go +43 −3 Original line number Diff line number Diff line Loading @@ -52,26 +52,66 @@ func TestEventsMetricsGetSet(t *testing.T) { if err != nil { t.Errorf("Unable to set event metric") } err = ms.SetEventMetric("MOBILITY", "event4") if err != nil { t.Errorf("Unable to set event metric") } err = ms.SetEventMetric("NETWORK-CHARACTERISTIC-UPDATE", "event5") if err != nil { t.Errorf("Unable to set event metric") } err = ms.SetEventMetric("POAS-IN-RANGE", "event6") if err != nil { t.Errorf("Unable to set event metric") } fmt.Println("Get event metrics") event, err := ms.GetLastEventMetric("MOBILITY") if err != nil { t.Errorf("Event metric should exist") } else if event != "event1" { } else if event != "event4" { t.Errorf("Invalid metric values") } event, err = ms.GetLastEventMetric("NETWORK-CHARACTERISTIC-UPDATE") if err != nil { t.Errorf("Event metric should exist") } else if event != "event2" { } else if event != "event5" { t.Errorf("Invalid metric values") } event, err = ms.GetLastEventMetric("POAS-IN-RANGE") if err != nil { t.Errorf("Event metric should exist") } else if event != "event3" { } else if event != "event6" { t.Errorf("Invalid metric values") } fmt.Println("Get event metrics") _, err = ms.GetEventMetrics("MOBILITY", "1ms", 0) if err == nil { t.Errorf("No metrics should be found in the last 1 ms") } result, err := ms.GetEventMetrics("MOBILITY", "", 1) if err != nil || len(result) != 1 { t.Errorf("Failed to get metric") } if !validateEventsMetric(result[0], "event4") { t.Errorf("Invalid result") } result, err = ms.GetEventMetrics("MOBILITY", "", 0) if err != nil || len(result) != 2 { t.Errorf("Failed to get metric") } if !validateEventsMetric(result[0], "event4") { t.Errorf("Invalid result") } if !validateEventsMetric(result[1], "event1") { t.Errorf("Invalid result") } // t.Errorf("DONE") } func validateEventsMetric(result map[string]interface{}, v1 string) bool { return !(result["event"] != v1) } go-packages/meep-metric-store/metric-store_test.go +6 −2 Original line number Diff line number Diff line Loading @@ -55,11 +55,15 @@ func TestMetricStoreNew(t *testing.T) { t.Errorf("Unable to create Metric Store") } fmt.Println("Invoke API before setting store") _, _, err = ms.GetLastLatencyMetric("node1", "node2") getTags := map[string]string{tag1: "tag1", tag2: "tag2"} getFields := []string{field1, field2, field3, field4} _, err = ms.GetMetric(metric, getTags, getFields, "", 0) if err == nil { t.Errorf("API call should fail if no store is set") } err = ms.SetLatencyMetric("node1", "node2", 1, 2) setTags := map[string]string{tag1: "tag1", tag2: "tag2"} setFields := map[string]interface{}{field1: true, field2: "val1", field3: 0, field4: 0.0} err = ms.SetMetric(metric, setTags, setFields) if err == nil { t.Errorf("API call should fail if no store is set") } Loading go-packages/meep-metric-store/network.go +24 −6 Original line number Diff line number Diff line Loading @@ -27,14 +27,14 @@ const metricLatency = "latency" const metricTraffic = "traffic" // SetLatencyMetric func (ms *MetricStore) SetLatencyMetric(src string, dest string, lat int32, mean int32) error { func (ms *MetricStore) SetLatencyMetric(src string, dest string, lat int32) error { tags := map[string]string{"src": src, "dest": dest} fields := map[string]interface{}{"lat": lat, "mean": mean} fields := map[string]interface{}{"lat": lat} return ms.SetMetric(metricLatency, tags, fields) } // GetLastLatencyMetric func (ms *MetricStore) GetLastLatencyMetric(src string, dest string) (lat int32, mean int32, err error) { func (ms *MetricStore) GetLastLatencyMetric(src string, dest string) (lat int32, err error) { // Make sure we have set a store if ms.name == "" { err = errors.New("Store name not specified") Loading @@ -43,7 +43,7 @@ func (ms *MetricStore) GetLastLatencyMetric(src string, dest string) (lat int32, // Get latest Latency metric tags := map[string]string{"src": src, "dest": dest} fields := []string{"lat", "mean"} fields := []string{"lat"} var valuesArray []map[string]interface{} valuesArray, err = ms.GetMetric(metricLatency, tags, fields, "", 1) if err != nil { Loading @@ -54,7 +54,6 @@ func (ms *MetricStore) GetLastLatencyMetric(src string, dest string) (lat int32, // Take first & only values values := valuesArray[0] lat = JsonNumToInt32(values["lat"].(json.Number)) mean = JsonNumToInt32(values["mean"].(json.Number)) return } Loading @@ -68,7 +67,7 @@ func (ms *MetricStore) GetLatencyMetrics(src string, dest string, duration strin // Get Latency metrics tags := map[string]string{"src": src, "dest": dest} fields := []string{"lat", "mean"} fields := []string{"lat"} metrics, err = ms.GetMetric(metricLatency, tags, fields, duration, count) if err != nil { log.Error("Failed to retrieve metrics with error: ", err.Error()) Loading Loading @@ -108,3 +107,22 @@ func (ms *MetricStore) GetLastTrafficMetric(src string, dest string) (tput float loss = JsonNumToFloat64(values["loss"].(json.Number)) return } // GetLatencyMetrics func (ms *MetricStore) GetTrafficMetrics(src string, dest string, duration string, count int) (metrics []map[string]interface{}, err error) { // Make sure we have set a store if ms.name == "" { err = errors.New("Store name not specified") return } // Get Traffic metrics tags := map[string]string{"src": src, "dest": dest} fields := []string{"tput", "loss"} metrics, err = ms.GetMetric(metricTraffic, tags, fields, duration, count) if err != nil { log.Error("Failed to retrieve metrics with error: ", err.Error()) return } return } Loading
go-apps/meep-tc-sidecar/destination.go +1 −1 Original line number Diff line number Diff line Loading @@ -144,7 +144,7 @@ func (u *destination) compute() (st stat) { mean := int32(math.Round(float64(st.mean) / 1000000.0)) // Store latency metric err := metricStore.SetLatencyMetric(u.hostName, u.remoteName, lat, mean) err := metricStore.SetLatencyMetric(u.hostName, u.remoteName, lat) if err != nil { log.Error("Failed to set latency metric") } Loading
go-packages/meep-metric-store/events.go +22 −9 Original line number Diff line number Diff line Loading @@ -26,12 +26,8 @@ const metricEvent = "events" // SetEventMetric func (ms *MetricStore) SetEventMetric(eventType string, eventStr string) error { tags := map[string]string{ "type": eventType, } fields := map[string]interface{}{ "event": eventStr, } tags := map[string]string{"type": eventType} fields := map[string]interface{}{"event": eventStr} return ms.SetMetric(metricEvent, tags, fields) } Loading @@ -44,9 +40,7 @@ func (ms *MetricStore) GetLastEventMetric(eventType string) (event string, err e } // Get latest Net metric tags := map[string]string{ "type": eventType, } tags := map[string]string{"type": eventType} fields := []string{"event"} valuesArray, err := ms.GetMetric(metricEvent, tags, fields, "", 1) if err != nil { Loading @@ -61,3 +55,22 @@ func (ms *MetricStore) GetLastEventMetric(eventType string) (event string, err e } return event, nil } // GetLatencyMetrics func (ms *MetricStore) GetEventMetrics(eventType string, duration string, count int) (metrics []map[string]interface{}, err error) { // Make sure we have set a store if ms.name == "" { err = errors.New("Store name not specified") return } // Get Traffic metrics tags := map[string]string{"type": eventType} fields := []string{"event"} metrics, err = ms.GetMetric(metricEvent, tags, fields, duration, count) if err != nil { log.Error("Failed to retrieve metrics with error: ", err.Error()) return } return }
go-packages/meep-metric-store/events_test.go +43 −3 Original line number Diff line number Diff line Loading @@ -52,26 +52,66 @@ func TestEventsMetricsGetSet(t *testing.T) { if err != nil { t.Errorf("Unable to set event metric") } err = ms.SetEventMetric("MOBILITY", "event4") if err != nil { t.Errorf("Unable to set event metric") } err = ms.SetEventMetric("NETWORK-CHARACTERISTIC-UPDATE", "event5") if err != nil { t.Errorf("Unable to set event metric") } err = ms.SetEventMetric("POAS-IN-RANGE", "event6") if err != nil { t.Errorf("Unable to set event metric") } fmt.Println("Get event metrics") event, err := ms.GetLastEventMetric("MOBILITY") if err != nil { t.Errorf("Event metric should exist") } else if event != "event1" { } else if event != "event4" { t.Errorf("Invalid metric values") } event, err = ms.GetLastEventMetric("NETWORK-CHARACTERISTIC-UPDATE") if err != nil { t.Errorf("Event metric should exist") } else if event != "event2" { } else if event != "event5" { t.Errorf("Invalid metric values") } event, err = ms.GetLastEventMetric("POAS-IN-RANGE") if err != nil { t.Errorf("Event metric should exist") } else if event != "event3" { } else if event != "event6" { t.Errorf("Invalid metric values") } fmt.Println("Get event metrics") _, err = ms.GetEventMetrics("MOBILITY", "1ms", 0) if err == nil { t.Errorf("No metrics should be found in the last 1 ms") } result, err := ms.GetEventMetrics("MOBILITY", "", 1) if err != nil || len(result) != 1 { t.Errorf("Failed to get metric") } if !validateEventsMetric(result[0], "event4") { t.Errorf("Invalid result") } result, err = ms.GetEventMetrics("MOBILITY", "", 0) if err != nil || len(result) != 2 { t.Errorf("Failed to get metric") } if !validateEventsMetric(result[0], "event4") { t.Errorf("Invalid result") } if !validateEventsMetric(result[1], "event1") { t.Errorf("Invalid result") } // t.Errorf("DONE") } func validateEventsMetric(result map[string]interface{}, v1 string) bool { return !(result["event"] != v1) }
go-packages/meep-metric-store/metric-store_test.go +6 −2 Original line number Diff line number Diff line Loading @@ -55,11 +55,15 @@ func TestMetricStoreNew(t *testing.T) { t.Errorf("Unable to create Metric Store") } fmt.Println("Invoke API before setting store") _, _, err = ms.GetLastLatencyMetric("node1", "node2") getTags := map[string]string{tag1: "tag1", tag2: "tag2"} getFields := []string{field1, field2, field3, field4} _, err = ms.GetMetric(metric, getTags, getFields, "", 0) if err == nil { t.Errorf("API call should fail if no store is set") } err = ms.SetLatencyMetric("node1", "node2", 1, 2) setTags := map[string]string{tag1: "tag1", tag2: "tag2"} setFields := map[string]interface{}{field1: true, field2: "val1", field3: 0, field4: 0.0} err = ms.SetMetric(metric, setTags, setFields) if err == nil { t.Errorf("API call should fail if no store is set") } Loading
go-packages/meep-metric-store/network.go +24 −6 Original line number Diff line number Diff line Loading @@ -27,14 +27,14 @@ const metricLatency = "latency" const metricTraffic = "traffic" // SetLatencyMetric func (ms *MetricStore) SetLatencyMetric(src string, dest string, lat int32, mean int32) error { func (ms *MetricStore) SetLatencyMetric(src string, dest string, lat int32) error { tags := map[string]string{"src": src, "dest": dest} fields := map[string]interface{}{"lat": lat, "mean": mean} fields := map[string]interface{}{"lat": lat} return ms.SetMetric(metricLatency, tags, fields) } // GetLastLatencyMetric func (ms *MetricStore) GetLastLatencyMetric(src string, dest string) (lat int32, mean int32, err error) { func (ms *MetricStore) GetLastLatencyMetric(src string, dest string) (lat int32, err error) { // Make sure we have set a store if ms.name == "" { err = errors.New("Store name not specified") Loading @@ -43,7 +43,7 @@ func (ms *MetricStore) GetLastLatencyMetric(src string, dest string) (lat int32, // Get latest Latency metric tags := map[string]string{"src": src, "dest": dest} fields := []string{"lat", "mean"} fields := []string{"lat"} var valuesArray []map[string]interface{} valuesArray, err = ms.GetMetric(metricLatency, tags, fields, "", 1) if err != nil { Loading @@ -54,7 +54,6 @@ func (ms *MetricStore) GetLastLatencyMetric(src string, dest string) (lat int32, // Take first & only values values := valuesArray[0] lat = JsonNumToInt32(values["lat"].(json.Number)) mean = JsonNumToInt32(values["mean"].(json.Number)) return } Loading @@ -68,7 +67,7 @@ func (ms *MetricStore) GetLatencyMetrics(src string, dest string, duration strin // Get Latency metrics tags := map[string]string{"src": src, "dest": dest} fields := []string{"lat", "mean"} fields := []string{"lat"} metrics, err = ms.GetMetric(metricLatency, tags, fields, duration, count) if err != nil { log.Error("Failed to retrieve metrics with error: ", err.Error()) Loading Loading @@ -108,3 +107,22 @@ func (ms *MetricStore) GetLastTrafficMetric(src string, dest string) (tput float loss = JsonNumToFloat64(values["loss"].(json.Number)) return } // GetLatencyMetrics func (ms *MetricStore) GetTrafficMetrics(src string, dest string, duration string, count int) (metrics []map[string]interface{}, err error) { // Make sure we have set a store if ms.name == "" { err = errors.New("Store name not specified") return } // Get Traffic metrics tags := map[string]string{"src": src, "dest": dest} fields := []string{"tput", "loss"} metrics, err = ms.GetMetric(metricTraffic, tags, fields, duration, count) if err != nil { log.Error("Failed to retrieve metrics with error: ", err.Error()) return } return }