Commit b0d6b5f1 authored by Kevin Di Lallo's avatar Kevin Di Lallo
Browse files

added meep-model scenario validator

parent bd1c0b37
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -56,4 +56,4 @@ spec:
        - name: init-{{ .Values.deployment.dependency }}
        - name: init-{{ .Values.deployment.dependency }}
          image: busybox
          image: busybox
          imagePullPolicy: IfNotPresent
          imagePullPolicy: IfNotPresent
          command: ['sh', '-c', 'until nslookup {{ .Values.deployment.dependency }} ; do echo wiating for {{ .Values.deployment.dependency }}; sleep2; done;']
          command: ['sh', '-c', 'until nslookup {{ .Values.deployment.dependency }} ; do echo waiting for {{ .Values.deployment.dependency }}; sleep 0.25; done;']
+35 −20
Original line number Original line Diff line number Diff line
@@ -349,6 +349,9 @@ definitions:
  Scenario:
  Scenario:
    type: "object"
    type: "object"
    properties:
    properties:
      version:
        type: "string"
        description: "Scenario version"
      name:
      name:
        type: "string"
        type: "string"
        description: "Unique scenario name"
        description: "Unique scenario name"
@@ -464,53 +467,47 @@ definitions:
        enum:
        enum:
        - "ZONE"
        - "ZONE"
        - "COMMON"
        - "COMMON"
      netChar:
        $ref: "#/definitions/NetworkCharacteristics"
      interFogLatency:
      interFogLatency:
        type: "integer"
        type: "integer"
        description: "Latency in ms between fog nodes (or PoAs) within zone"
        description: "**DEPRECATED** As of release 1.3.0, no longer supported"
      interFogLatencyVariation:
      interFogLatencyVariation:
        type: "integer"
        type: "integer"
        description: "Latency variation in ms between fog nodes (or PoAs) within zone"
        description: "**DEPRECATED** As of release 1.3.0, no longer supported"
      interFogThroughput:
      interFogThroughput:
        type: "integer"
        type: "integer"
        description: "The limit of the traffic supported between fog nodes (or PoAs)\
        description: "**DEPRECATED** As of release 1.3.0, no longer supported"
          \ within the zone"
      interFogPacketLoss:
      interFogPacketLoss:
        type: "number"
        type: "number"
        format: "double"
        format: "double"
        description: "Packet lost (in terms of percentage) between fog nodes (or PoAs)\
        description: "**DEPRECATED** As of release 1.3.0, no longer supported"
          \ within the zone"
      interEdgeLatency:
      interEdgeLatency:
        type: "integer"
        type: "integer"
        description: "Latency in ms between edge nodes within zone"
        description: "**DEPRECATED** As of release 1.3.0, no longer supported"
      interEdgeLatencyVariation:
      interEdgeLatencyVariation:
        type: "integer"
        type: "integer"
        description: "Latency variation in ms between edge nodes within zone"
        description: "**DEPRECATED** As of release 1.3.0, no longer supported"
      interEdgeThroughput:
      interEdgeThroughput:
        type: "integer"
        type: "integer"
        description: "The limit of the traffic supported between edge nodes within\
        description: "**DEPRECATED** As of release 1.3.0, no longer supported"
          \ the zone"
      interEdgePacketLoss:
      interEdgePacketLoss:
        type: "number"
        type: "number"
        format: "double"
        format: "double"
        description: "Packet lost (in terms of percentage) between edge nodes within\
        description: "**DEPRECATED** As of release 1.3.0, no longer supported"
          \ the zone"
      edgeFogLatency:
      edgeFogLatency:
        type: "integer"
        type: "integer"
        description: "Latency in ms between fog nodes (or PoAs) and edge nodes within\
        description: "**DEPRECATED** As of release 1.3.0, replaced by netChar latency"
          \ zone"
      edgeFogLatencyVariation:
      edgeFogLatencyVariation:
        type: "integer"
        type: "integer"
        description: "Latency variation in ms between fog nodes (or PoAs) and edge\
        description: "**DEPRECATED** As of release 1.3.0, replaced by netChar latencyVariation"
          \ nodes within zone"
      edgeFogThroughput:
      edgeFogThroughput:
        type: "integer"
        type: "integer"
        description: "The limit of the traffic supported between fog nodes (or PoAs)\
        description: "**DEPRECATED** As of release 1.3.0, replaced by netChar throughput"
          \ and edge nodes within the zone"
      edgeFogPacketLoss:
      edgeFogPacketLoss:
        type: "number"
        type: "number"
        format: "double"
        format: "double"
        description: "Packet lost (in terms of percentage) between fog nodes (or PoAs)\
        description: "**DEPRECATED** As of release 1.3.0, replaced by netChar packetLoss"
          \ and edge nodes within the zone"
      meta:
      meta:
        type: "object"
        type: "object"
        description: "Key/Value Pair Map (string, string)"
        description: "Key/Value Pair Map (string, string)"
