Unverified Commit bfe5f163 authored by Kevin Di Lallo's avatar Kevin Di Lallo Committed by GitHub
Browse files

Merge pull request #51 from dilallkx/kd_sp33_dev_metrics

Metric Store with InfluxDB
parents cde8b910 793ce7c4
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -132,7 +132,13 @@ nodeSelector: {}
## Affinity for pod assignment
## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
##
affinity: {}
affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: node-role.kubernetes.io/master
          operator: Exists

## Tolerations for pod assignment
## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
+9 −9
Original line number Diff line number Diff line
@@ -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
@@ -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
)
+2 −0
Original line number Diff line number Diff line
@@ -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=
+61 −25
Original line number Diff line number Diff line
@@ -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"
@@ -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 couchDBAddr string = "http://meep-couchdb-svc-couchdb:5984/"
var redisDBAddr string = "meep-redis-master:6379"
var influxDBAddr string = "http://meep-influxdb:8086"

func getCorePodsList() map[string]bool {

@@ -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
}

@@ -360,6 +370,15 @@ func ceActivateScenario(w http.ResponseWriter, r *http.Request) {
		return
	}

	// Set Metrics Store & Flush entries
	err = metricStore.SetStore(scenarioName)
	if err != nil {
		log.Error(err.Error())
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}
	metricStore.Flush()

	// Activate scenario & publish
	err = activeModel.SetScenario(scenario)
	if err != nil {
@@ -512,6 +531,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)
@@ -550,25 +575,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)
@@ -669,9 +702,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
@@ -679,14 +713,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
@@ -694,7 +729,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",
@@ -704,14 +739,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
@@ -725,7 +760,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 {
@@ -746,7 +782,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")
@@ -754,10 +790,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 {
+1 −0
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ func TestCtrlEngine(t *testing.T) {

	fmt.Println("CtrlEngineInit()")
	couchDBAddr = "http://localhost:30985/"
	influxDBAddr = "http://localhost:30986"
	redisDBAddr = "localhost:30380"
	mod.DbAddress = redisDBAddr
	err := CtrlEngineInit()
Loading