Loading go-apps/meep-ctrl-engine/go.mod +9 −9 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ go 1.12 require ( github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model v0.0.0 github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger v0.0.0 github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-metric-store v0.0.0 github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model v0.0.0 github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis v0.0.0 github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog v0.0.0 Loading @@ -20,12 +21,11 @@ require ( gopkg.in/yaml.v2 v2.2.2 // indirect ) replace github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model => ../../go-packages/meep-ctrl-engine-model replace github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger => ../../go-packages/meep-logger replace github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis => ../../go-packages/meep-redis replace github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog => ../../go-packages/meep-watchdog replace github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model => ../../go-packages/meep-model replace ( github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model => ../../go-packages/meep-ctrl-engine-model github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger => ../../go-packages/meep-logger github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-metric-store => ../../go-packages/meep-metric-store github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model => ../../go-packages/meep-model github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis => ../../go-packages/meep-redis github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog => ../../go-packages/meep-watchdog ) go-apps/meep-ctrl-engine/go.sum +2 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,8 @@ github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/imdario/mergo v0.3.8 h1:CGgOkSJeqMRmt0D9XLWExdT4m4F1vd3FV3VPt+0VxkQ= github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e h1:txQltCyjXAqVVSZDArPEhUTg35hKwVIuXwtQo7eAMNQ= github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/mattomatic/dijkstra v0.0.0-20130617153013-6f6d134eb237 h1:acuCHBjzG7MFTugvx3buC4m5rLDLaKC9J8C9jtlraRc= Loading go-apps/meep-ctrl-engine/server/ctrl-engine.go +56 −23 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import ( ceModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model" log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger" ms "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-metric-store" mod "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model" redis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis" watchdog "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog" Loading @@ -49,9 +50,11 @@ var db *kivik.DB var virtWatchdog *watchdog.Watchdog var rc *redis.Connector var activeModel *mod.Model var metricStore *ms.MetricStore var couchDBAddr = "http://meep-couchdb-svc-couchdb:5984/" var redisDBAddr = "meep-redis-master:6379" var influxDBAddr = "http://influxdb:8086" func getCorePodsList() map[string]bool { Loading Loading @@ -135,6 +138,13 @@ func CtrlEngineInit() (err error) { return err } // Connect to Metric Store metricStore, err = ms.NewMetricStore("", influxDBAddr) if err != nil { log.Error("Failed connection to Redis: ", err) return err } return nil } Loading Loading @@ -360,6 +370,12 @@ func ceActivateScenario(w http.ResponseWriter, r *http.Request) { return } // Set Metrics Store err = metricStore.SetStore(scenarioName) if err != nil { log.Error(err.Error()) } // Activate scenario & publish err = activeModel.SetScenario(scenario) if err != nil { Loading Loading @@ -512,6 +528,12 @@ func ceTerminateScenario(w http.ResponseWriter, r *http.Request) { return } // Set Metrics Store err = metricStore.SetStore("") if err != nil { log.Error(err.Error()) } // Send response w.Header().Set("Content-Type", "application/json; charset=UTF-8") w.WriteHeader(http.StatusOK) Loading Loading @@ -550,25 +572,33 @@ func ceSendEvent(w http.ResponseWriter, r *http.Request) { // Process Event var httpStatus int var error string switch eventType { case "MOBILITY": error, httpStatus = sendEventMobility(event) err, httpStatus = sendEventMobility(event) case "NETWORK-CHARACTERISTICS-UPDATE": error, httpStatus = sendEventNetworkCharacteristics(event) err, httpStatus = sendEventNetworkCharacteristics(event) case "POAS-IN-RANGE": error, httpStatus = sendEventPoasInRange(event) err, httpStatus = sendEventPoasInRange(event) default: error = "Unsupported event type" err = errors.New("Unsupported event type") httpStatus = http.StatusBadRequest } if error != "" { log.Error(error) http.Error(w, error, httpStatus) if err != nil { log.Error(err.Error()) http.Error(w, err.Error(), httpStatus) return } // Log successful event in metric store eventStr, err := json.Marshal(event) if err == nil { err = metricStore.SetEventMetric(eventType, string(eventStr)) } if err != nil { log.Error("Failed to set event metric") } // Send response w.Header().Set("Content-Type", "application/json; charset=UTF-8") w.WriteHeader(http.StatusOK) Loading Loading @@ -669,9 +699,10 @@ func ceGetStates(w http.ResponseWriter, r *http.Request) { // ------------------ func sendEventNetworkCharacteristics(event ceModel.Event) (string, int) { func sendEventNetworkCharacteristics(event ceModel.Event) (error, int) { if event.EventNetworkCharacteristicsUpdate == nil { return "Malformed request: missing EventNetworkCharacteristicsUpdate", http.StatusBadRequest err := errors.New("Malformed request: missing EventNetworkCharacteristicsUpdate") return err, http.StatusBadRequest } // elementFound := false Loading @@ -679,14 +710,15 @@ func sendEventNetworkCharacteristics(event ceModel.Event) (string, int) { err := activeModel.UpdateNetChar(netChar) if err != nil { return err.Error(), http.StatusInternalServerError return err, http.StatusInternalServerError } return "", -1 return nil, -1 } func sendEventMobility(event ceModel.Event) (string, int) { func sendEventMobility(event ceModel.Event) (error, int) { if event.EventMobility == nil { return "Malformed request: missing EventMobility", http.StatusBadRequest err := errors.New("Malformed request: missing EventMobility") return err, http.StatusBadRequest } // Retrieve target name (src) and destination parent name elemName := event.EventMobility.ElementName Loading @@ -694,7 +726,7 @@ func sendEventMobility(event ceModel.Event) (string, int) { oldNL, newNL, err := activeModel.MoveNode(elemName, destName) if err != nil { return err.Error(), http.StatusInternalServerError return err, http.StatusInternalServerError } log.WithFields(log.Fields{ "meep.log.component": "ctrl-engine", Loading @@ -704,14 +736,14 @@ func sendEventMobility(event ceModel.Event) (string, int) { "meep.log.src": elemName, "meep.log.dest": elemName, }).Info("Measurements log") return "", -1 return nil, -1 } func sendEventPoasInRange(event ceModel.Event) (string, int) { func sendEventPoasInRange(event ceModel.Event) (error, int) { if event.EventPoasInRange == nil { return "Malformed request: missing EventPoasInRange", http.StatusBadRequest err := errors.New("Malformed request: missing EventPoasInRange") return err, http.StatusBadRequest } var ue *ceModel.PhysicalLocation // Retrieve UE name Loading @@ -725,7 +757,8 @@ func sendEventPoasInRange(event ceModel.Event) (string, int) { log.Debug("Searching for UE in active scenario") n := activeModel.GetNode(ueName) if n == nil { return ("Node not found " + ueName), http.StatusNotFound err := errors.New("Node not found " + ueName) return err, http.StatusNotFound } ue, ok := n.(*ceModel.PhysicalLocation) if !ok { Loading @@ -746,7 +779,7 @@ func sendEventPoasInRange(event ceModel.Event) (string, int) { //Publish updated scenario err := activeModel.Activate() if err != nil { return err.Error(), http.StatusInternalServerError return err, http.StatusInternalServerError } log.Debug("Active scenario updated") Loading @@ -754,10 +787,10 @@ func sendEventPoasInRange(event ceModel.Event) (string, int) { log.Debug("POA list unchanged. Ignoring.") } } else { err := "Failed to find UE" err := errors.New("Failed to find UE") return err, http.StatusNotFound } return "", -1 return nil, -1 } func getPodDetails(key string, fields map[string]string, userData interface{}) error { Loading go-packages/meep-metric-store/metric-store.go +31 −5 Original line number Diff line number Diff line Loading @@ -24,7 +24,7 @@ import ( log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger" _ "github.com/influxdata/influxdb1-client" // this is important because of the bug in go mod _ "github.com/influxdata/influxdb1-client" influxclient "github.com/influxdata/influxdb1-client/v2" ) Loading Loading @@ -260,13 +260,39 @@ func (ms *MetricStore) GetLastNetMetric(src string, dest string) (lat int32, tpu } // SetEventMetric func (ms *MetricStore) SetEventMetric(typ string, target string, desc string) error { func (ms *MetricStore) SetEventMetric(eventType string, eventStr string) error { tags := map[string]string{ "type": typ, "target": target, "type": eventType, } fields := map[string]interface{}{ "description": desc, "event": eventStr, } return ms.SetMetric(metricEvent, tags, fields) } // GetLastEventMetric func (ms *MetricStore) GetLastEventMetric(eventType string) (event string, err error) { // Make sure we have set a store if ms.name == "" { err := errors.New("Store name not specified") return event, err } // Get latest Net metric tags := map[string]string{ "type": eventType, } fields := []string{"event"} valuesArray, err := ms.GetMetric(metricEvent, tags, fields, 1) if err != nil { log.Error("Failed to retrieve metrics with error: ", err.Error()) return event, err } // Take first & only values values := valuesArray[0] if val, ok := values["event"].(string); ok { event = val } return event, nil } go-packages/meep-metric-store/metric-store_test.go +29 −1 Original line number Diff line number Diff line Loading @@ -178,10 +178,38 @@ func TestGetSetMetric(t *testing.T) { } fmt.Println("Set event metric") err = ms.SetEventMetric("MOBILITY", "node1", "UE Mobility event") err = ms.SetEventMetric("MOBILITY", "event1") if err != nil { t.Errorf("Unable to set event metric") } err = ms.SetEventMetric("NETWORK-CHARACTERISTIC-UPDATE", "event2") if err != nil { t.Errorf("Unable to set event metric") } err = ms.SetEventMetric("POAS-IN-RANGE", "event3") 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" { 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" { 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" { t.Errorf("Invalid metric values") } // t.Errorf("DONE") } go-apps/meep-tc-sidecar/main.go +1 −1 File changed.Contains only whitespace changes. Show changes Loading
go-apps/meep-ctrl-engine/go.mod +9 −9 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ go 1.12 require ( github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model v0.0.0 github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger v0.0.0 github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-metric-store v0.0.0 github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model v0.0.0 github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis v0.0.0 github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog v0.0.0 Loading @@ -20,12 +21,11 @@ require ( gopkg.in/yaml.v2 v2.2.2 // indirect ) replace github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model => ../../go-packages/meep-ctrl-engine-model replace github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger => ../../go-packages/meep-logger replace github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis => ../../go-packages/meep-redis replace github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog => ../../go-packages/meep-watchdog replace github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model => ../../go-packages/meep-model replace ( github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model => ../../go-packages/meep-ctrl-engine-model github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger => ../../go-packages/meep-logger github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-metric-store => ../../go-packages/meep-metric-store github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model => ../../go-packages/meep-model github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis => ../../go-packages/meep-redis github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog => ../../go-packages/meep-watchdog )
go-apps/meep-ctrl-engine/go.sum +2 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,8 @@ github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/imdario/mergo v0.3.8 h1:CGgOkSJeqMRmt0D9XLWExdT4m4F1vd3FV3VPt+0VxkQ= github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e h1:txQltCyjXAqVVSZDArPEhUTg35hKwVIuXwtQo7eAMNQ= github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/mattomatic/dijkstra v0.0.0-20130617153013-6f6d134eb237 h1:acuCHBjzG7MFTugvx3buC4m5rLDLaKC9J8C9jtlraRc= Loading
go-apps/meep-ctrl-engine/server/ctrl-engine.go +56 −23 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import ( ceModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model" log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger" ms "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-metric-store" mod "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model" redis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis" watchdog "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog" Loading @@ -49,9 +50,11 @@ var db *kivik.DB var virtWatchdog *watchdog.Watchdog var rc *redis.Connector var activeModel *mod.Model var metricStore *ms.MetricStore var couchDBAddr = "http://meep-couchdb-svc-couchdb:5984/" var redisDBAddr = "meep-redis-master:6379" var influxDBAddr = "http://influxdb:8086" func getCorePodsList() map[string]bool { Loading Loading @@ -135,6 +138,13 @@ func CtrlEngineInit() (err error) { return err } // Connect to Metric Store metricStore, err = ms.NewMetricStore("", influxDBAddr) if err != nil { log.Error("Failed connection to Redis: ", err) return err } return nil } Loading Loading @@ -360,6 +370,12 @@ func ceActivateScenario(w http.ResponseWriter, r *http.Request) { return } // Set Metrics Store err = metricStore.SetStore(scenarioName) if err != nil { log.Error(err.Error()) } // Activate scenario & publish err = activeModel.SetScenario(scenario) if err != nil { Loading Loading @@ -512,6 +528,12 @@ func ceTerminateScenario(w http.ResponseWriter, r *http.Request) { return } // Set Metrics Store err = metricStore.SetStore("") if err != nil { log.Error(err.Error()) } // Send response w.Header().Set("Content-Type", "application/json; charset=UTF-8") w.WriteHeader(http.StatusOK) Loading Loading @@ -550,25 +572,33 @@ func ceSendEvent(w http.ResponseWriter, r *http.Request) { // Process Event var httpStatus int var error string switch eventType { case "MOBILITY": error, httpStatus = sendEventMobility(event) err, httpStatus = sendEventMobility(event) case "NETWORK-CHARACTERISTICS-UPDATE": error, httpStatus = sendEventNetworkCharacteristics(event) err, httpStatus = sendEventNetworkCharacteristics(event) case "POAS-IN-RANGE": error, httpStatus = sendEventPoasInRange(event) err, httpStatus = sendEventPoasInRange(event) default: error = "Unsupported event type" err = errors.New("Unsupported event type") httpStatus = http.StatusBadRequest } if error != "" { log.Error(error) http.Error(w, error, httpStatus) if err != nil { log.Error(err.Error()) http.Error(w, err.Error(), httpStatus) return } // Log successful event in metric store eventStr, err := json.Marshal(event) if err == nil { err = metricStore.SetEventMetric(eventType, string(eventStr)) } if err != nil { log.Error("Failed to set event metric") } // Send response w.Header().Set("Content-Type", "application/json; charset=UTF-8") w.WriteHeader(http.StatusOK) Loading Loading @@ -669,9 +699,10 @@ func ceGetStates(w http.ResponseWriter, r *http.Request) { // ------------------ func sendEventNetworkCharacteristics(event ceModel.Event) (string, int) { func sendEventNetworkCharacteristics(event ceModel.Event) (error, int) { if event.EventNetworkCharacteristicsUpdate == nil { return "Malformed request: missing EventNetworkCharacteristicsUpdate", http.StatusBadRequest err := errors.New("Malformed request: missing EventNetworkCharacteristicsUpdate") return err, http.StatusBadRequest } // elementFound := false Loading @@ -679,14 +710,15 @@ func sendEventNetworkCharacteristics(event ceModel.Event) (string, int) { err := activeModel.UpdateNetChar(netChar) if err != nil { return err.Error(), http.StatusInternalServerError return err, http.StatusInternalServerError } return "", -1 return nil, -1 } func sendEventMobility(event ceModel.Event) (string, int) { func sendEventMobility(event ceModel.Event) (error, int) { if event.EventMobility == nil { return "Malformed request: missing EventMobility", http.StatusBadRequest err := errors.New("Malformed request: missing EventMobility") return err, http.StatusBadRequest } // Retrieve target name (src) and destination parent name elemName := event.EventMobility.ElementName Loading @@ -694,7 +726,7 @@ func sendEventMobility(event ceModel.Event) (string, int) { oldNL, newNL, err := activeModel.MoveNode(elemName, destName) if err != nil { return err.Error(), http.StatusInternalServerError return err, http.StatusInternalServerError } log.WithFields(log.Fields{ "meep.log.component": "ctrl-engine", Loading @@ -704,14 +736,14 @@ func sendEventMobility(event ceModel.Event) (string, int) { "meep.log.src": elemName, "meep.log.dest": elemName, }).Info("Measurements log") return "", -1 return nil, -1 } func sendEventPoasInRange(event ceModel.Event) (string, int) { func sendEventPoasInRange(event ceModel.Event) (error, int) { if event.EventPoasInRange == nil { return "Malformed request: missing EventPoasInRange", http.StatusBadRequest err := errors.New("Malformed request: missing EventPoasInRange") return err, http.StatusBadRequest } var ue *ceModel.PhysicalLocation // Retrieve UE name Loading @@ -725,7 +757,8 @@ func sendEventPoasInRange(event ceModel.Event) (string, int) { log.Debug("Searching for UE in active scenario") n := activeModel.GetNode(ueName) if n == nil { return ("Node not found " + ueName), http.StatusNotFound err := errors.New("Node not found " + ueName) return err, http.StatusNotFound } ue, ok := n.(*ceModel.PhysicalLocation) if !ok { Loading @@ -746,7 +779,7 @@ func sendEventPoasInRange(event ceModel.Event) (string, int) { //Publish updated scenario err := activeModel.Activate() if err != nil { return err.Error(), http.StatusInternalServerError return err, http.StatusInternalServerError } log.Debug("Active scenario updated") Loading @@ -754,10 +787,10 @@ func sendEventPoasInRange(event ceModel.Event) (string, int) { log.Debug("POA list unchanged. Ignoring.") } } else { err := "Failed to find UE" err := errors.New("Failed to find UE") return err, http.StatusNotFound } return "", -1 return nil, -1 } func getPodDetails(key string, fields map[string]string, userData interface{}) error { Loading
go-packages/meep-metric-store/metric-store.go +31 −5 Original line number Diff line number Diff line Loading @@ -24,7 +24,7 @@ import ( log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger" _ "github.com/influxdata/influxdb1-client" // this is important because of the bug in go mod _ "github.com/influxdata/influxdb1-client" influxclient "github.com/influxdata/influxdb1-client/v2" ) Loading Loading @@ -260,13 +260,39 @@ func (ms *MetricStore) GetLastNetMetric(src string, dest string) (lat int32, tpu } // SetEventMetric func (ms *MetricStore) SetEventMetric(typ string, target string, desc string) error { func (ms *MetricStore) SetEventMetric(eventType string, eventStr string) error { tags := map[string]string{ "type": typ, "target": target, "type": eventType, } fields := map[string]interface{}{ "description": desc, "event": eventStr, } return ms.SetMetric(metricEvent, tags, fields) } // GetLastEventMetric func (ms *MetricStore) GetLastEventMetric(eventType string) (event string, err error) { // Make sure we have set a store if ms.name == "" { err := errors.New("Store name not specified") return event, err } // Get latest Net metric tags := map[string]string{ "type": eventType, } fields := []string{"event"} valuesArray, err := ms.GetMetric(metricEvent, tags, fields, 1) if err != nil { log.Error("Failed to retrieve metrics with error: ", err.Error()) return event, err } // Take first & only values values := valuesArray[0] if val, ok := values["event"].(string); ok { event = val } return event, nil }
go-packages/meep-metric-store/metric-store_test.go +29 −1 Original line number Diff line number Diff line Loading @@ -178,10 +178,38 @@ func TestGetSetMetric(t *testing.T) { } fmt.Println("Set event metric") err = ms.SetEventMetric("MOBILITY", "node1", "UE Mobility event") err = ms.SetEventMetric("MOBILITY", "event1") if err != nil { t.Errorf("Unable to set event metric") } err = ms.SetEventMetric("NETWORK-CHARACTERISTIC-UPDATE", "event2") if err != nil { t.Errorf("Unable to set event metric") } err = ms.SetEventMetric("POAS-IN-RANGE", "event3") 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" { 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" { 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" { t.Errorf("Invalid metric values") } // t.Errorf("DONE") }