@@ -527,6 +524,24 @@ definitions:
          $ref: "#/definitions/NetworkLocation"
          $ref: "#/definitions/NetworkLocation"
    description: "Logical zone (MEC network) object"
    description: "Logical zone (MEC network) object"
    example: {}
    example: {}
  NetworkCharacteristics:
    type: "object"
    properties:
      latency:
        type: "integer"
        description: "Latency in ms"
      latencyVariation:
        type: "integer"
        description: "Latency variation in ms"
      throughput:
        type: "integer"
        description: "Throughput limit in Mbps"
      packetLoss:
        type: "number"
        format: "double"
        description: "Packet loss percentage"
    description: "Network characteristics object"
    example: {}
  NetworkLocation:
  NetworkLocation:
    type: "object"
    type: "object"
    properties:
    properties:
+2 −0
Original line number Original line Diff line number Diff line
@@ -8,6 +8,8 @@ github.com/RyanCarrier/dijkstra-1 v0.0.0-20170512020943-0e5801a26345 h1:fgSpoKVi
github.com/RyanCarrier/dijkstra-1 v0.0.0-20170512020943-0e5801a26345/go.mod h1:OK4EvWJ441LQqGzed5NGB6vKBAE34n3z7iayPcEwr30=
github.com/RyanCarrier/dijkstra-1 v0.0.0-20170512020943-0e5801a26345/go.mod h1:OK4EvWJ441LQqGzed5NGB6vKBAE34n3z7iayPcEwr30=
github.com/albertorestifo/dijkstra v0.0.0-20160910063646-aba76f725f72 h1:uGeGZl8PxSq8VZGG4QK5njJTFA4/G/x5CYORvQVXtAE=
github.com/albertorestifo/dijkstra v0.0.0-20160910063646-aba76f725f72 h1:uGeGZl8PxSq8VZGG4QK5njJTFA4/G/x5CYORvQVXtAE=
github.com/albertorestifo/dijkstra v0.0.0-20160910063646-aba76f725f72/go.mod h1:o+JdB7VetTHjLhU0N57x18B9voDBQe0paApdEAEoEfw=
github.com/albertorestifo/dijkstra v0.0.0-20160910063646-aba76f725f72/go.mod h1:o+JdB7VetTHjLhU0N57x18B9voDBQe0paApdEAEoEfw=
github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/flimzy/diff v0.1.5 h1:QfOwp+TuGCeWWFxFtXqCdepnz0SeaImgNfMm6vWz3y8=
github.com/flimzy/diff v0.1.5 h1:QfOwp+TuGCeWWFxFtXqCdepnz0SeaImgNfMm6vWz3y8=
+50 −2
Original line number Original line Diff line number Diff line
@@ -36,6 +36,10 @@ import (
	watchdog "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog"
	watchdog "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog"
)
)


type Scenario struct {
	Name string `json:"name,omitempty"`
}

const scenarioDBName = "scenarios"
const scenarioDBName = "scenarios"
const activeScenarioName = "active"
const activeScenarioName = "active"
const moduleName string = "meep-ctrl-engine"
const moduleName string = "meep-ctrl-engine"
@@ -78,6 +82,34 @@ func CtrlEngineInit() (err error) {
	}
	}
	log.Info("Connected to Scenario DB")
	log.Info("Connected to Scenario DB")


	// Retrieve scenario list from DB
	scenarioList, err := getScenarioList(db)
	if err != nil {
		log.Error(err.Error())
		return err
	}

	// Validate DB scenarios & upgrade them if compatible
	for _, scenario := range scenarioList {
		validScenario, status, err := mod.ValidateScenario(scenario)
		if err == nil && status == mod.ValidatorStatusUpdated {
			// Retrieve scenario name
			s := new(Scenario)
			err = json.Unmarshal(validScenario, s)
			if err != nil || s.Name == "" {
				return errors.New("Failed to get scenario name from valid scenario")
			}

			// Update scenario in DB
			rev, err := setScenario(db, s.Name, validScenario)
			if err != nil {
				return errors.New("Failed to update scenario with error: " + err.Error())
			}
			log.Debug("Scenario updated with rev: ", rev)
		}
	}

	// Create new active scenario model
	activeModel, err = mod.NewModel(mod.DbAddress, moduleName, "activeScenario")
	activeModel, err = mod.NewModel(mod.DbAddress, moduleName, "activeScenario")
	if err != nil {
	if err != nil {
		log.Error("Failed to create model: ", err.Error())
		log.Error("Failed to create model: ", err.Error())
@@ -130,8 +162,16 @@ func ceCreateScenario(w http.ResponseWriter, r *http.Request) {
		return
		return
	}
	}


	// Validate scenario
	validScenario, _, err := mod.ValidateScenario(b)
	if err != nil {
		log.Error(err.Error())
		http.Error(w, err.Error(), http.StatusBadRequest)
		return
	}

	// Add new scenario to DB
	// Add new scenario to DB
	rev, err := addScenario(db, scenarioName, b)
	rev, err := addScenario(db, scenarioName, validScenario)
	if err != nil {
	if err != nil {
		log.Error(err.Error())
		log.Error(err.Error())
		http.Error(w, err.Error(), http.StatusConflict)
		http.Error(w, err.Error(), http.StatusConflict)
@@ -272,8 +312,16 @@ func ceSetScenario(w http.ResponseWriter, r *http.Request) {
		return
		return
	}
	}


	// Validate scenario
	validScenario, _, err := mod.ValidateScenario(b)
	if err != nil {
		log.Error(err.Error())
		http.Error(w, err.Error(), http.StatusBadRequest)
		return
	}

	// Update scenario in DB
	// Update scenario in DB
	rev, err := setScenario(db, scenarioName, b)
	rev, err := setScenario(db, scenarioName, validScenario)
	if err != nil {
	if err != nil {
		log.Error(err.Error())
		log.Error(err.Error())
		http.Error(w, err.Error(), http.StatusNotFound)
		http.Error(w, err.Error(), http.StatusNotFound)
+1 −0
Original line number Original line Diff line number Diff line
@@ -48,6 +48,7 @@ Class | Method | HTTP request | Description
 - [ExternalConfig](docs/ExternalConfig.md)
 - [ExternalConfig](docs/ExternalConfig.md)
 - [GpuConfig](docs/GpuConfig.md)
 - [GpuConfig](docs/GpuConfig.md)
 - [IngressService](docs/IngressService.md)
 - [IngressService](docs/IngressService.md)
 - [NetworkCharacteristics](docs/NetworkCharacteristics.md)
 - [NetworkLocation](docs/NetworkLocation.md)
 - [NetworkLocation](docs/NetworkLocation.md)
 - [NodeServiceMaps](docs/NodeServiceMaps.md)
 - [NodeServiceMaps](docs/NodeServiceMaps.md)
 - [PhysicalLocation](docs/PhysicalLocation.md)
 - [PhysicalLocation](docs/PhysicalLocation.md)
Loading