**Micro-service**
[meep-gis-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-gis-engine)\
+ \
**Type & Usage**
Platform runtime interface to control geo-spatial behavior\
+ \ and simulation
**Details**
API details available at _your-AdvantEDGE-ip-address/api_"
+ version: "1.0.0"
+ title: "AdvantEDGE GIS Engine REST API"
+ contact:
+ name: "InterDigital AdvantEDGE Support"
+ email: "AdvantEDGE@InterDigital.com"
+ license:
+ name: "Apache 2.0"
+ url: "https://github.com/InterDigitalInc/AdvantEDGE/blob/master/LICENSE"
+basePath: "/gis/v1"
+tags:
+- name: "Automation"
+- name: "Geospatial Data"
+consumes:
+- "application/json"
+produces:
+- "application/json"
+paths:
+ /automation:
+ get:
+ tags:
+ - "Automation"
+ summary: "Get automation state"
+ description: "Get automation state for all automation types"
+ operationId: "getAutomationState"
+ produces:
+ - "application/json"
+ parameters: []
+ responses:
+ 200:
+ description: "OK"
+ schema:
+ $ref: "#/definitions/AutomationStateList"
+ /automation/{type}:
+ get:
+ tags:
+ - "Automation"
+ summary: "Get automation state"
+ description: "Get automation state for the given automation type"
+ operationId: "getAutomationStateByName"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "type"
+ in: "path"
+ description: "Automation type.
Automation loop evaluates enabled automation\
+ \ types once every second.
\n
Supported Types:
Supported Types:
Supported Types:
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30005`
+This API allows to control geo-spatial behavior and simulation.
**Micro-service**
[meep-gis-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-gis-engine)
**Type & Usage**
Platform runtime interface to control geo-spatial behavior and simulation
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
## Overview
This server was generated by the [swagger-codegen]
@@ -13,7 +13,7 @@ To see how to make this your own, look here:
[README](https://github.com/swagger-api/swagger-codegen/blob/master/README.md)
- API version: 1.0.0
-- Build date: 2019-12-03T16:13:43.566-05:00
+- Build date: 2020-06-28T22:53:38.103-04:00
### Running the server
diff --git a/go-apps/meep-gis-engine/server/api_automation.go b/go-apps/meep-gis-engine/server/api_automation.go
new file mode 100644
index 0000000000000000000000000000000000000000..b069059395137b6844404a1dbcd3194673bb26ed
--- /dev/null
+++ b/go-apps/meep-gis-engine/server/api_automation.go
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE GIS Engine REST API
+ *
+ * This API allows to control geo-spatial behavior and simulation.
**Micro-service**
[meep-gis-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-gis-engine)
**Type & Usage**
Platform runtime interface to control geo-spatial behavior and simulation
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+import (
+ "net/http"
+)
+
+func GetAutomationState(w http.ResponseWriter, r *http.Request) {
+ geGetAutomationState(w, r)
+}
+
+func GetAutomationStateByName(w http.ResponseWriter, r *http.Request) {
+ geGetAutomationStateByName(w, r)
+}
+
+func SetAutomationStateByName(w http.ResponseWriter, r *http.Request) {
+ geSetAutomationStateByName(w, r)
+}
diff --git a/go-apps/meep-gis-engine/server/api_geospatial_data.go b/go-apps/meep-gis-engine/server/api_geospatial_data.go
new file mode 100644
index 0000000000000000000000000000000000000000..cc9ad77c812c49987a6014020317cf7c6b147be2
--- /dev/null
+++ b/go-apps/meep-gis-engine/server/api_geospatial_data.go
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE GIS Engine REST API
+ *
+ * This API allows to control geo-spatial behavior and simulation.
**Micro-service**
[meep-gis-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-gis-engine)
**Type & Usage**
Platform runtime interface to control geo-spatial behavior and simulation
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+import (
+ "net/http"
+)
+
+func DeleteGeoDataByName(w http.ResponseWriter, r *http.Request) {
+ geDeleteGeoDataByName(w, r)
+}
+
+func GetAssetData(w http.ResponseWriter, r *http.Request) {
+ geGetAssetData(w, r)
+}
+
+func GetGeoDataByName(w http.ResponseWriter, r *http.Request) {
+ geGetGeoDataByName(w, r)
+}
+
+func UpdateGeoDataByName(w http.ResponseWriter, r *http.Request) {
+ geUpdateGeoDataByName(w, r)
+}
diff --git a/go-apps/meep-gis-engine/server/gis-engine.go b/go-apps/meep-gis-engine/server/gis-engine.go
new file mode 100644
index 0000000000000000000000000000000000000000..10d69cb5f276b10091458723abcdbf24cf52ee56
--- /dev/null
+++ b/go-apps/meep-gis-engine/server/gis-engine.go
@@ -0,0 +1,1140 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package server
+
+import (
+ "context"
+ "encoding/json"
+ "errors"
+ "fmt"
+ "net/http"
+ "os"
+ "sort"
+ "strconv"
+ "strings"
+ "time"
+
+ dataModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model"
+ log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
+ mod "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model"
+ mq "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq"
+ postgis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-postgis"
+ sbox "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-sandbox-ctrl-client"
+ "github.com/gorilla/mux"
+)
+
+const moduleName = "meep-gis-engine"
+const redisAddr = "meep-redis-master.default.svc.cluster.local:6379"
+const sboxCtrlBasepath = "http://meep-sandbox-ctrl/sandbox-ctrl/v1"
+const postgisUser = "postgres"
+const postgisPwd = "pwd"
+
+const (
+ AutoTypeMovement = "MOVEMENT"
+ AutoTypeMobility = "MOBILITY"
+ AutoTypeNetChar = "NETWORK-CHARACTERISTICS-UPDATE"
+ AutoTypePoaInRange = "POAS-IN-RANGE"
+)
+
+const (
+ AssetTypeUe = "UE"
+ AssetTypePoa = "POA"
+ AssetTypeCompute = "COMPUTE"
+)
+
+type Asset struct {
+ assetType string
+ geoDataAssigned bool
+}
+
+type PoaInfo struct {
+ poa string
+ distance float32
+ poaInRange []string
+}
+
+type GisEngine struct {
+ sandboxName string
+ mqLocal *mq.MsgQueue
+ handlerId int
+ sboxCtrlClient *sbox.APIClient
+ activeModel *mod.Model
+ pc *postgis.Connector
+ assets map[string]Asset
+ uePoaInfo map[string]PoaInfo
+ automation map[string]bool
+ ticker *time.Ticker
+ updateTime time.Time
+}
+
+var ge *GisEngine
+
+// Init - GIS Engine initialization
+func Init() (err error) {
+ ge = new(GisEngine)
+ ge.assets = make(map[string]Asset)
+ ge.uePoaInfo = make(map[string]PoaInfo)
+ ge.automation = make(map[string]bool)
+ resetAutomation()
+ startAutomation()
+
+ // timer := time.NewTimer(time.Second)
+
+ // Retrieve Sandbox name from environment variable
+ ge.sandboxName = strings.TrimSpace(os.Getenv("MEEP_SANDBOX_NAME"))
+ if ge.sandboxName == "" {
+ err = errors.New("MEEP_SANDBOX_NAME env variable not set")
+ log.Error(err.Error())
+ return err
+ }
+ log.Info("MEEP_SANDBOX_NAME: ", ge.sandboxName)
+
+ // Create message queue
+ ge.mqLocal, err = mq.NewMsgQueue(mq.GetLocalName(ge.sandboxName), moduleName, ge.sandboxName, redisAddr)
+ if err != nil {
+ log.Error("Failed to create Message Queue with error: ", err)
+ return err
+ }
+ log.Info("Message Queue created")
+
+ // Create Sandbox Controller REST API client
+ sboxCfg := sbox.NewConfiguration()
+ sboxCfg.BasePath = sboxCtrlBasepath
+ ge.sboxCtrlClient = sbox.NewAPIClient(sboxCfg)
+ if ge.sboxCtrlClient == nil {
+ err := errors.New("Failed to create Sandbox Ctrl REST API client")
+ return err
+ }
+ log.Info("Sandbox Ctrl REST API client created")
+
+ // Create new active scenario model
+ modelCfg := mod.ModelCfg{
+ Name: "activeScenario",
+ Namespace: ge.sandboxName,
+ Module: moduleName,
+ UpdateCb: nil,
+ DbAddr: redisAddr,
+ }
+ ge.activeModel, err = mod.NewModel(modelCfg)
+ if err != nil {
+ log.Error("Failed to create model: ", err.Error())
+ return err
+ }
+
+ // Connect to Postgis DB
+ ge.pc, err = postgis.NewConnector(moduleName, ge.sandboxName, postgisUser, postgisPwd, "", "")
+ if err != nil {
+ log.Error("Failed connection to Postgis: ", err)
+ return err
+ }
+ log.Info("Connected to GIS Engine DB")
+
+ // Delete any old tables
+ _ = ge.pc.DeleteTables()
+
+ // Create new tables
+ err = ge.pc.CreateTables()
+ if err != nil {
+ log.Error("Failed connection to Postgis: ", err)
+ return err
+ }
+ log.Info("Created new GIS Engine DB tables")
+
+ // Initialize Postgis DB with current active scenario assets
+ processScenarioActivate()
+
+ return nil
+}
+
+// Run - GIS Engine thread
+func Run() (err error) {
+
+ // Register Message Queue handler
+ handler := mq.MsgHandler{Handler: msgHandler, UserData: nil}
+ ge.handlerId, err = ge.mqLocal.RegisterHandler(handler)
+ if err != nil {
+ log.Error("Failed to register MsgQueue handler: ", err.Error())
+ return err
+ }
+
+ // Register Postgis listener
+ err = ge.pc.SetListener(gisHandler)
+ if err != nil {
+ log.Error("Failed to register Postgis listener: ", err.Error())
+ return err
+ }
+ log.Info("Registered Postgis listener")
+
+ return nil
+}
+
+// Postgis handler
+func gisHandler(updateType string, assetName string) {
+ // Create & fill gis update message
+ msg := ge.mqLocal.CreateMsg(mq.MsgGeUpdate, mq.TargetAll, ge.sandboxName)
+ msg.Payload[assetName] = updateType
+ log.Debug("TX MSG: ", mq.PrintMsg(msg))
+
+ // Send message on local Msg Queue
+ err := ge.mqLocal.SendMsg(msg)
+ if err != nil {
+ log.Error("Failed to send message with error: ", err.Error())
+ }
+}
+
+// Message Queue handler
+func msgHandler(msg *mq.Msg, userData interface{}) {
+ switch msg.Message {
+ case mq.MsgScenarioActivate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ processScenarioActivate()
+ case mq.MsgScenarioUpdate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ processScenarioUpdate()
+ case mq.MsgScenarioTerminate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ processScenarioTerminate()
+ default:
+ log.Trace("Ignoring unsupported message: ", mq.PrintMsg(msg))
+ }
+}
+
+func processScenarioActivate() {
+ // Sync with active scenario store
+ ge.activeModel.UpdateScenario()
+
+ // Retrieve & process Assets in active scenario
+ assetList := ge.activeModel.GetNodeNames(mod.NodeTypeUE, mod.NodeTypePoa, mod.NodeTypePoaCell, mod.NodeTypeEdge, mod.NodeTypeFog, mod.NodeTypeCloud)
+ addAssets(assetList)
+}
+
+func processScenarioUpdate() {
+ // Sync with active scenario store
+ ge.activeModel.UpdateScenario()
+
+ // Get latest asset list
+ newAssetList := ge.activeModel.GetNodeNames(mod.NodeTypeUE, mod.NodeTypePoa, mod.NodeTypePoaCell, mod.NodeTypeEdge, mod.NodeTypeFog, mod.NodeTypeCloud)
+ newAssets := make(map[string]bool)
+ var assetsToAdd []string
+ var assetsToRemove []string
+
+ // Compare with GIS Engine asset list to identify assets that should be added or removed from DB
+ for _, assetName := range newAssetList {
+ newAssets[assetName] = true
+ asset, found := ge.assets[assetName]
+ if !found || !asset.geoDataAssigned {
+ assetsToAdd = append(assetsToAdd, assetName)
+ }
+ }
+ for assetName := range ge.assets {
+ if _, found := newAssets[assetName]; !found {
+ assetsToRemove = append(assetsToRemove, assetName)
+ }
+ }
+
+ // Add & remove assets from model update
+ addAssets(assetsToAdd)
+ removeAssets(assetsToRemove)
+}
+
+func processScenarioTerminate() {
+ // Sync with active scenario store
+ ge.activeModel.UpdateScenario()
+
+ // Flush all postgis tables
+ _ = ge.pc.DeleteAllUe()
+ _ = ge.pc.DeleteAllPoa()
+ _ = ge.pc.DeleteAllCompute()
+
+ // Clear asset list
+ log.Debug("GeoData deleted for all assets")
+ ge.assets = make(map[string]Asset)
+}
+
+func addAssets(assetList []string) {
+ for _, assetName := range assetList {
+ // Get node type
+ nodeType := ge.activeModel.GetNodeType(assetName)
+
+ // Default asset geodata to unassigned state
+ ge.assets[assetName] = Asset{assetType: nodeType, geoDataAssigned: false}
+
+ if isUe(nodeType) {
+ pl := (ge.activeModel.GetNode(assetName)).(*dataModel.PhysicalLocation)
+
+ // Parse Geo Data
+ position, _, path, mode, velocity, err := parseGeoData(pl.GeoData)
+ if err != nil {
+ continue
+ }
+
+ // Set default EOP mode to LOOP if not provided
+ if mode == "" {
+ mode = postgis.PathModeLoop
+ }
+
+ // Create UE
+ err = ge.pc.CreateUe(pl.Id, assetName, position, path, mode, velocity)
+ if err != nil {
+ log.Error(err.Error())
+ continue
+ }
+ log.Debug("GeoData stored for UE: ", assetName)
+ ge.assets[assetName] = Asset{assetType: nodeType, geoDataAssigned: true}
+ } else if isPoa(nodeType) {
+ nl := (ge.activeModel.GetNode(assetName)).(*dataModel.NetworkLocation)
+
+ // Parse Geo Data
+ position, radius, _, _, _, err := parseGeoData(nl.GeoData)
+ if err != nil {
+ continue
+ }
+
+ // Create POA
+ err = ge.pc.CreatePoa(nl.Id, assetName, nodeType, position, radius)
+ if err != nil {
+ log.Error(err.Error())
+ continue
+ }
+ log.Debug("GeoData stored for POA: ", assetName)
+ ge.assets[assetName] = Asset{assetType: nodeType, geoDataAssigned: true}
+ } else if isCompute(nodeType) {
+ pl := (ge.activeModel.GetNode(assetName)).(*dataModel.PhysicalLocation)
+
+ // Parse Geo Data
+ position, _, _, _, _, err := parseGeoData(pl.GeoData)
+ if err != nil {
+ continue
+ }
+
+ // Create Compute
+ err = ge.pc.CreateCompute(pl.Id, assetName, nodeType, position)
+ if err != nil {
+ log.Error(err.Error())
+ continue
+ }
+ log.Debug("GeoData stored for Compute: ", assetName)
+ ge.assets[assetName] = Asset{assetType: nodeType, geoDataAssigned: true}
+ }
+ }
+}
+
+func removeAssets(assetList []string) {
+ for _, assetName := range assetList {
+ // Get asset node type
+ nodeType := ge.assets[assetName].assetType
+
+ // Remove asset
+ delete(ge.assets, assetName)
+
+ if isUe(nodeType) {
+ log.Debug("GeoData deleted for UE: ", assetName)
+ err := ge.pc.DeleteUe(assetName)
+ if err != nil {
+ log.Error(err.Error())
+ continue
+ }
+ } else if isPoa(nodeType) {
+ log.Debug("GeoData deleted for POA: ", assetName)
+ err := ge.pc.DeletePoa(assetName)
+ if err != nil {
+ log.Error(err.Error())
+ continue
+ }
+ } else if isCompute(nodeType) {
+ log.Debug("GeoData deleted for Compute: ", assetName)
+ err := ge.pc.DeleteCompute(assetName)
+ if err != nil {
+ log.Error(err.Error())
+ continue
+ }
+ } else {
+ log.Error("Asset not found in scenario model")
+ }
+ }
+}
+
+func parseGeoData(geoData *dataModel.GeoData) (position string, radius float32, path string, mode string, velocity float32, err error) {
+ // Validate GeoData
+ if geoData == nil {
+ err = errors.New("geoData == nil")
+ return
+ }
+
+ // Get position
+ if geoData.Location != nil {
+ var positionBytes []byte
+ positionBytes, err = json.Marshal(geoData.Location)
+ if err != nil {
+ return
+ }
+ position = string(positionBytes)
+ }
+
+ // Get Radius
+ radius = geoData.Radius
+ if radius < 0 {
+ err = errors.New("radius < 0")
+ return
+ }
+
+ // Get path
+ if geoData.Path != nil {
+ var pathBytes []byte
+ pathBytes, err = json.Marshal(geoData.Path)
+ if err != nil {
+ return
+ }
+ path = string(pathBytes)
+ }
+
+ // Get Path Mode
+ mode = geoData.EopMode
+ if mode != "" && mode != postgis.PathModeLoop && mode != postgis.PathModeReverse {
+ err = errors.New("Unsupported end-of-path mode: " + mode)
+ return
+ }
+
+ // Get velocity
+ velocity = geoData.Velocity
+ if velocity < 0 {
+ err = errors.New("velocity < 0")
+ return
+ }
+
+ return
+}
+
+func parseGeoDataAsset(geoData *GeoDataAsset) (position string, radius float32, path string, mode string, velocity float32, err error) {
+ // Validate GeoData
+ if geoData == nil {
+ err = errors.New("geoData == nil")
+ return
+ }
+
+ // Get position
+ if geoData.Location != nil {
+ var positionBytes []byte
+ positionBytes, err = json.Marshal(geoData.Location)
+ if err != nil {
+ return
+ }
+ position = string(positionBytes)
+ }
+
+ // Get Radius
+ radius = geoData.Radius
+ if radius < 0 {
+ err = errors.New("radius < 0")
+ return
+ }
+
+ // Get path
+ if geoData.Path != nil {
+ var pathBytes []byte
+ pathBytes, err = json.Marshal(geoData.Path)
+ if err != nil {
+ return
+ }
+ path = string(pathBytes)
+ }
+
+ // Get Path Mode
+ mode = geoData.EopMode
+ if mode != "" && mode != postgis.PathModeLoop && mode != postgis.PathModeReverse {
+ err = errors.New("Unsupported end-of-path mode: " + mode)
+ return
+ }
+
+ // Get velocity
+ velocity = geoData.Velocity
+ if velocity < 0 {
+ err = errors.New("velocity < 0")
+ return
+ }
+
+ return
+}
+
+func fillGeoDataAsset(geoData *GeoDataAsset, position string, radius float32, path string, mode string, velocity float32) (err error) {
+ if geoData == nil {
+ return errors.New("geoData == nil")
+ }
+
+ // Fill geodata location
+ if position != "" {
+ geoData.Location = new(Point)
+ err = json.Unmarshal([]byte(position), geoData.Location)
+ if err != nil {
+ return
+ }
+ }
+
+ // Fill Radius
+ geoData.Radius = radius
+
+ // Fill geodata path
+ if path != "" {
+ geoData.Path = new(LineString)
+ err = json.Unmarshal([]byte(path), geoData.Path)
+ if err != nil {
+ return
+ }
+ }
+
+ // Fill EOP mode
+ geoData.EopMode = mode
+
+ // Fill Velocity
+ geoData.Velocity = velocity
+
+ return
+}
+
+func isUe(nodeType string) bool {
+ return nodeType == mod.NodeTypeUE
+}
+
+func isPoa(nodeType string) bool {
+ return nodeType == mod.NodeTypePoa || nodeType == mod.NodeTypePoaCell
+}
+
+func isCompute(nodeType string) bool {
+ return nodeType == mod.NodeTypeFog || nodeType == mod.NodeTypeEdge || nodeType == mod.NodeTypeCloud
+}
+
+func resetAutomation() {
+ // Stop automation if running
+ _ = setAutomation(AutoTypeMovement, false)
+ _ = setAutomation(AutoTypeMobility, false)
+ _ = setAutomation(AutoTypeNetChar, false)
+ _ = setAutomation(AutoTypePoaInRange, false)
+
+ // Reset automation
+ ge.automation[AutoTypeMovement] = false
+ ge.automation[AutoTypeMobility] = false
+ ge.automation[AutoTypeNetChar] = false
+ ge.automation[AutoTypePoaInRange] = false
+}
+
+func startAutomation() {
+ log.Debug("Starting automation loop")
+ ge.ticker = time.NewTicker(1000 * time.Millisecond)
+ go func() {
+ for range ge.ticker.C {
+ runAutomation()
+ }
+ }()
+}
+
+func setAutomation(automationType string, state bool) (err error) {
+ // Validate automation type
+ if _, found := ge.automation[automationType]; !found {
+ return errors.New("Automation type not found")
+ }
+
+ // Type-specific configuration
+ if automationType == AutoTypeNetChar {
+ return errors.New("Automation type not supported")
+ } else if automationType == AutoTypeMovement {
+ if state {
+ ge.updateTime = time.Now()
+ } else {
+ ge.updateTime = time.Time{}
+ }
+ }
+
+ // Update automation state
+ ge.automation[automationType] = state
+
+ return nil
+}
+
+func runAutomation() {
+ // Movement
+ if ge.automation[AutoTypeMovement] {
+ log.Debug("Auto Movement: updating UE positions")
+
+ // Calculate number of increments (seconds) for position update
+ currentTime := time.Now()
+ increment := float32(currentTime.Sub(ge.updateTime).Seconds())
+
+ // Update all UE positions with increment
+ err := ge.pc.AdvanceAllUePosition(increment)
+ if err != nil {
+ log.Error(err)
+ }
+
+ // Store new update timestamp
+ ge.updateTime = currentTime
+ }
+
+ // Mobility & POA In Range
+ if ge.automation[AutoTypeMobility] || ge.automation[AutoTypePoaInRange] {
+ // Get all UE POA information
+ ueMap, err := ge.pc.GetAllUe()
+ if err == nil {
+ for _, ue := range ueMap {
+ // Get last POA info
+ poaInfo, found := ge.uePoaInfo[ue.Name]
+
+ // Send mobility event if necessary
+ if ge.automation[AutoTypeMobility] {
+ if !found || poaInfo.poa != ue.Poa {
+ var event sbox.Event
+ var mobilityEvent sbox.EventMobility
+ event.Type_ = AutoTypeMobility
+ mobilityEvent.ElementName = ue.Name
+ mobilityEvent.Dest = ue.Poa
+ event.EventMobility = &mobilityEvent
+
+ go func() {
+ _, err := ge.sboxCtrlClient.EventsApi.SendEvent(context.TODO(), event.Type_, event)
+ if err != nil {
+ log.Error(err)
+ }
+ }()
+ }
+ }
+
+ // Send POA in range event if necessary
+ if ge.automation[AutoTypePoaInRange] {
+ updateRequired := false
+ if len(poaInfo.poaInRange) != len(ue.PoaInRange) {
+ updateRequired = true
+ } else {
+ sort.Strings(poaInfo.poaInRange)
+ sort.Strings(ue.PoaInRange)
+ for i, poa := range poaInfo.poaInRange {
+ if poa != ue.PoaInRange[i] {
+ updateRequired = true
+ }
+ }
+ }
+
+ if updateRequired {
+ var event sbox.Event
+ var poasInRangeEvent sbox.EventPoasInRange
+ event.Type_ = AutoTypePoaInRange
+ poasInRangeEvent = sbox.EventPoasInRange{Ue: ue.Name, PoasInRange: ue.PoaInRange}
+ event.EventPoasInRange = &poasInRangeEvent
+
+ go func() {
+ _, err := ge.sboxCtrlClient.EventsApi.SendEvent(context.TODO(), event.Type_, event)
+ if err != nil {
+ log.Error(err)
+ }
+ }()
+ }
+ }
+
+ // Update POA info
+ ge.uePoaInfo[ue.Name] = PoaInfo{poa: ue.Poa, distance: ue.PoaDistance, poaInRange: ue.PoaInRange}
+ }
+ } else {
+ log.Error(err.Error())
+ }
+ }
+
+ // Net Char
+ if ge.automation[AutoTypeNetChar] {
+ log.Debug("Auto Net Char: updating network characteristics")
+ }
+}
+
+// ---------------------------- REST API ------------------------------------
+
+func geGetAutomationState(w http.ResponseWriter, r *http.Request) {
+ log.Debug("Get all automation states")
+
+ var automationList AutomationStateList
+ for automation, state := range ge.automation {
+ var automationState AutomationState
+ automationState.Type_ = automation
+ automationState.Active = state
+ automationList.States = append(automationList.States, automationState)
+ }
+
+ // Format response
+ jsonResponse, err := json.Marshal(&automationList)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ // Send response
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ w.WriteHeader(http.StatusOK)
+ fmt.Fprint(w, string(jsonResponse))
+}
+
+func geGetAutomationStateByName(w http.ResponseWriter, r *http.Request) {
+ // Get automation type from request path parameters
+ vars := mux.Vars(r)
+ automationType := vars["type"]
+ log.Debug("Get automation state for type: ", automationType)
+
+ // Get automation state
+ var automationState AutomationState
+ automationState.Type_ = automationType
+ if state, found := ge.automation[automationType]; found {
+ automationState.Active = state
+ } else {
+ err := errors.New("Automation type not found")
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ // Format response
+ jsonResponse, err := json.Marshal(&automationState)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ // Send response
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ w.WriteHeader(http.StatusOK)
+ fmt.Fprint(w, string(jsonResponse))
+}
+
+func geSetAutomationStateByName(w http.ResponseWriter, r *http.Request) {
+ // Get automation type from request path parameters
+ vars := mux.Vars(r)
+ automationType := vars["type"]
+
+ // Retrieve requested state from query parameters
+ query := r.URL.Query()
+ automationState, _ := strconv.ParseBool(query.Get("run"))
+ if automationState {
+ log.Debug("Start automation for type: ", automationType)
+ } else {
+ log.Debug("Stop automation for type: ", automationType)
+ }
+
+ // Set automation state
+ err := setAutomation(automationType, automationState)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ w.WriteHeader(http.StatusOK)
+}
+
+func geDeleteGeoDataByName(w http.ResponseWriter, r *http.Request) {
+ // Get asset name from request path parameters
+ vars := mux.Vars(r)
+ assetName := vars["assetName"]
+ log.Debug("Delete GeoData for asset: ", assetName)
+
+ // Get node type then remove it from the DB
+ nodeType := ge.activeModel.GetNodeType(assetName)
+ if isUe(nodeType) {
+ log.Debug("GeoData deleted for UE: ", assetName)
+ ge.assets[assetName] = Asset{assetType: nodeType, geoDataAssigned: false}
+ err := ge.pc.DeleteUe(assetName)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ } else if isPoa(nodeType) {
+ log.Debug("GeoData deleted for POA: ", assetName)
+ ge.assets[assetName] = Asset{assetType: nodeType, geoDataAssigned: false}
+ err := ge.pc.DeletePoa(assetName)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ } else if isCompute(nodeType) {
+ log.Debug("GeoData deleted for Compute: ", assetName)
+ ge.assets[assetName] = Asset{assetType: nodeType, geoDataAssigned: false}
+ err := ge.pc.DeleteCompute(assetName)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ } else {
+ err := errors.New("Asset not found in scenario model")
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ w.WriteHeader(http.StatusOK)
+}
+
+func geGetAssetData(w http.ResponseWriter, r *http.Request) {
+ // Retrieve asset type from query parameters
+ query := r.URL.Query()
+ assetType := query.Get("assetType")
+ subType := query.Get("subType")
+ assetTypeStr := "*"
+ if assetType != "" {
+ assetTypeStr = assetType
+ }
+ subTypeStr := "*"
+ if subType != "" {
+ subTypeStr = subType
+ }
+ log.Debug("Get GeoData for assetType[", assetTypeStr, "] subType[", subTypeStr, "]")
+
+ var assetList GeoDataAssetList
+
+ // Get all UEs
+ if assetType == "" || assetType == AssetTypeUe {
+ ueMap, err := ge.pc.GetAllUe()
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ for _, ue := range ueMap {
+ // Filter subtype
+ if subType != "" && subType != mod.NodeTypeUE {
+ continue
+ }
+ var asset GeoDataAsset
+ asset.AssetName = ue.Name
+ asset.AssetType = AssetTypeUe
+ asset.SubType = mod.NodeTypeUE
+ err = fillGeoDataAsset(&asset, ue.Position, 0, ue.Path, ue.PathMode, ue.PathVelocity)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ assetList.GeoDataAssets = append(assetList.GeoDataAssets, asset)
+ }
+ }
+
+ // Get all POAs
+ if assetType == "" || assetType == AssetTypePoa {
+ poaMap, err := ge.pc.GetAllPoa()
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ for _, poa := range poaMap {
+ // Filter subtype
+ if subType != "" && subType != poa.SubType {
+ continue
+ }
+ var asset GeoDataAsset
+ asset.AssetName = poa.Name
+ asset.AssetType = AssetTypePoa
+ asset.SubType = poa.SubType
+ err = fillGeoDataAsset(&asset, poa.Position, poa.Radius, "", "", 0)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ assetList.GeoDataAssets = append(assetList.GeoDataAssets, asset)
+ }
+ }
+
+ // Get all Computes
+ if assetType == "" || assetType == AssetTypeCompute {
+ computeMap, err := ge.pc.GetAllCompute()
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ for _, compute := range computeMap {
+ // Filter subtype
+ if subType != "" && subType != compute.SubType {
+ continue
+ }
+ var asset GeoDataAsset
+ asset.AssetName = compute.Name
+ asset.AssetType = AssetTypeCompute
+ asset.SubType = compute.SubType
+ err = fillGeoDataAsset(&asset, compute.Position, 0, "", "", 0)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ assetList.GeoDataAssets = append(assetList.GeoDataAssets, asset)
+ }
+ }
+
+ // Format response
+ jsonResponse, err := json.Marshal(&assetList)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ // Send response
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ w.WriteHeader(http.StatusOK)
+ fmt.Fprint(w, string(jsonResponse))
+}
+
+func geGetGeoDataByName(w http.ResponseWriter, r *http.Request) {
+ // Get asset name from request path parameters
+ vars := mux.Vars(r)
+ assetName := vars["assetName"]
+ log.Debug("Get GeoData for asset: ", assetName)
+
+ // Make sure scenario is active
+ if ge.activeModel.GetScenarioName() == "" {
+ err := errors.New("No active scenario")
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusNotFound)
+ return
+ }
+
+ // Find asset in active scenario model
+ node := ge.activeModel.GetNode(assetName)
+ if node == nil {
+ err := errors.New("Asset not found in active scenario")
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusNotFound)
+ return
+ }
+
+ // Create GeoData Asset to return
+ var asset GeoDataAsset
+ asset.AssetName = assetName
+
+ // Retrieve geodata from postgis using asset name & type
+ nodeType := ge.activeModel.GetNodeType(assetName)
+ asset.SubType = nodeType
+
+ if isUe(nodeType) {
+ // Get UE information
+ asset.AssetType = AssetTypeUe
+ ue, err := ge.pc.GetUe(assetName)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusNotFound)
+ return
+ }
+ err = fillGeoDataAsset(&asset, ue.Position, 0, ue.Path, ue.PathMode, ue.PathVelocity)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ } else if isPoa(nodeType) {
+ // Get POA information
+ asset.AssetType = AssetTypePoa
+ poa, err := ge.pc.GetPoa(assetName)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusNotFound)
+ return
+ }
+ err = fillGeoDataAsset(&asset, poa.Position, poa.Radius, "", "", 0)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ } else if isCompute(nodeType) {
+ // Get Compute information
+ asset.AssetType = AssetTypeCompute
+ compute, err := ge.pc.GetCompute(assetName)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusNotFound)
+ return
+ }
+ err = fillGeoDataAsset(&asset, compute.Position, 0, "", "", 0)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ } else {
+ err := errors.New("Asset has invalid node type")
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusBadRequest)
+ return
+ }
+
+ // Format response
+ jsonResponse, err := json.Marshal(&asset)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ // Send response
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ w.WriteHeader(http.StatusOK)
+ fmt.Fprint(w, string(jsonResponse))
+}
+
+func geUpdateGeoDataByName(w http.ResponseWriter, r *http.Request) {
+ // Get asset name from request path parameters
+ vars := mux.Vars(r)
+ assetName := vars["assetName"]
+ log.Debug("Set GeoData for asset: ", assetName)
+
+ // Retrieve Geodata to set from request body
+ var geoData GeoDataAsset
+ if r.Body == nil {
+ err := errors.New("Request body is missing")
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusBadRequest)
+ return
+ }
+ decoder := json.NewDecoder(r.Body)
+ err := decoder.Decode(&geoData)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ // Validate request Geo Data
+ if geoData.AssetName != assetName {
+ err := errors.New("Request body asset name differs from path asset name")
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusBadRequest)
+ return
+ }
+ if geoData.AssetType != AssetTypeUe && geoData.AssetType != AssetTypePoa && geoData.AssetType != AssetTypeCompute {
+ err := errors.New("Missing or invalid asset type")
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusBadRequest)
+ return
+ }
+
+ // Parse Geo Data Asset
+ position, radius, path, mode, velocity, err := parseGeoDataAsset(&geoData)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ // Make sure scenario is active
+ if ge.activeModel.GetScenarioName() == "" {
+ err := errors.New("No active scenario")
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ // Create/Update asset in DB
+ nodeType := ge.activeModel.GetNodeType(assetName)
+
+ // Validate subtype
+ if (geoData.AssetType == AssetTypeUe && !isUe(nodeType)) ||
+ (geoData.AssetType == AssetTypePoa && !isPoa(nodeType)) ||
+ (geoData.AssetType == AssetTypeCompute && !isCompute(nodeType)) {
+ err := errors.New("AssetType invalid for selected asset subType")
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusBadRequest)
+ return
+ }
+
+ if geoData.AssetType == AssetTypeUe {
+ if !ge.assets[assetName].geoDataAssigned {
+ // Create UE
+ pl := (ge.activeModel.GetNode(assetName)).(*dataModel.PhysicalLocation)
+ err := ge.pc.CreateUe(pl.Id, assetName, position, path, mode, velocity)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ log.Debug("GeoData stored for UE: ", assetName)
+ ge.assets[assetName] = Asset{assetType: nodeType, geoDataAssigned: true}
+ } else {
+ // Update UE
+ err := ge.pc.UpdateUe(assetName, position, path, mode, velocity)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ }
+ } else if geoData.AssetType == AssetTypePoa {
+ if !ge.assets[assetName].geoDataAssigned {
+ // Create POA
+ nl := (ge.activeModel.GetNode(assetName)).(*dataModel.NetworkLocation)
+ err := ge.pc.CreatePoa(nl.Id, assetName, nodeType, position, radius)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ log.Debug("GeoData stored for POA: ", assetName)
+ ge.assets[assetName] = Asset{assetType: nodeType, geoDataAssigned: true}
+ } else {
+ // Update POA
+ err := ge.pc.UpdatePoa(assetName, position, radius)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ }
+ } else if geoData.AssetType == AssetTypeCompute {
+ if !ge.assets[assetName].geoDataAssigned {
+ // Create Compute
+ pl := (ge.activeModel.GetNode(assetName)).(*dataModel.PhysicalLocation)
+ err := ge.pc.CreateCompute(pl.Id, assetName, nodeType, position)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ log.Debug("GeoData stored for Compute: ", assetName)
+ ge.assets[assetName] = Asset{assetType: nodeType, geoDataAssigned: true}
+ } else {
+ // Update Compute
+ err := ge.pc.UpdateCompute(assetName, position)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ }
+ } else {
+ err := errors.New("Asset not found in active scenario")
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ // Send response
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ w.WriteHeader(http.StatusOK)
+}
diff --git a/go-apps/meep-gis-engine/server/logger.go b/go-apps/meep-gis-engine/server/logger.go
new file mode 100644
index 0000000000000000000000000000000000000000..97be3d17e274d64dfd44e3062acf6acd654b7eb6
--- /dev/null
+++ b/go-apps/meep-gis-engine/server/logger.go
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE GIS Engine REST API
+ *
+ * This API allows to control geo-spatial behavior and simulation.
**Micro-service**
[meep-gis-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-gis-engine)
**Type & Usage**
Platform runtime interface to control geo-spatial behavior and simulation
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+import (
+ "log"
+ "net/http"
+ "time"
+)
+
+func Logger(inner http.Handler, name string) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ start := time.Now()
+
+ inner.ServeHTTP(w, r)
+
+ log.Printf(
+ "%s %s %s %s",
+ r.Method,
+ r.RequestURI,
+ name,
+ time.Since(start),
+ )
+ })
+}
diff --git a/go-apps/meep-gis-engine/server/model_automation_state.go b/go-apps/meep-gis-engine/server/model_automation_state.go
new file mode 100644
index 0000000000000000000000000000000000000000..e15d19b9a5bb820d9d4a819bf57cd39eb7e19e61
--- /dev/null
+++ b/go-apps/meep-gis-engine/server/model_automation_state.go
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE GIS Engine REST API
+ *
+ * This API allows to control geo-spatial behavior and simulation.
**Micro-service**
[meep-gis-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-gis-engine)
**Type & Usage**
Platform runtime interface to control geo-spatial behavior and simulation
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type AutomationState struct {
+
+ // Automation type.
Automation loop evaluates enabled automation types once every second.
Supported Types:
**Micro-service**
[meep-gis-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-gis-engine)
**Type & Usage**
Platform runtime interface to control geo-spatial behavior and simulation
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// List of automation states
+type AutomationStateList struct {
+ States []AutomationState `json:"states,omitempty"`
+}
diff --git a/go-apps/meep-gis-engine/server/model_geo_data.go b/go-apps/meep-gis-engine/server/model_geo_data.go
new file mode 100644
index 0000000000000000000000000000000000000000..c407a65a4f2cc40664feef57bf74cf9f7f6bddb2
--- /dev/null
+++ b/go-apps/meep-gis-engine/server/model_geo_data.go
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE GIS Engine REST API
+ *
+ * This API allows to control geo-spatial behavior and simulation.
**Micro-service**
[meep-gis-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-gis-engine)
**Type & Usage**
Platform runtime interface to control geo-spatial behavior and simulation
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// Geographic data
+type GeoData struct {
+ Location *Point `json:"location,omitempty"`
+
+ // Optional - Radius (in meters) around the location
+ Radius float32 `json:"radius,omitempty"`
+
+ Path *LineString `json:"path,omitempty"`
+
+ // End-of-Path mode:
**Micro-service**
[meep-gis-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-gis-engine)
**Type & Usage**
Platform runtime interface to control geo-spatial behavior and simulation
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// List of geospatial data
+type GeoDataAsset struct {
+ Location *Point `json:"location,omitempty"`
+
+ // Optional - Radius (in meters) around the location
+ Radius float32 `json:"radius,omitempty"`
+
+ Path *LineString `json:"path,omitempty"`
+
+ // End-of-Path mode:
**Micro-service**
[meep-gis-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-gis-engine)
**Type & Usage**
Platform runtime interface to control geo-spatial behavior and simulation
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// List of geospatial assets data
+type GeoDataAssetList struct {
+ GeoDataAssets []GeoDataAsset `json:"geoDataAssets,omitempty"`
+}
diff --git a/go-apps/meep-gis-engine/server/model_line_string.go b/go-apps/meep-gis-engine/server/model_line_string.go
new file mode 100644
index 0000000000000000000000000000000000000000..1cd71e608f07e50d2fab6aefc3885811185bf12e
--- /dev/null
+++ b/go-apps/meep-gis-engine/server/model_line_string.go
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE GIS Engine REST API
+ *
+ * This API allows to control geo-spatial behavior and simulation.
**Micro-service**
[meep-gis-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-gis-engine)
**Type & Usage**
Platform runtime interface to control geo-spatial behavior and simulation
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// An array of two or more positions in coordinate space (GeoJSON); a position is an array of two numbers
+type LineString struct {
+
+ // Must be LineString
+ Type_ string `json:"type"`
+
+ // For a LineString, coordinates is an array of two or more positions; a position is an array of two decimal numbers (longitude and latitude precisely in that order)
+ Coordinates [][]float32 `json:"coordinates,omitempty"`
+}
diff --git a/go-apps/meep-gis-engine/server/model_point.go b/go-apps/meep-gis-engine/server/model_point.go
new file mode 100644
index 0000000000000000000000000000000000000000..2c43a201295aeec361ded6080e7c6a31d91626e9
--- /dev/null
+++ b/go-apps/meep-gis-engine/server/model_point.go
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE GIS Engine REST API
+ *
+ * This API allows to control geo-spatial behavior and simulation.
**Micro-service**
[meep-gis-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-gis-engine)
**Type & Usage**
Platform runtime interface to control geo-spatial behavior and simulation
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// A single position in coordinate space (GeoJSON); a position is an array of two numbers
+type Point struct {
+
+ // Must be Point
+ Type_ string `json:"type"`
+
+ // For a Point, coordinates MUST be an array of two decimal numbers; longitude and latitude precisely in that order
+ Coordinates []float32 `json:"coordinates,omitempty"`
+}
diff --git a/go-apps/meep-gis-engine/server/routers.go b/go-apps/meep-gis-engine/server/routers.go
new file mode 100644
index 0000000000000000000000000000000000000000..16099e171ac27e80ff863ec51454b59dfb2839c1
--- /dev/null
+++ b/go-apps/meep-gis-engine/server/routers.go
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE GIS Engine REST API
+ *
+ * This API allows to control geo-spatial behavior and simulation.
**Micro-service**
[meep-gis-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-gis-engine)
**Type & Usage**
Platform runtime interface to control geo-spatial behavior and simulation
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+import (
+ "fmt"
+ "net/http"
+ "strings"
+
+ "github.com/gorilla/mux"
+)
+
+type Route struct {
+ Name string
+ Method string
+ Pattern string
+ HandlerFunc http.HandlerFunc
+}
+
+type Routes []Route
+
+func NewRouter() *mux.Router {
+ router := mux.NewRouter().StrictSlash(true)
+ for _, route := range routes {
+ var handler http.Handler = route.HandlerFunc
+ handler = Logger(handler, route.Name)
+
+ router.
+ Methods(route.Method).
+ Path(route.Pattern).
+ Name(route.Name).
+ Handler(handler)
+ }
+
+ return router
+}
+
+func Index(w http.ResponseWriter, r *http.Request) {
+ fmt.Fprintf(w, "Hello World!")
+}
+
+var routes = Routes{
+ Route{
+ "Index",
+ "GET",
+ "/gis/v1/",
+ Index,
+ },
+
+ Route{
+ "GetAutomationState",
+ strings.ToUpper("Get"),
+ "/gis/v1/automation",
+ GetAutomationState,
+ },
+
+ Route{
+ "GetAutomationStateByName",
+ strings.ToUpper("Get"),
+ "/gis/v1/automation/{type}",
+ GetAutomationStateByName,
+ },
+
+ Route{
+ "SetAutomationStateByName",
+ strings.ToUpper("Post"),
+ "/gis/v1/automation/{type}",
+ SetAutomationStateByName,
+ },
+
+ Route{
+ "DeleteGeoDataByName",
+ strings.ToUpper("Delete"),
+ "/gis/v1/geodata/{assetName}",
+ DeleteGeoDataByName,
+ },
+
+ Route{
+ "GetAssetData",
+ strings.ToUpper("Get"),
+ "/gis/v1/geodata",
+ GetAssetData,
+ },
+
+ Route{
+ "GetGeoDataByName",
+ strings.ToUpper("Get"),
+ "/gis/v1/geodata/{assetName}",
+ GetGeoDataByName,
+ },
+
+ Route{
+ "UpdateGeoDataByName",
+ strings.ToUpper("Post"),
+ "/gis/v1/geodata/{assetName}",
+ UpdateGeoDataByName,
+ },
+}
diff --git a/go-apps/meep-loc-serv/api/swagger.yaml b/go-apps/meep-loc-serv/api/swagger.yaml
index 2e7da1b0b3576cbb464fe4330af2eedc62830f15..638f4fda83fc9ea649edb24a06350db6ca2bc34d 100644
--- a/go-apps/meep-loc-serv/api/swagger.yaml
+++ b/go-apps/meep-loc-serv/api/swagger.yaml
@@ -8,7 +8,7 @@ info:
\
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)\
\
**Type & Usage**
Edge Service used by edge applications that want to get\
\ information about Users (UE) and Zone locations
**Details**
API details\
- \ available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`"
+ \ available at _your-AdvantEDGE-ip-address/api_"
version: "1.1.1"
title: "AdvantEDGE Location Service REST API"
contact:
@@ -17,14 +17,11 @@ info:
license:
name: "Apache 2.0"
url: "https://github.com/InterDigitalInc/AdvantEDGE/blob/master/LICENSE"
-host: "127.0.0.1:8081"
-basePath: "/etsi-013/location/v1"
+basePath: "/location/v1"
tags:
- name: "zones"
- name: "users"
- name: "subscriptions"
-schemes:
-- "http"
consumes:
- "application/json"
produces:
diff --git a/go-apps/meep-loc-serv/go.mod b/go-apps/meep-loc-serv/go.mod
index 1b068c438018fef69937421a15474b2026b624d9..9c4018df7e82996809ba1ad4e57d0438094e4b0b 100644
--- a/go-apps/meep-loc-serv/go.mod
+++ b/go-apps/meep-loc-serv/go.mod
@@ -3,9 +3,15 @@ module github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-loc-serv
go 1.12
require (
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-http-logger v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-loc-serv-notification-client 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-mq v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-postgis v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis v0.0.0
github.com/gorilla/handlers v1.4.0
github.com/gorilla/mux v1.7.3
@@ -14,9 +20,14 @@ require (
)
replace (
- github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model => ../../go-packages/meep-ctrl-engine-model
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr => ../../go-packages/meep-data-key-mgr
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model => ../../go-packages/meep-data-model
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-http-logger => ../../go-packages/meep-http-logger
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-loc-serv-notification-client => ../../go-packages/meep-loc-serv-notification-client
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-mq => ../../go-packages/meep-mq
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-postgis => ../../go-packages/meep-postgis
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis => ../../go-packages/meep-redis
)
diff --git a/go-apps/meep-loc-serv/go.sum b/go-apps/meep-loc-serv/go.sum
index 502ddc394ad15abd8e8d7f9b8f3a6dab26f1fdaf..c9afe12ffc498b4a145ccaca4e17254a9608e1cb 100644
--- a/go-apps/meep-loc-serv/go.sum
+++ b/go-apps/meep-loc-serv/go.sum
@@ -1,19 +1,14 @@
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db h1:Zkf5kwhxdW0xV7WM/crqIcOP5LCFGnAmumWSFAewJ74=
github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db/go.mod h1:RU+6d0CNIRSp6yo1mXLIIrnFa/3LHhvcDVLVJyovptM=
github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351 h1:1u1XrfCBnY+GijnyU6O1k4odp5TnqZQTsp5v7+n/E4Y=
github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351/go.mod h1:HxwfbuElTuGf+/uKZfjJrCnv0BmmpkPJDI7gBwj1KkM=
github.com/RyanCarrier/dijkstra v0.0.0-20190726134004-b51cadb5ae52 h1:trnwuu/Q8T59kgRjXcSDBODnyZP9wes+bnLn0lx4PgM=
github.com/RyanCarrier/dijkstra v0.0.0-20190726134004-b51cadb5ae52/go.mod h1:DdR6ymcLl8+sN/XOVNjnYO1NDYfgHskGjreZUDuQCTY=
-github.com/RyanCarrier/dijkstra-1 v0.0.0-20170512020943-0e5801a26345 h1:fgSpoKViTSqRb4hjDNj10ig5wUvO0CayCzFdLf6fuRM=
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/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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/go-redis/redis v6.15.2+incompatible h1:9SpNVG76gr6InJGxoZ6IuuxaCOQwDAhzyXg+Bs+0Sb4=
github.com/go-redis/redis v6.15.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
@@ -23,23 +18,21 @@ github.com/gorilla/handlers v1.4.0 h1:XulKRWSQK5uChr4pEgSE4Tc/OcmnU9GJuSwdog/tZs
github.com/gorilla/handlers v1.4.0/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw=
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+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=
+github.com/lib/pq v1.5.2 h1:yTSXVswvWUOQ3k1sd7vJfDrbSl8lKuscqFJRqjC0ifw=
+github.com/lib/pq v1.5.2/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/mattomatic/dijkstra v0.0.0-20130617153013-6f6d134eb237/go.mod h1:UOnLAUmVG5paym8pD3C4B9BQylUDC2vXFJJpT7JrlEA=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo=
github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME=
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -50,23 +43,17 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a h1:tImsplftrFpALCYumobsd0K86vlAs/eXGFms2txfJfA=
golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/go-apps/meep-loc-serv/sbi/loc-serv-sbi.go b/go-apps/meep-loc-serv/sbi/loc-serv-sbi.go
index 04ae675a4bec612c75ffcfa7823b71d42a4c142f..b4fc67a1839fbb1faeb6c3358baaca21c216dd87 100755
--- a/go-apps/meep-loc-serv/sbi/loc-serv-sbi.go
+++ b/go-apps/meep-loc-serv/sbi/loc-serv-sbi.go
@@ -17,43 +17,94 @@
package sbi
import (
+ "encoding/json"
+ "errors"
"strings"
+ dataModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model"
log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
mod "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model"
+ mq "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq"
+ postgis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-postgis"
)
-const module string = "loc-serv-sbi"
-const redisAddr string = "meep-redis-master:6379"
+const moduleName string = "meep-loc-serv-sbi"
+const geModuleName string = "meep-gis-engine"
+const postgisUser string = "postgres"
+const postgisPwd string = "pwd"
+
+type SbiCfg struct {
+ SandboxName string
+ RedisAddr string
+ PostgisHost string
+ PostgisPort string
+ UserInfoCb func(string, string, string, *float32, *float32)
+ ZoneInfoCb func(string, int, int, int)
+ ApInfoCb func(string, string, string, string, int, *float32, *float32)
+ ScenarioNameCb func(string)
+ CleanUpCb func()
+}
type LocServSbi struct {
+ sandboxName string
+ mqLocal *mq.MsgQueue
+ handlerId int
activeModel *mod.Model
- updateUserInfoCB func(string, string, string)
+ pc *postgis.Connector
+ updateUserInfoCB func(string, string, string, *float32, *float32)
updateZoneInfoCB func(string, int, int, int)
- updateAccessPointInfoCB func(string, string, string, string, int)
+ updateAccessPointInfoCB func(string, string, string, string, int, *float32, *float32)
+ updateScenarioNameCB func(string)
cleanUpCB func()
}
var sbi *LocServSbi
// Init - Location Service SBI initialization
-func Init(updateUserInfo func(string, string, string), updateZoneInfo func(string, int, int, int),
- updateAccessPointInfo func(string, string, string, string, int), cleanUp func()) (err error) {
+func Init(cfg SbiCfg) (err error) {
// Create new SBI instance
sbi = new(LocServSbi)
+ sbi.sandboxName = cfg.SandboxName
+ sbi.updateUserInfoCB = cfg.UserInfoCb
+ sbi.updateZoneInfoCB = cfg.ZoneInfoCb
+ sbi.updateAccessPointInfoCB = cfg.ApInfoCb
+ sbi.updateScenarioNameCB = cfg.ScenarioNameCb
+ sbi.cleanUpCB = cfg.CleanUpCb
+
+ // Create message queue
+ sbi.mqLocal, err = mq.NewMsgQueue(mq.GetLocalName(sbi.sandboxName), moduleName, sbi.sandboxName, cfg.RedisAddr)
+ if err != nil {
+ log.Error("Failed to create Message Queue with error: ", err)
+ return err
+ }
+ log.Info("Message Queue created")
- // Create new Model
- sbi.activeModel, err = mod.NewModel(redisAddr, module, "activeScenario")
+ // Create new active scenario model
+ modelCfg := mod.ModelCfg{
+ Name: "activeScenario",
+ Namespace: sbi.sandboxName,
+ Module: moduleName,
+ UpdateCb: nil,
+ DbAddr: cfg.RedisAddr,
+ }
+ sbi.activeModel, err = mod.NewModel(modelCfg)
if err != nil {
log.Error("Failed to create model: ", err.Error())
return err
}
+ log.Info("Active Scenario Model created")
+
+ // Connect to Postgis DB
+ sbi.pc, err = postgis.NewConnector(geModuleName, sbi.sandboxName, postgisUser, postgisPwd, cfg.PostgisHost, cfg.PostgisPort)
+ if err != nil {
+ log.Error("Failed to create postgis connector with error: ", err.Error())
+ return err
+ }
+ log.Info("Postgis Connector created")
- sbi.updateUserInfoCB = updateUserInfo
- sbi.updateZoneInfoCB = updateZoneInfo
- sbi.updateAccessPointInfoCB = updateAccessPointInfo
- sbi.cleanUpCB = cleanUp
+ // Initialize service
+ processActiveScenarioUpdate()
return nil
}
@@ -61,72 +112,116 @@ func Init(updateUserInfo func(string, string, string), updateZoneInfo func(strin
// Run - MEEP Location Service execution
func Run() (err error) {
- // Listen for Model updates
- err = sbi.activeModel.Listen(eventHandler)
+ // Register Message Queue handler
+ handler := mq.MsgHandler{Handler: msgHandler, UserData: nil}
+ sbi.handlerId, err = sbi.mqLocal.RegisterHandler(handler)
if err != nil {
- log.Error("Failed to listen for model updates: ", err.Error())
+ log.Error("Failed to register local Msg Queue listener: ", err.Error())
return err
}
+ log.Info("Registered local Msg Queue listener")
+
return nil
}
-func eventHandler(channel string, payload string) {
- // Handle Message according to Rx Channel
- switch channel {
-
- // MEEP Ctrl Engine active scenario update Channel
- case mod.ActiveScenarioEvents:
- log.Debug("Event received on channel: ", mod.ActiveScenarioEvents, " payload: ", payload)
+// Message Queue handler
+func msgHandler(msg *mq.Msg, userData interface{}) {
+ switch msg.Message {
+ case mq.MsgScenarioActivate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
processActiveScenarioUpdate()
+ case mq.MsgScenarioUpdate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ processActiveScenarioUpdate()
+ case mq.MsgScenarioTerminate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ processActiveScenarioTerminate()
+ case mq.MsgGeUpdate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ processGisEngineUpdate(msg.Payload)
default:
- log.Warn("Unsupported channel", " payload: ", payload)
+ log.Trace("Ignoring unsupported message: ", mq.PrintMsg(msg))
}
}
+func processActiveScenarioTerminate() {
+ log.Debug("processActiveScenarioTerminate")
+
+ // Sync with active scenario store
+ sbi.activeModel.UpdateScenario()
+
+ sbi.cleanUpCB()
+}
+
func processActiveScenarioUpdate() {
log.Debug("processActiveScenarioUpdate")
+ previousUeNameList := sbi.activeModel.GetNodeNames("UE")
+
+ // Sync with active scenario store
+ sbi.activeModel.UpdateScenario()
+
+ scenarioName := sbi.activeModel.GetScenarioName()
+ sbi.updateScenarioNameCB(scenarioName)
+
uePerNetLocMap := make(map[string]int)
uePerZoneMap := make(map[string]int)
poaPerZoneMap := make(map[string]int)
+ // Get all UE & POA positions
+ ueMap, _ := sbi.pc.GetAllUe()
+ poaMap, _ := sbi.pc.GetAllPoa()
+
// Update UE info
ueNameList := sbi.activeModel.GetNodeNames("UE")
for _, name := range ueNameList {
- ctx := sbi.activeModel.GetNodeContext(name)
- if ctx == nil {
- log.Error("Error getting context for UE: " + name)
+ zone, netLoc, err := getNetworkLocation(name)
+ if err != nil {
+ log.Error(err.Error())
continue
}
- nodeCtx, ok := ctx.(*mod.NodeContext)
- if !ok {
- log.Error("Error casting context for UE: " + name)
- continue
+
+ var longitude *float32
+ var latitude *float32
+ if ue, found := ueMap[name]; found {
+ longitude, latitude = parsePosition(ue.Position)
}
- zone := nodeCtx.Parents[mod.Zone]
- netLoc := nodeCtx.Parents[mod.NetLoc]
- sbi.updateUserInfoCB(name, zone, netLoc)
+ sbi.updateUserInfoCB(name, zone, netLoc, longitude, latitude)
uePerZoneMap[zone]++
uePerNetLocMap[netLoc]++
}
- // Update POA info
- poaNameList := sbi.activeModel.GetNodeNames("POA")
+ // Update UEs that were removed
+ for _, oldUe := range previousUeNameList {
+ found := false
+ for _, newUe := range ueNameList {
+ if newUe == oldUe {
+ found = true
+ break
+ }
+ }
+ if !found {
+ sbi.updateUserInfoCB(oldUe, "", "", nil, nil)
+ log.Info("Ue removed : ", oldUe)
+ }
+ }
+
+ // Update POA Cellular info
+ poaNameList := sbi.activeModel.GetNodeNames(mod.NodeTypePoaCell)
for _, name := range poaNameList {
- ctx := sbi.activeModel.GetNodeContext(name)
- if ctx == nil {
- log.Error("Error getting context for POA: " + name)
+ zone, netLoc, err := getNetworkLocation(name)
+ if err != nil {
+ log.Error(err.Error())
continue
}
- nodeCtx, ok := ctx.(*mod.NodeContext)
- if !ok {
- log.Error("Error casting context for POA: " + name)
- continue
+
+ var longitude *float32
+ var latitude *float32
+ if poa, found := poaMap[name]; found {
+ longitude, latitude = parsePosition(poa.Position)
}
- zone := nodeCtx.Parents[mod.Zone]
- netLoc := nodeCtx.Parents[mod.NetLoc]
- sbi.updateAccessPointInfoCB(zone, netLoc, "UNKNOWN", "SERVICEABLE", uePerNetLocMap[netLoc])
+ sbi.updateAccessPointInfoCB(zone, netLoc, "UNKNOWN", "SERVICEABLE", uePerNetLocMap[netLoc], longitude, latitude)
poaPerZoneMap[zone]++
}
@@ -138,3 +233,141 @@ func processActiveScenarioUpdate() {
}
}
}
+
+func processGisEngineUpdate(assetMap map[string]string) {
+ for assetName, assetType := range assetMap {
+ if assetType == postgis.TypeUe {
+ if assetName == postgis.AllAssets {
+ updateAllUserPosition()
+ } else {
+ updateUserPosition(assetName)
+ }
+ } else if assetType == postgis.TypePoa {
+ if assetName == postgis.AllAssets {
+ updateAllAccessPointPosition()
+ } else {
+ updateAccessPointPosition(assetName)
+ }
+ }
+ }
+}
+
+func getNetworkLocation(name string) (zone string, netLoc string, err error) {
+ ctx := sbi.activeModel.GetNodeContext(name)
+ if ctx == nil {
+ err = errors.New("Error getting context for: " + name)
+ return
+ }
+ nodeCtx, ok := ctx.(*mod.NodeContext)
+ if !ok {
+ err = errors.New("Error casting context for: " + name)
+ return
+ }
+ zone = nodeCtx.Parents[mod.Zone]
+ netLoc = nodeCtx.Parents[mod.NetLoc]
+ return zone, netLoc, nil
+}
+
+func parsePosition(position string) (longitude *float32, latitude *float32) {
+ var point dataModel.Point
+ err := json.Unmarshal([]byte(position), &point)
+ if err != nil {
+ return nil, nil
+ }
+ return &point.Coordinates[0], &point.Coordinates[1]
+}
+
+func updateUserPosition(name string) {
+ // Get network location
+ zone, netLoc, err := getNetworkLocation(name)
+ if err != nil {
+ log.Error(err.Error())
+ return
+ }
+
+ // Get position
+ var longitude *float32
+ var latitude *float32
+ ue, err := sbi.pc.GetUe(name)
+ if err == nil {
+ longitude, latitude = parsePosition(ue.Position)
+ }
+
+ // Update info
+ sbi.updateUserInfoCB(name, zone, netLoc, longitude, latitude)
+}
+
+func updateAllUserPosition() {
+ // Get all positions
+ ueMap, _ := sbi.pc.GetAllUe()
+
+ // Update info
+ ueNameList := sbi.activeModel.GetNodeNames("UE")
+ for _, name := range ueNameList {
+ // Get network location
+ zone, netLoc, err := getNetworkLocation(name)
+ if err != nil {
+ log.Error(err.Error())
+ return
+ }
+
+ // Get position
+ var longitude *float32
+ var latitude *float32
+ if ue, found := ueMap[name]; found {
+ longitude, latitude = parsePosition(ue.Position)
+ }
+
+ sbi.updateUserInfoCB(name, zone, netLoc, longitude, latitude)
+ }
+}
+
+func updateAccessPointPosition(name string) {
+ // Get network location
+ zone, netLoc, err := getNetworkLocation(name)
+ if err != nil {
+ log.Error(err.Error())
+ return
+ }
+
+ // Get position
+ var longitude *float32
+ var latitude *float32
+ poa, err := sbi.pc.GetPoa(name)
+ if err == nil {
+ longitude, latitude = parsePosition(poa.Position)
+ }
+
+ // Update info
+ sbi.updateAccessPointInfoCB(zone, netLoc, "UNKNOWN", "", -1, longitude, latitude)
+}
+
+func updateAllAccessPointPosition() {
+ // Get all positions
+ poaMap, _ := sbi.pc.GetAllPoa()
+
+ // Update info
+ poaNameList := sbi.activeModel.GetNodeNames(mod.NodeTypePoaCell)
+ for _, name := range poaNameList {
+ // Get network location
+ zone, netLoc, err := getNetworkLocation(name)
+ if err != nil {
+ log.Error(err.Error())
+ return
+ }
+
+ // Get position
+ var longitude *float32
+ var latitude *float32
+ if poa, found := poaMap[name]; found {
+ longitude, latitude = parsePosition(poa.Position)
+ }
+
+ sbi.updateAccessPointInfoCB(zone, netLoc, "UNKNOWN", "", -1, longitude, latitude)
+ }
+}
+
+func Stop() (err error) {
+ sbi.mqLocal.UnregisterHandler(sbi.handlerId)
+ return nil
+}
diff --git a/go-apps/meep-loc-serv/server/README.md b/go-apps/meep-loc-serv/server/README.md
index 5fa80481ff81d6601f8645a48921f81b1cfcebda..729caa81243ae5f768667a17682ef2ac08f5ff20 100644
--- a/go-apps/meep-loc-serv/server/README.md
+++ b/go-apps/meep-loc-serv/server/README.md
@@ -1,6 +1,6 @@
# Go API Server for server
-Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
## Overview
This server was generated by the [swagger-codegen]
@@ -13,7 +13,7 @@ To see how to make this your own, look here:
[README](https://github.com/swagger-api/swagger-codegen/blob/master/README.md)
- API version: 1.1.1
-- Build date: 2020-03-03T14:26:39.074-05:00
+- Build date: 2020-06-28T22:53:38.793-04:00
### Running the server
diff --git a/go-apps/meep-loc-serv/server/api_subscriptions.go b/go-apps/meep-loc-serv/server/api_subscriptions.go
index b25e8dc5267f5b98a54e1bde3c8a6b0eade26ca7..54abd1c0ee75cea1042ba8d8fbdbf2e02b4a5047 100644
--- a/go-apps/meep-loc-serv/server/api_subscriptions.go
+++ b/go-apps/meep-loc-serv/server/api_subscriptions.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/api_users.go b/go-apps/meep-loc-serv/server/api_users.go
index 35c1bd69337c42c4d30cc818e7c8f0b92dc0efe8..ef077fa35c97bdf4d5ede7a6b4c1ec410e2e2fa6 100644
--- a/go-apps/meep-loc-serv/server/api_users.go
+++ b/go-apps/meep-loc-serv/server/api_users.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/api_zones.go b/go-apps/meep-loc-serv/server/api_zones.go
index 335d709744ef283fcff64d2a6f97609f64363097..d89c6d95c0d600d3d0f01828d79b07717f28c840 100644
--- a/go-apps/meep-loc-serv/server/api_zones.go
+++ b/go-apps/meep-loc-serv/server/api_zones.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/loc-serv.go b/go-apps/meep-loc-serv/server/loc-serv.go
index 7f48becfc04eb882da9cec212f17d2e0f6edfd83..be09e23e60164a306dd5ad0df6fef65ee2e574e5 100644
--- a/go-apps/meep-loc-serv/server/loc-serv.go
+++ b/go-apps/meep-loc-serv/server/loc-serv.go
@@ -23,11 +23,14 @@ import (
"fmt"
"net/http"
"net/url"
+ "os"
"strconv"
"strings"
"time"
sbi "github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-loc-serv/sbi"
+ dkm "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr"
+ httpLog "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-http-logger"
clientNotifOMA "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-loc-serv-notification-client"
log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
redis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis"
@@ -35,8 +38,9 @@ import (
"github.com/gorilla/mux"
)
-const basepathURL = "http://meep-loc-serv/etsi-013/location/v1/"
-const moduleLocServ string = "loc-serv"
+const LocServBasePath = "/location/v1/"
+const locServKey string = "loc-serv:"
+const logModuleLocServ string = "meep-loc-serv"
const typeZone = "zone"
const typeAccessPoint = "accessPoint"
@@ -48,6 +52,17 @@ const typeZoneStatusSubscription = "zonestatus"
const USER_TRACKING_AND_ZONAL_TRAFFIC = 1
const ZONE_STATUS = 2
+type UeUserData struct {
+ queryZoneId string
+ queryApId string
+ userList *UserList
+}
+
+type ApUserData struct {
+ queryInterestRealm string
+ apList *AccessPointList
+}
+
var nextZonalSubscriptionIdAvailable int
var nextUserSubscriptionIdAvailable int
var nextZoneStatusSubscriptionIdAvailable int
@@ -73,15 +88,48 @@ type ZoneStatusCheck struct {
NbUsersInAPThreshold int
}
-var LOC_SERV_DB = 5
+var LOC_SERV_DB = 0
+var currentStoreName = ""
-const redisAddr string = "meep-redis-master:6379"
+var redisAddr string = "meep-redis-master.default.svc.cluster.local:6379"
+var influxAddr string = "http://meep-influxdb.default.svc.cluster.local:8086"
+var postgisHost string = "meep-postgis.default.svc.cluster.local"
+var postgisPort string = "5432"
var rc *redis.Connector
+var hostUrl *url.URL
+var sandboxName string
+var basePath string
+var baseKey string
// Init - Location Service initialization
func Init() (err error) {
+ sandboxNameEnv := strings.TrimSpace(os.Getenv("MEEP_SANDBOX_NAME"))
+ if sandboxNameEnv != "" {
+ sandboxName = sandboxNameEnv
+ }
+ if sandboxName == "" {
+ err = errors.New("MEEP_SANDBOX_NAME env variable not set")
+ log.Error(err.Error())
+ return err
+ }
+ log.Info("MEEP_SANDBOX_NAME: ", sandboxName)
+
+ // Retrieve Host URL from environment variable
+ hostUrl, err = url.Parse(strings.TrimSpace(os.Getenv("MEEP_HOST_URL")))
+ if err != nil {
+ hostUrl = new(url.URL)
+ }
+ log.Info("MEEP_HOST_URL: ", hostUrl)
+
+ // Set base path
+ basePath = "/" + sandboxName + LocServBasePath
+
+ // Get base storage key
+ baseKey = dkm.GetKeyRoot(sandboxName) + locServKey
+
+ // Connect to Redis DB
rc, err = redis.NewConnector(redisAddr, LOC_SERV_DB)
if err != nil {
log.Error("Failed connection to Redis DB. Error: ", err)
@@ -93,8 +141,26 @@ func Init() (err error) {
zonalTrafficReInit()
zoneStatusReInit()
- //sbi is the sole responsible of updating the userInfo, zoneInfo and apInfo structures
- return sbi.Init(updateUserInfo, updateZoneInfo, updateAccessPointInfo, cleanUp)
+ // Initialize SBI
+ sbiCfg := sbi.SbiCfg{
+ SandboxName: sandboxName,
+ RedisAddr: redisAddr,
+ PostgisHost: postgisHost,
+ PostgisPort: postgisPort,
+ UserInfoCb: updateUserInfo,
+ ZoneInfoCb: updateZoneInfo,
+ ApInfoCb: updateAccessPointInfo,
+ ScenarioNameCb: updateStoreName,
+ CleanUpCb: cleanUp,
+ }
+ err = sbi.Init(sbiCfg)
+ if err != nil {
+ log.Error("Failed initialize SBI. Error: ", err)
+ return err
+ }
+ log.Info("SBI Initialized")
+
+ return nil
}
// Run - Start Location Service
@@ -102,6 +168,11 @@ func Run() (err error) {
return sbi.Run()
}
+// Stop - Stop RNIS
+func Stop() (err error) {
+ return sbi.Stop()
+}
+
func createClient(notifyPath string) (*clientNotifOMA.APIClient, error) {
// Create & store client for App REST API
subsAppClientCfg := clientNotifOMA.NewConfiguration()
@@ -248,7 +319,7 @@ func checkNotificationRegisteredZoneStatus(zoneId string, apId string, nbUsersIn
if zoneWarning || apWarning {
subsIdStr := strconv.Itoa(subsId)
- jsonInfo, _ := rc.JSONGetEntry(moduleLocServ+":"+typeZoneStatusSubscription+":"+subsIdStr, ".")
+ jsonInfo, _ := rc.JSONGetEntry(baseKey+typeZoneStatusSubscription+":"+subsIdStr, ".")
if jsonInfo == "" {
return
}
@@ -281,11 +352,10 @@ func checkNotificationRegisteredUsers(oldZoneId string, newZoneId string, oldApI
//check all that applies
for subsId, value := range userSubscriptionMap {
-
if value == userId {
subsIdStr := strconv.Itoa(subsId)
- jsonInfo, _ := rc.JSONGetEntry(moduleLocServ+":"+typeUserSubscription+":"+subsIdStr, ".")
+ jsonInfo, _ := rc.JSONGetEntry(baseKey+typeUserSubscription+":"+subsIdStr, ".")
if jsonInfo == "" {
return
}
@@ -299,7 +369,7 @@ func checkNotificationRegisteredUsers(oldZoneId string, newZoneId string, oldApI
zonal.CallbackData = subscription.ClientCorrelator
if newZoneId != oldZoneId {
- if userSubscriptionEnteringMap[subsId] != "" {
+ if userSubscriptionEnteringMap[subsId] != "" && newZoneId != "" {
zonal.ZoneId = newZoneId
zonal.CurrentAccessPointId = newApId
event := new(clientNotifOMA.UserEventType)
@@ -338,31 +408,49 @@ func checkNotificationRegisteredUsers(oldZoneId string, newZoneId string, oldApI
}
func sendNotification(notifyUrl string, ctx context.Context, subscriptionId string, notification clientNotifOMA.TrackingNotification) {
+ startTime := time.Now()
+
client, err := createClient(notifyUrl)
if err != nil {
log.Error(err)
return
}
- _, err = client.NotificationsApi.PostTrackingNotification(ctx, subscriptionId, notification)
+ jsonNotif, err := json.Marshal(notification)
+ if err != nil {
+ log.Error(err.Error())
+ }
+
+ resp, err := client.NotificationsApi.PostTrackingNotification(ctx, subscriptionId, notification)
+ _ = httpLog.LogTx(notifyUrl, "POST", string(jsonNotif), resp, startTime)
if err != nil {
log.Error(err)
return
}
+ defer resp.Body.Close()
}
func sendStatusNotification(notifyUrl string, ctx context.Context, subscriptionId string, notification clientNotifOMA.ZoneStatusNotification) {
+ startTime := time.Now()
+
client, err := createClient(notifyUrl)
if err != nil {
log.Error(err)
return
}
- _, err = client.NotificationsApi.PostZoneStatusNotification(ctx, subscriptionId, notification)
+ jsonNotif, err := json.Marshal(notification)
+ if err != nil {
+ log.Error(err.Error())
+ }
+
+ resp, err := client.NotificationsApi.PostZoneStatusNotification(ctx, subscriptionId, notification)
+ _ = httpLog.LogTx(notifyUrl, "POST", string(jsonNotif), resp, startTime)
if err != nil {
log.Error(err)
return
}
+ defer resp.Body.Close()
}
func checkNotificationRegisteredZones(oldZoneId string, newZoneId string, oldApId string, newApId string, userId string) {
@@ -377,7 +465,7 @@ func checkNotificationRegisteredZones(oldZoneId string, newZoneId string, oldApI
if zonalSubscriptionEnteringMap[subsId] != "" {
subsIdStr := strconv.Itoa(subsId)
- jsonInfo, _ := rc.JSONGetEntry(moduleLocServ+":"+typeZonalSubscription+":"+subsIdStr, ".")
+ jsonInfo, _ := rc.JSONGetEntry(baseKey+typeZonalSubscription+":"+subsIdStr, ".")
if jsonInfo != "" {
subscription := convertJsonToZonalSubscription(jsonInfo)
@@ -399,7 +487,7 @@ func checkNotificationRegisteredZones(oldZoneId string, newZoneId string, oldApI
if zonalSubscriptionTransferringMap[subsId] != "" {
subsIdStr := strconv.Itoa(subsId)
- jsonInfo, _ := rc.JSONGetEntry(moduleLocServ+":"+typeZonalSubscription+":"+subsIdStr, ".")
+ jsonInfo, _ := rc.JSONGetEntry(baseKey+typeZonalSubscription+":"+subsIdStr, ".")
if jsonInfo != "" {
subscription := convertJsonToZonalSubscription(jsonInfo)
@@ -424,7 +512,7 @@ func checkNotificationRegisteredZones(oldZoneId string, newZoneId string, oldApI
if zonalSubscriptionLeavingMap[subsId] != "" {
subsIdStr := strconv.Itoa(subsId)
- jsonInfo, _ := rc.JSONGetEntry(moduleLocServ+":"+typeZonalSubscription+":"+subsIdStr, ".")
+ jsonInfo, _ := rc.JSONGetEntry(baseKey+typeZonalSubscription+":"+subsIdStr, ".")
if jsonInfo != "" {
subscription := convertJsonToZonalSubscription(jsonInfo)
@@ -449,20 +537,31 @@ func checkNotificationRegisteredZones(oldZoneId string, newZoneId string, oldApI
func usersGet(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ var userData UeUserData
+ // Retrieve query parameters
u, _ := url.Parse(r.URL.String())
log.Info("url: ", u.RequestURI())
q := u.Query()
- zoneIdVar := q.Get("zoneId")
- accessPointIdVar := q.Get("accessPointId")
+ userData.queryZoneId = q.Get("zoneId")
+ userData.queryApId = q.Get("accessPointId")
+ // Get user list from DB
var response ResponseUserList
var userList UserList
+ userList.ResourceURL = hostUrl.String() + basePath + "users"
response.UserList = &userList
+ userData.userList = &userList
- _ = rc.JSONGetList(zoneIdVar, accessPointIdVar, moduleLocServ+":"+typeUser+":", populateUserList, &userList)
- userList.ResourceURL = basepathURL + "users"
+ keyName := baseKey + typeUser + ":*"
+ err := rc.ForEachJSONEntry(keyName, populateUserList, &userData)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ // Send response
jsonResponse, err := json.Marshal(response)
if err != nil {
log.Error(err.Error())
@@ -473,35 +572,35 @@ func usersGet(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, string(jsonResponse))
}
-func populateUserList(key string, jsonInfo string, zoneId string, apId string, userData interface{}) error {
+func populateUserList(key string, jsonInfo string, userData interface{}) error {
+ // Get query params & userlist from user data
+ data := userData.(*UeUserData)
+ if data == nil || data.userList == nil {
+ return errors.New("userList not found in userData")
+ }
- userList := userData.(*UserList)
+ // Retrieve user info from DB
var userInfo UserInfo
-
- // Format response
err := json.Unmarshal([]byte(jsonInfo), &userInfo)
if err != nil {
return err
}
- found1 := false
- found2 := false
- if zoneId != "" {
- if userInfo.ZoneId == zoneId {
- found1 = true
- }
- } else {
- found1 = true
+
+ // Ignore entries with no zoneID or AP ID
+ if userInfo.ZoneId == "" || userInfo.AccessPointId == "" {
+ return nil
}
- if apId != "" {
- if userInfo.AccessPointId == apId {
- found2 = true
- }
- } else {
- found2 = true
+
+ // Filter using query params
+ if data.queryZoneId != "" && userInfo.ZoneId != data.queryZoneId {
+ return nil
}
- if found1 && found2 {
- userList.User = append(userList.User, userInfo)
+ if data.queryApId != "" && userInfo.AccessPointId != data.queryApId {
+ return nil
}
+
+ // Add user info to list
+ data.userList.User = append(data.userList.User, userInfo)
return nil
}
@@ -513,7 +612,7 @@ func usersGetById(w http.ResponseWriter, r *http.Request) {
var userInfo UserInfo
response.UserInfo = &userInfo
- jsonUserInfo, _ := rc.JSONGetEntry(moduleLocServ+":"+typeUser+":"+vars["userId"], ".")
+ jsonUserInfo, _ := rc.JSONGetEntry(baseKey+typeUser+":"+vars["userId"], ".")
if jsonUserInfo == "" {
w.WriteHeader(http.StatusNotFound)
return
@@ -538,21 +637,32 @@ func usersGetById(w http.ResponseWriter, r *http.Request) {
func zonesByIdGetAps(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ var userData ApUserData
+ vars := mux.Vars(r)
+
+ // Retrieve query parameters
u, _ := url.Parse(r.URL.String())
log.Info("url: ", u.RequestURI())
q := u.Query()
- interestRealm := q.Get("interestRealm")
+ userData.queryInterestRealm = q.Get("interestRealm")
+ // Get user list from DB
var response ResponseAccessPointList
var apList AccessPointList
+ apList.ZoneId = vars["zoneId"]
+ apList.ResourceURL = hostUrl.String() + basePath + "zones/" + vars["zoneId"] + "/accessPoints"
response.AccessPointList = &apList
+ userData.apList = &apList
- vars := mux.Vars(r)
-
- _ = rc.JSONGetList(interestRealm, "", moduleLocServ+":"+typeZone+":"+vars["zoneId"], populateApList, &apList)
- apList.ZoneId = vars["zoneId"]
- apList.ResourceURL = basepathURL + "zones/" + vars["zoneId"] + "/accessPoints"
+ keyName := baseKey + typeZone + ":" + vars["zoneId"] + ":*"
+ err := rc.ForEachJSONEntry(keyName, populateApList, &userData)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ // Send response
jsonResponse, err := json.Marshal(response)
if err != nil {
log.Error(err.Error())
@@ -571,7 +681,7 @@ func zonesByIdGetApsById(w http.ResponseWriter, r *http.Request) {
var apInfo AccessPointInfo
response.AccessPointInfo = &apInfo
- jsonApInfo, _ := rc.JSONGetEntry(moduleLocServ+":"+typeZone+":"+vars["zoneId"]+":"+typeAccessPoint+":"+vars["accessPointId"], ".")
+ jsonApInfo, _ := rc.JSONGetEntry(baseKey+typeZone+":"+vars["zoneId"]+":"+typeAccessPoint+":"+vars["accessPointId"], ".")
if jsonApInfo == "" {
w.WriteHeader(http.StatusNotFound)
return
@@ -599,10 +709,16 @@ func zonesGet(w http.ResponseWriter, r *http.Request) {
var response ResponseZoneList
var zoneList ZoneList
+ zoneList.ResourceURL = hostUrl.String() + basePath + "zones"
response.ZoneList = &zoneList
- _ = rc.JSONGetList("", "", moduleLocServ+":"+typeZone+":", populateZoneList, &zoneList)
- zoneList.ResourceURL = basepathURL + "zones"
+ keyName := baseKey + typeZone + ":*"
+ err := rc.ForEachJSONEntry(keyName, populateZoneList, &zoneList)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
jsonResponse, err := json.Marshal(response)
if err != nil {
@@ -622,7 +738,7 @@ func zonesGetById(w http.ResponseWriter, r *http.Request) {
var zoneInfo ZoneInfo
response.ZoneInfo = &zoneInfo
- jsonZoneInfo, _ := rc.JSONGetEntry(moduleLocServ+":"+typeZone+":"+vars["zoneId"], ".")
+ jsonZoneInfo, _ := rc.JSONGetEntry(baseKey+typeZone+":"+vars["zoneId"], ".")
if jsonZoneInfo == "" {
w.WriteHeader(http.StatusNotFound)
return
@@ -645,7 +761,7 @@ func zonesGetById(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, string(jsonResponse))
}
-func populateZoneList(key string, jsonInfo string, dummy1 string, dummy2 string, userData interface{}) error {
+func populateZoneList(key string, jsonInfo string, userData interface{}) error {
zoneList := userData.(*ZoneList)
var zoneInfo ZoneInfo
@@ -661,29 +777,32 @@ func populateZoneList(key string, jsonInfo string, dummy1 string, dummy2 string,
return nil
}
-func populateApList(key string, jsonInfo string, interestRealm string, dummy string, userData interface{}) error {
+func populateApList(key string, jsonInfo string, userData interface{}) error {
+ // Get query params & aplist from user data
+ data := userData.(*ApUserData)
+ if data == nil || data.apList == nil {
+ return errors.New("apList not found in userData")
+ }
- apList := userData.(*AccessPointList)
+ // Retrieve AP info from DB
var apInfo AccessPointInfo
-
- // Format response
err := json.Unmarshal([]byte(jsonInfo), &apInfo)
if err != nil {
return err
}
- if apInfo.AccessPointId != "" {
- found := false
- if interestRealm != "" {
- if apInfo.InterestRealm == interestRealm {
- found = true
- }
- } else {
- found = true
- }
- if found {
- apList.AccessPoint = append(apList.AccessPoint, apInfo)
- }
+
+ // Ignore entries with no AP ID
+ if apInfo.AccessPointId == "" {
+ return nil
+ }
+
+ // Filter using query params
+ if data.queryInterestRealm != "" && apInfo.InterestRealm != data.queryInterestRealm {
+ return nil
}
+
+ // Add AP info to list
+ data.apList.AccessPoint = append(data.apList.AccessPoint, apInfo)
return nil
}
@@ -691,7 +810,7 @@ func userTrackingSubDelById(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
vars := mux.Vars(r)
- err := rc.JSONDelEntry(moduleLocServ+":"+typeUserSubscription+":"+vars["subscriptionId"], ".")
+ err := rc.JSONDelEntry(baseKey+typeUserSubscription+":"+vars["subscriptionId"], ".")
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -706,11 +825,16 @@ func userTrackingSubGet(w http.ResponseWriter, r *http.Request) {
var response ResponseUserTrackingNotificationSubscriptionList
var userTrackingSubList UserTrackingNotificationSubscriptionList
+ userTrackingSubList.ResourceURL = hostUrl.String() + basePath + "subscriptions/userTracking"
response.NotificationSubscriptionList = &userTrackingSubList
- _ = rc.JSONGetList("", "", moduleLocServ+":"+typeUserSubscription, populateUserTrackingList, &userTrackingSubList)
-
- userTrackingSubList.ResourceURL = basepathURL + "subscriptions/userTracking"
+ keyName := baseKey + typeUserSubscription + "*"
+ err := rc.ForEachJSONEntry(keyName, populateUserTrackingList, &userTrackingSubList)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
jsonResponse, err := json.Marshal(response)
if err != nil {
@@ -730,7 +854,7 @@ func userTrackingSubGetById(w http.ResponseWriter, r *http.Request) {
var userTrackingSub UserTrackingSubscription
response.UserTrackingSubscription = &userTrackingSub
- jsonUserTrackingSub, _ := rc.JSONGetEntry(moduleLocServ+":"+typeUserSubscription+":"+vars["subscriptionId"], ".")
+ jsonUserTrackingSub, _ := rc.JSONGetEntry(baseKey+typeUserSubscription+":"+vars["subscriptionId"], ".")
if jsonUserTrackingSub == "" {
w.WriteHeader(http.StatusNotFound)
return
@@ -773,9 +897,9 @@ func userTrackingSubPost(w http.ResponseWriter, r *http.Request) {
subsIdStr := strconv.Itoa(newSubsId)
registerUser(userTrackingSub.Address, userTrackingSub.UserEventCriteria, subsIdStr)
- userTrackingSub.ResourceURL = basepathURL + "subscriptions/userTracking/" + subsIdStr
+ userTrackingSub.ResourceURL = hostUrl.String() + basePath + "subscriptions/userTracking/" + subsIdStr
- _ = rc.JSONSetEntry(moduleLocServ+":"+typeUserSubscription+":"+subsIdStr, ".", convertUserSubscriptionToJson(userTrackingSub))
+ _ = rc.JSONSetEntry(baseKey+typeUserSubscription+":"+subsIdStr, ".", convertUserSubscriptionToJson(userTrackingSub))
jsonResponse, err := json.Marshal(response)
if err != nil {
@@ -804,9 +928,9 @@ func userTrackingSubPutById(w http.ResponseWriter, r *http.Request) {
}
subsIdStr := vars["subscriptionId"]
- userTrackingSub.ResourceURL = basepathURL + "subscriptions/userTracking/" + subsIdStr
+ userTrackingSub.ResourceURL = hostUrl.String() + basePath + "subscriptions/userTracking/" + subsIdStr
- _ = rc.JSONSetEntry(moduleLocServ+":"+typeUserSubscription+":"+subsIdStr, ".", convertUserSubscriptionToJson(userTrackingSub))
+ _ = rc.JSONSetEntry(baseKey+typeUserSubscription+":"+subsIdStr, ".", convertUserSubscriptionToJson(userTrackingSub))
deregisterUser(subsIdStr)
registerUser(userTrackingSub.Address, userTrackingSub.UserEventCriteria, subsIdStr)
@@ -821,7 +945,7 @@ func userTrackingSubPutById(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, string(jsonResponse))
}
-func populateUserTrackingList(key string, jsonInfo string, dummy1 string, dummy2 string, userData interface{}) error {
+func populateUserTrackingList(key string, jsonInfo string, userData interface{}) error {
userList := userData.(*UserTrackingNotificationSubscriptionList)
var userInfo UserTrackingSubscription
@@ -839,7 +963,7 @@ func zonalTrafficSubDelById(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
vars := mux.Vars(r)
- err := rc.JSONDelEntry(moduleLocServ+":"+typeZonalSubscription+":"+vars["subscriptionId"], ".")
+ err := rc.JSONDelEntry(baseKey+typeZonalSubscription+":"+vars["subscriptionId"], ".")
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -854,10 +978,16 @@ func zonalTrafficSubGet(w http.ResponseWriter, r *http.Request) {
var response ResponseZonalTrafficNotificationSubscriptionList
var zonalTrafficSubList ZonalTrafficNotificationSubscriptionList
+ zonalTrafficSubList.ResourceURL = hostUrl.String() + basePath + "subscriptions/zonalTraffic"
response.NotificationSubscriptionList = &zonalTrafficSubList
- _ = rc.JSONGetList("", "", moduleLocServ+":"+typeZonalSubscription, populateZonalTrafficList, &zonalTrafficSubList)
- zonalTrafficSubList.ResourceURL = basepathURL + "subcription/zonalTraffic"
+ keyName := baseKey + typeZonalSubscription + "*"
+ err := rc.ForEachJSONEntry(keyName, populateZonalTrafficList, &zonalTrafficSubList)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
jsonResponse, err := json.Marshal(response)
if err != nil {
@@ -877,7 +1007,7 @@ func zonalTrafficSubGetById(w http.ResponseWriter, r *http.Request) {
var zonalTrafficSub ZonalTrafficSubscription
response.ZonalTrafficSubscription = &zonalTrafficSub
- jsonZonalTrafficSub, _ := rc.JSONGetEntry(moduleLocServ+":"+typeZonalSubscription+":"+vars["subscriptionId"], ".")
+ jsonZonalTrafficSub, _ := rc.JSONGetEntry(baseKey+typeZonalSubscription+":"+vars["subscriptionId"], ".")
if jsonZonalTrafficSub == "" {
w.WriteHeader(http.StatusNotFound)
return
@@ -930,9 +1060,9 @@ func zonalTrafficSubPost(w http.ResponseWriter, r *http.Request) {
}
//else, lasts forever or until subscription is deleted
- zonalTrafficSub.ResourceURL = basepathURL + "subscriptions/zonalTraffic/" + subsIdStr
+ zonalTrafficSub.ResourceURL = hostUrl.String() + basePath + "subscriptions/zonalTraffic/" + subsIdStr
- _ = rc.JSONSetEntry(moduleLocServ+":"+typeZonalSubscription+":"+subsIdStr, ".", convertZonalSubscriptionToJson(zonalTrafficSub))
+ _ = rc.JSONSetEntry(baseKey+typeZonalSubscription+":"+subsIdStr, ".", convertZonalSubscriptionToJson(zonalTrafficSub))
registerZonal(zonalTrafficSub.ZoneId, zonalTrafficSub.UserEventCriteria, subsIdStr)
@@ -963,9 +1093,9 @@ func zonalTrafficSubPutById(w http.ResponseWriter, r *http.Request) {
}
subsIdStr := vars["subscriptionId"]
- zonalTrafficSub.ResourceURL = basepathURL + "subscriptions/zonalTraffic/" + subsIdStr
+ zonalTrafficSub.ResourceURL = hostUrl.String() + basePath + "subscriptions/zonalTraffic/" + subsIdStr
- _ = rc.JSONSetEntry(moduleLocServ+":"+typeZonalSubscription+":"+subsIdStr, ".", convertZonalSubscriptionToJson(zonalTrafficSub))
+ _ = rc.JSONSetEntry(baseKey+typeZonalSubscription+":"+subsIdStr, ".", convertZonalSubscriptionToJson(zonalTrafficSub))
deregisterZonal(subsIdStr)
registerZonal(zonalTrafficSub.ZoneId, zonalTrafficSub.UserEventCriteria, subsIdStr)
@@ -980,7 +1110,7 @@ func zonalTrafficSubPutById(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, string(jsonResponse))
}
-func populateZonalTrafficList(key string, jsonInfo string, dummy1 string, dummy2 string, userData interface{}) error {
+func populateZonalTrafficList(key string, jsonInfo string, userData interface{}) error {
zoneList := userData.(*ZonalTrafficNotificationSubscriptionList)
var zoneInfo ZonalTrafficSubscription
@@ -998,7 +1128,7 @@ func zoneStatusDelById(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
vars := mux.Vars(r)
- err := rc.JSONDelEntry(moduleLocServ+":"+typeZoneStatusSubscription+":"+vars["subscriptionId"], ".")
+ err := rc.JSONDelEntry(baseKey+typeZoneStatusSubscription+":"+vars["subscriptionId"], ".")
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -1013,11 +1143,16 @@ func zoneStatusGet(w http.ResponseWriter, r *http.Request) {
var response ResponseZoneStatusNotificationSubscriptionList
var zoneStatusSubList ZoneStatusNotificationSubscriptionList
+ zoneStatusSubList.ResourceURL = hostUrl.String() + basePath + "subscriptions/zoneStatus"
response.NotificationSubscriptionList = &zoneStatusSubList
- _ = rc.JSONGetList("", "", moduleLocServ+":"+typeZoneStatusSubscription, populateZoneStatusList, &zoneStatusSubList)
-
- zoneStatusSubList.ResourceURL = basepathURL + "subscription/zoneStatus"
+ keyName := baseKey + typeZoneStatusSubscription + "*"
+ err := rc.ForEachJSONEntry(keyName, populateZoneStatusList, &zoneStatusSubList)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
jsonResponse, err := json.Marshal(response)
if err != nil {
@@ -1037,7 +1172,7 @@ func zoneStatusGetById(w http.ResponseWriter, r *http.Request) {
var zoneStatusSub ZoneStatusSubscription
response.ZoneStatusSubscription = &zoneStatusSub
- jsonZoneStatusSub, _ := rc.JSONGetEntry(moduleLocServ+":"+typeZoneStatusSubscription+":"+vars["subscriptionId"], ".")
+ jsonZoneStatusSub, _ := rc.JSONGetEntry(baseKey+typeZoneStatusSubscription+":"+vars["subscriptionId"], ".")
if jsonZoneStatusSub == "" {
w.WriteHeader(http.StatusNotFound)
return
@@ -1063,9 +1198,9 @@ func zoneStatusGetById(w http.ResponseWriter, r *http.Request) {
func zoneStatusPost(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
- var response ResponseZoneStatusSubscription
+ var response ResponseZoneStatusSubscription2
zoneStatusSub := new(ZoneStatusSubscription)
- response.ZonalTrafficSubscription = zoneStatusSub
+ response.ZoneStatusSubscription = zoneStatusSub
decoder := json.NewDecoder(r.Body)
err := decoder.Decode(&zoneStatusSub)
@@ -1079,9 +1214,9 @@ func zoneStatusPost(w http.ResponseWriter, r *http.Request) {
nextZoneStatusSubscriptionIdAvailable++
subsIdStr := strconv.Itoa(newSubsId)
- zoneStatusSub.ResourceURL = basepathURL + "subscriptions/zoneStatus/" + subsIdStr
+ zoneStatusSub.ResourceURL = hostUrl.String() + basePath + "subscriptions/zoneStatus/" + subsIdStr
- _ = rc.JSONSetEntry(moduleLocServ+":"+typeZoneStatusSubscription+":"+subsIdStr, ".", convertZoneStatusSubscriptionToJson(zoneStatusSub))
+ _ = rc.JSONSetEntry(baseKey+typeZoneStatusSubscription+":"+subsIdStr, ".", convertZoneStatusSubscriptionToJson(zoneStatusSub))
registerZoneStatus(zoneStatusSub.ZoneId, zoneStatusSub.NumberOfUsersZoneThreshold, zoneStatusSub.NumberOfUsersAPThreshold,
zoneStatusSub.OperationStatus, subsIdStr)
@@ -1113,9 +1248,9 @@ func zoneStatusPutById(w http.ResponseWriter, r *http.Request) {
}
subsIdStr := vars["subscriptionId"]
- zoneStatusSub.ResourceURL = basepathURL + "subscriptions/zoneStatus/" + subsIdStr
+ zoneStatusSub.ResourceURL = hostUrl.String() + basePath + "subscriptions/zoneStatus/" + subsIdStr
- _ = rc.JSONSetEntry(moduleLocServ+":"+typeZoneStatusSubscription+":"+subsIdStr, ".", convertZoneStatusSubscriptionToJson(zoneStatusSub))
+ _ = rc.JSONSetEntry(baseKey+typeZoneStatusSubscription+":"+subsIdStr, ".", convertZoneStatusSubscriptionToJson(zoneStatusSub))
deregisterZoneStatus(subsIdStr)
registerZoneStatus(zoneStatusSub.ZoneId, zoneStatusSub.NumberOfUsersZoneThreshold, zoneStatusSub.NumberOfUsersAPThreshold,
@@ -1131,7 +1266,7 @@ func zoneStatusPutById(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, string(jsonResponse))
}
-func populateZoneStatusList(key string, jsonInfo string, dummy1 string, dummy2 string, userData interface{}) error {
+func populateZoneStatusList(key string, jsonInfo string, userData interface{}) error {
zoneList := userData.(*ZoneStatusNotificationSubscriptionList)
var zoneInfo ZoneStatusSubscription
@@ -1145,28 +1280,9 @@ func populateZoneStatusList(key string, jsonInfo string, dummy1 string, dummy2 s
return nil
}
-/*
-func getCurrentUserLocation(resourceName string) (string, string) {
-
- jsonUserInfo, _ := rc.JSONGetEntry(moduleLocServ+":"+typeUser+":"+resourceName, ".")
-
- if jsonUserInfo != "" {
- // Unmarshal UserInfo
- var userInfo UserInfo
- err := json.Unmarshal([]byte(jsonUserInfo), &userInfo)
- if err == nil {
- return userInfo.ZoneId, userInfo.AccessPointId
- } else {
- log.Error(err.Error())
- }
- }
- return "", ""
-}
-*/
func cleanUp() {
-
log.Info("Terminate all")
- rc.DBFlush(moduleLocServ)
+ rc.DBFlush(baseKey)
nextZonalSubscriptionIdAvailable = 1
nextUserSubscriptionIdAvailable = 1
nextZoneStatusSubscriptionIdAvailable = 1
@@ -1183,132 +1299,128 @@ func cleanUp() {
zoneStatusSubscriptionMap = map[int]*ZoneStatusCheck{}
+ updateStoreName("")
}
-func updateUserInfo(address string, zoneId string, accessPointId string) {
-
- //get from DB
- jsonUserInfo, _ := rc.JSONGetEntry(moduleLocServ+":"+typeUser+":"+address, ".")
-
- userInfo := new(UserInfo)
+func updateStoreName(storeName string) {
+ if currentStoreName != storeName {
+ currentStoreName = storeName
+ _ = httpLog.ReInit(logModuleLocServ, sandboxName, storeName, redisAddr, influxAddr)
+ }
+}
- oldZoneId := ""
- oldApId := ""
- if jsonUserInfo != "" {
+func updateUserInfo(address string, zoneId string, accessPointId string, longitude *float32, latitude *float32) {
+ var oldZoneId string
+ var oldApId string
- userInfo = convertJsonToUserInfo(jsonUserInfo)
+ // Get User Info from DB
+ jsonUserInfo, _ := rc.JSONGetEntry(baseKey+typeUser+":"+address, ".")
+ userInfo := convertJsonToUserInfo(jsonUserInfo)
+ // Create new user info if necessary
+ if userInfo == nil {
+ userInfo = new(UserInfo)
+ userInfo.Address = address
+ userInfo.ResourceURL = hostUrl.String() + basePath + "users/" + address
+ } else {
+ // Get old zone & AP IDs
oldZoneId = userInfo.ZoneId
oldApId = userInfo.AccessPointId
+ }
+ userInfo.ZoneId = zoneId
+ userInfo.AccessPointId = accessPointId
- if zoneId != "" {
- userInfo.ZoneId = zoneId
- }
- if accessPointId != "" {
- userInfo.AccessPointId = accessPointId
- }
-
- //updateDB
- _ = rc.JSONSetEntry(moduleLocServ+":"+typeUser+":"+address, ".", convertUserInfoToJson(userInfo))
-
+ // Update position
+ if longitude == nil || latitude == nil {
+ userInfo.LocationInfo = nil
} else {
- userInfo.Address = address
- userInfo.ZoneId = zoneId
- userInfo.AccessPointId = accessPointId
- userInfo.ResourceURL = basepathURL + "users/" + address
- //unsued optional attributes
- //userInfo.LocationInfo.Latitude,
- //userInfo.LocationInfo.Longitude,
- //userInfo.LocationInfo.Altitude,
- //userInfo.LocationInfo.Accuracy,
- //userInfo.ContextLocationInfo,
- //userInfo.AncillaryInfo)
- _ = rc.JSONSetEntry(moduleLocServ+":"+typeUser+":"+address, ".", convertUserInfoToJson(userInfo))
+ if userInfo.LocationInfo == nil {
+ userInfo.LocationInfo = new(LocationInfo)
+ userInfo.LocationInfo.Accuracy = 1
+ }
+ userInfo.LocationInfo.Longitude = *longitude
+ userInfo.LocationInfo.Latitude = *latitude
}
- checkNotificationRegistrations(USER_TRACKING_AND_ZONAL_TRAFFIC, oldZoneId, zoneId, oldApId, accessPointId, address)
+ // Update User info in DB & Send notifications
+ _ = rc.JSONSetEntry(baseKey+typeUser+":"+address, ".", convertUserInfoToJson(userInfo))
+ checkNotificationRegistrations(USER_TRACKING_AND_ZONAL_TRAFFIC, oldZoneId, zoneId, oldApId, accessPointId, address)
}
func updateZoneInfo(zoneId string, nbAccessPoints int, nbUnsrvAccessPoints int, nbUsers int) {
+ // Get Zone Info from DB
+ jsonZoneInfo, _ := rc.JSONGetEntry(baseKey+typeZone+":"+zoneId, ".")
+ zoneInfo := convertJsonToZoneInfo(jsonZoneInfo)
- //get from DB
- jsonZoneInfo, _ := rc.JSONGetEntry(moduleLocServ+":"+typeZone+":"+zoneId, ".")
-
- zoneInfo := new(ZoneInfo)
- if jsonZoneInfo != "" {
- zoneInfo = convertJsonToZoneInfo(jsonZoneInfo)
-
- if nbAccessPoints != -1 {
- zoneInfo.NumberOfAccessPoints = int32(nbAccessPoints)
- }
- if nbUnsrvAccessPoints != -1 {
- zoneInfo.NumberOfUnservicableAccessPoints = int32(nbUnsrvAccessPoints)
- }
- if nbUsers != -1 {
- zoneInfo.NumberOfUsers = int32(nbUsers)
- }
- //updateDB
- _ = rc.JSONSetEntry(moduleLocServ+":"+typeZone+":"+zoneId, ".", convertZoneInfoToJson(zoneInfo))
- } else {
+ // Create new zone info if necessary
+ if zoneInfo == nil {
+ zoneInfo = new(ZoneInfo)
zoneInfo.ZoneId = zoneId
- zoneInfo.ResourceURL = basepathURL + "zones/" + zoneId
+ zoneInfo.ResourceURL = hostUrl.String() + basePath + "zones/" + zoneId
+ }
+ // Update info
+ if nbAccessPoints != -1 {
zoneInfo.NumberOfAccessPoints = int32(nbAccessPoints)
+ }
+ if nbUnsrvAccessPoints != -1 {
zoneInfo.NumberOfUnservicableAccessPoints = int32(nbUnsrvAccessPoints)
+ }
+ if nbUsers != -1 {
zoneInfo.NumberOfUsers = int32(nbUsers)
-
- _ = rc.JSONSetEntry(moduleLocServ+":"+typeZone+":"+zoneId, ".", convertZoneInfoToJson(zoneInfo))
}
+ // Update Zone info in DB & Send notifications
+ _ = rc.JSONSetEntry(baseKey+typeZone+":"+zoneId, ".", convertZoneInfoToJson(zoneInfo))
checkNotificationRegistrations(ZONE_STATUS, zoneId, "", "", strconv.Itoa(nbUsers), "")
}
-func updateAccessPointInfo(zoneId string, apId string, conTypeStr string, opStatusStr string, nbUsers int) {
-
- //get from DB
- jsonApInfo, _ := rc.JSONGetEntry(moduleLocServ+":"+typeZone+":"+zoneId+":"+typeAccessPoint+":"+apId, ".")
+func updateAccessPointInfo(zoneId string, apId string, conTypeStr string, opStatusStr string, nbUsers int, longitude *float32, latitude *float32) {
+ // Get AP Info from DB
+ jsonApInfo, _ := rc.JSONGetEntry(baseKey+typeZone+":"+zoneId+":"+typeAccessPoint+":"+apId, ".")
+ apInfo := convertJsonToAccessPointInfo(jsonApInfo)
- if jsonApInfo != "" {
- apInfo := convertJsonToAccessPointInfo(jsonApInfo)
-
- if opStatusStr != "" {
- opStatus := convertStringToOperationStatus(opStatusStr)
- apInfo.OperationStatus = &opStatus
- }
- if nbUsers != -1 {
- apInfo.NumberOfUsers = int32(nbUsers)
- }
- //updateDB
- _ = rc.JSONSetEntry(moduleLocServ+":"+typeZone+":"+zoneId+":"+typeAccessPoint+":"+apId, ".", convertAccessPointInfoToJson(apInfo))
- } else {
- apInfo := new(AccessPointInfo)
+ // Create new AP info if necessary
+ if apInfo == nil {
+ apInfo = new(AccessPointInfo)
apInfo.AccessPointId = apId
- apInfo.ResourceURL = basepathURL + "zones/" + zoneId + "/accessPoints/" + apId
+ apInfo.ResourceURL = hostUrl.String() + basePath + "zones/" + zoneId + "/accessPoints/" + apId
conType := convertStringToConnectionType(conTypeStr)
apInfo.ConnectionType = &conType
+ }
+
+ // Update info
+ if opStatusStr != "" {
opStatus := convertStringToOperationStatus(opStatusStr)
apInfo.OperationStatus = &opStatus
+ }
+ if nbUsers != -1 {
apInfo.NumberOfUsers = int32(nbUsers)
+ }
- //unsued optional attributes
- //apInfo.LocationInfo.Latitude
- //apInfo.LocationInfo.Longitude
- //apInfo.LocationInfo.Altitude
- //apInfo.LocationInfo.Accuracy
- //apInfo.Timezone
- //apInfo.InterestRealm
-
- _ = rc.JSONSetEntry(moduleLocServ+":"+typeZone+":"+zoneId+":"+typeAccessPoint+":"+apId, ".", convertAccessPointInfoToJson(apInfo))
+ // Update position
+ if longitude == nil || latitude == nil {
+ apInfo.LocationInfo = nil
+ } else {
+ if apInfo.LocationInfo == nil {
+ apInfo.LocationInfo = new(LocationInfo)
+ apInfo.LocationInfo.Accuracy = 1
+ }
+ apInfo.LocationInfo.Longitude = *longitude
+ apInfo.LocationInfo.Latitude = *latitude
}
+
+ // Update AP info in DB & Send notifications
+ _ = rc.JSONSetEntry(baseKey+typeZone+":"+zoneId+":"+typeAccessPoint+":"+apId, ".", convertAccessPointInfoToJson(apInfo))
checkNotificationRegistrations(ZONE_STATUS, zoneId, apId, strconv.Itoa(nbUsers), "", "")
}
func zoneStatusReInit() {
-
//reusing the object response for the get multiple zoneStatusSubscription
var zoneList ZoneStatusNotificationSubscriptionList
- _ = rc.JSONGetList("", "", moduleLocServ+":"+typeZoneStatusSubscription, populateZoneStatusList, &zoneList)
+ keyName := baseKey + typeZoneStatusSubscription + "*"
+ _ = rc.ForEachJSONEntry(keyName, populateZoneStatusList, &zoneList)
maxZoneStatusSubscriptionId := 0
for _, zone := range zoneList.ZoneStatusSubscription {
@@ -1343,15 +1455,14 @@ func zoneStatusReInit() {
}
}
nextZoneStatusSubscriptionIdAvailable = maxZoneStatusSubscriptionId + 1
-
}
func zonalTrafficReInit() {
-
//reusing the object response for the get multiple zonalSubscription
var zoneList ZonalTrafficNotificationSubscriptionList
- _ = rc.JSONGetList("", "", moduleLocServ+":"+typeZonalSubscription, populateZonalTrafficList, &zoneList)
+ keyName := baseKey + typeZonalSubscription + "*"
+ _ = rc.ForEachJSONEntry(keyName, populateZonalTrafficList, &zoneList)
maxZonalSubscriptionId := 0
for _, zone := range zoneList.ZonalTrafficSubscription {
@@ -1379,15 +1490,14 @@ func zonalTrafficReInit() {
}
}
nextZonalSubscriptionIdAvailable = maxZonalSubscriptionId + 1
-
}
func userTrackingReInit() {
-
//reusing the object response for the get multiple zonalSubscription
var userList UserTrackingNotificationSubscriptionList
- _ = rc.JSONGetList("", "", moduleLocServ+":"+typeUserSubscription, populateUserTrackingList, &userList)
+ keyName := baseKey + typeUserSubscription + "*"
+ _ = rc.ForEachJSONEntry(keyName, populateUserTrackingList, &userList)
maxUserSubscriptionId := 0
for _, user := range userList.UserTrackingSubscription {
@@ -1415,5 +1525,4 @@ func userTrackingReInit() {
}
}
nextUserSubscriptionIdAvailable = maxUserSubscriptionId + 1
-
}
diff --git a/go-apps/meep-loc-serv/server/loc-serv_test.go b/go-apps/meep-loc-serv/server/loc-serv_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..df15c19f663247b07a19590deac319d0910a716f
--- /dev/null
+++ b/go-apps/meep-loc-serv/server/loc-serv_test.go
@@ -0,0 +1,2215 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on ance "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package server
+
+import (
+ "bytes"
+ "encoding/json"
+ "errors"
+ "fmt"
+ "io"
+ "net/http"
+ "net/http/httptest"
+ "strconv"
+ "testing"
+ "time"
+
+ locNotif "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-loc-serv-notification-client"
+ 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"
+ mq "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq"
+
+ "github.com/gorilla/mux"
+)
+
+//json format using spacing to facilitate reading
+const testScenario string = `
+{
+ "version": "1.4.0",
+ "name": "test-scenario",
+ "deployment": {
+ "interDomainLatency": 50,
+ "interDomainLatencyVariation": 5,
+ "interDomainThroughput": 1000,
+ "domains": [
+ {
+ "id": "PUBLIC",
+ "name": "PUBLIC",
+ "type": "PUBLIC",
+ "interZoneLatency": 6,
+ "interZoneLatencyVariation": 2,
+ "interZoneThroughput": 1000000,
+ "zones": [
+ {
+ "id": "PUBLIC-COMMON",
+ "name": "PUBLIC-COMMON",
+ "type": "COMMON",
+ "netChar": {
+ "latency": 5,
+ "latencyVariation": 1,
+ "throughput": 1000000
+ },
+ "networkLocations": [
+ {
+ "id": "PUBLIC-COMMON-DEFAULT",
+ "name": "PUBLIC-COMMON-DEFAULT",
+ "type": "DEFAULT",
+ "terminalLinkLatency": 1,
+ "terminalLinkLatencyVariation": 1,
+ "terminalLinkThroughput": 50000,
+ "terminalLinkPacketLoss": 1,
+ "physicalLocations": []
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "4da82f2d-1f44-4945-8fe7-00c0431ef8c7",
+ "name": "operator-cell1",
+ "type": "OPERATOR-CELL",
+ "interZoneLatency": 6,
+ "interZoneLatencyVariation": 2,
+ "interZoneThroughput": 1000,
+ "interZonePacketLoss": 0,
+ "zones": [
+ {
+ "id": "operator-cell1-COMMON",
+ "name": "operator-cell1-COMMON",
+ "type": "COMMON",
+ "netChar": {
+ "latency": 5,
+ "latencyVariation": 1,
+ "throughput": 1000,
+ "packetLoss": 0
+ },
+ "networkLocations": [
+ {
+ "id": "operator-cell1-COMMON-DEFAULT",
+ "name": "operator-cell1-COMMON-DEFAULT",
+ "type": "DEFAULT",
+ "terminalLinkLatency": 1,
+ "terminalLinkLatencyVariation": 1,
+ "terminalLinkThroughput": 1000,
+ "terminalLinkPacketLoss": 0,
+ "physicalLocations": []
+ }
+ ]
+ },
+ {
+ "id": "0836975f-a7ea-41ec-b0e0-aff43178194d",
+ "name": "zone1",
+ "type": "ZONE",
+ "netChar": {
+ "latency": 5,
+ "latencyVariation": 1,
+ "throughput": 1000,
+ "packetLoss": 0
+ },
+ "networkLocations": [
+ {
+ "id": "zone1-DEFAULT",
+ "name": "zone1-DEFAULT",
+ "type": "DEFAULT",
+ "terminalLinkLatency": 1,
+ "terminalLinkLatencyVariation": 1,
+ "terminalLinkThroughput": 1000,
+ "terminalLinkPacketLoss": 0,
+ "physicalLocations": [
+ {
+ "id": "97b80da7-a74a-4649-bb61-f7fa4fbb2d76",
+ "name": "zone1-edge1",
+ "type": "EDGE",
+ "isExternal": false,
+ "linkLatency": 0,
+ "linkLatencyVariation": 0,
+ "linkThroughput": 1000,
+ "linkPacketLoss": 0,
+ "processes": [
+ {
+ "id": "fcf1269c-a061-448e-aa80-6dd9c2d4c548",
+ "name": "zone1-edge1-iperf",
+ "type": "EDGE-APP",
+ "isExternal": false,
+ "userChartLocation": null,
+ "userChartAlternateValues": null,
+ "userChartGroup": null,
+ "image": "meep-docker-registry:30001/iperf-server",
+ "environment": "",
+ "commandArguments": "-c, export; iperf -s -p $IPERF_SERVICE_PORT",
+ "commandExe": "/bin/bash",
+ "serviceConfig": {
+ "name": "zone1-edge1-iperf",
+ "meSvcName": "iperf",
+ "ports": [
+ {
+ "protocol": "UDP",
+ "port": 80,
+ "externalPort": null
+ }
+ ]
+ },
+ "gpuConfig": null,
+ "externalConfig": null,
+ "appLatency": 0,
+ "appLatencyVariation": 0,
+ "appThroughput": 1000,
+ "appPacketLoss": 0,
+ "placementId": ""
+ },
+ {
+ "id": "35697e68-c627-4b8d-9cd7-ad8b8e226aee",
+ "name": "zone1-edge1-svc",
+ "type": "EDGE-APP",
+ "isExternal": false,
+ "userChartLocation": null,
+ "userChartAlternateValues": null,
+ "userChartGroup": null,
+ "image": "meep-docker-registry:30001/demo-server",
+ "environment": "MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-edge1-svc, MGM_APP_PORT=80",
+ "commandArguments": "",
+ "commandExe": "",
+ "serviceConfig": {
+ "name": "zone1-edge1-svc",
+ "meSvcName": "svc",
+ "ports": [
+ {
+ "protocol": "TCP",
+ "port": 80,
+ "externalPort": null
+ }
+ ]
+ },
+ "gpuConfig": null,
+ "externalConfig": null,
+ "appLatency": 0,
+ "appLatencyVariation": 0,
+ "appThroughput": 1000,
+ "appPacketLoss": 0,
+ "placementId": ""
+ }
+ ],
+ "label": "zone1-edge1"
+ }
+ ]
+ },
+ {
+ "id": "7a6f8077-b0b3-403d-b954-3351e21afeb7",
+ "name": "zone1-poa-cell1",
+ "type": "POA-CELLULAR",
+ "terminalLinkLatency": 1,
+ "terminalLinkLatencyVariation": 1,
+ "terminalLinkThroughput": 1000,
+ "terminalLinkPacketLoss": 0,
+ "physicalLocations": [
+ {
+ "id": "32a2ced4-a262-49a8-8503-8489a94386a2",
+ "name": "ue1",
+ "type": "UE",
+ "isExternal": false,
+ "linkLatency": 0,
+ "linkLatencyVariation": 0,
+ "linkThroughput": 1000,
+ "linkPacketLoss": 0,
+ "processes": [
+ {
+ "id": "9bdd6acd-f6e4-44f6-a26c-8fd9abd338a7",
+ "name": "ue1-iperf",
+ "type": "UE-APP",
+ "isExternal": false,
+ "userChartLocation": null,
+ "userChartAlternateValues": null,
+ "userChartGroup": null,
+ "image": "meep-docker-registry:30001/iperf-client",
+ "environment": "",
+ "commandArguments": "-c, export; iperf -u -c $IPERF_SERVICE_HOST -p $IPERF_SERVICE_PORT -t 3600 -b 50M;",
+ "commandExe": "/bin/bash",
+ "serviceConfig": null,
+ "gpuConfig": null,
+ "externalConfig": null,
+ "appLatency": 0,
+ "appLatencyVariation": 0,
+ "appThroughput": 1000,
+ "appPacketLoss": 0,
+ "placementId": ""
+ }
+ ],
+ "label": "ue1"
+ },
+ {
+ "id": "b1851da5-c9e1-4bd8-ad23-5925c82ee127",
+ "name": "zone1-fog1",
+ "type": "FOG",
+ "isExternal": false,
+ "linkLatency": 0,
+ "linkLatencyVariation": 0,
+ "linkThroughput": 1000,
+ "linkPacketLoss": 0,
+ "processes": [
+ {
+ "id": "c2f2fb5d-4053-4cee-a0ee-e62bbb7751b6",
+ "name": "zone1-fog1-iperf",
+ "type": "EDGE-APP",
+ "isExternal": false,
+ "userChartLocation": null,
+ "userChartAlternateValues": null,
+ "userChartGroup": null,
+ "image": "meep-docker-registry:30001/iperf-server",
+ "environment": "",
+ "commandArguments": "-c, export; iperf -s -p $IPERF_SERVICE_PORT;",
+ "commandExe": "/bin/bash",
+ "serviceConfig": {
+ "name": "zone1-fog1-iperf",
+ "meSvcName": "iperf",
+ "ports": [
+ {
+ "protocol": "UDP",
+ "port": 80,
+ "externalPort": null
+ }
+ ]
+ },
+ "gpuConfig": null,
+ "externalConfig": null,
+ "appLatency": 0,
+ "appLatencyVariation": 0,
+ "appThroughput": 1000,
+ "appPacketLoss": 0,
+ "placementId": ""
+ },
+ {
+ "id": "53b5806b-e213-4c5a-a181-f1c31c24287b",
+ "name": "zone1-fog1-svc",
+ "type": "EDGE-APP",
+ "isExternal": false,
+ "userChartLocation": null,
+ "userChartAlternateValues": null,
+ "userChartGroup": null,
+ "image": "meep-docker-registry:30001/demo-server",
+ "environment": "MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-fog1-svc, MGM_APP_PORT=80",
+ "commandArguments": "",
+ "commandExe": "",
+ "serviceConfig": {
+ "name": "zone1-fog1-svc",
+ "meSvcName": "svc",
+ "ports": [
+ {
+ "protocol": "TCP",
+ "port": 80,
+ "externalPort": null
+ }
+ ]
+ },
+ "gpuConfig": null,
+ "externalConfig": null,
+ "appLatency": 0,
+ "appLatencyVariation": 0,
+ "appThroughput": 1000,
+ "appPacketLoss": 0,
+ "placementId": ""
+ }
+ ],
+ "label": "zone1-fog1"
+ },
+ {
+ "id": "9fe500e3-2cf8-46e6-acdd-07a445edef6c",
+ "name": "ue2-ext",
+ "type": "UE",
+ "isExternal": true,
+ "linkLatency": 0,
+ "linkLatencyVariation": 0,
+ "linkThroughput": 1000,
+ "linkPacketLoss": 0,
+ "processes": [
+ {
+ "id": "4bed3902-c769-4c94-bcf8-95aee67d1e03",
+ "name": "ue2-svc",
+ "type": "UE-APP",
+ "isExternal": true,
+ "userChartLocation": null,
+ "userChartAlternateValues": null,
+ "userChartGroup": null,
+ "image": null,
+ "environment": null,
+ "commandArguments": null,
+ "commandExe": null,
+ "serviceConfig": null,
+ "gpuConfig": null,
+ "externalConfig": {
+ "ingressServiceMap": [],
+ "egressServiceMap": []
+ },
+ "appLatency": 0,
+ "appLatencyVariation": 0,
+ "appThroughput": 1000,
+ "appPacketLoss": 0,
+ "placementId": ""
+ }
+ ],
+ "label": "ue2-ext"
+ }
+ ],
+ "cellularPoaConfig": {
+ "cellId": "2345678"
+ }
+ },
+ {
+ "id": "7ff90180-2c1a-4c11-b59a-3608c5d8d874",
+ "name": "zone1-poa-cell2",
+ "type": "POA-CELLULAR",
+ "terminalLinkLatency": 1,
+ "terminalLinkLatencyVariation": 1,
+ "terminalLinkThroughput": 1000,
+ "terminalLinkPacketLoss": 0,
+ "physicalLocations": [],
+ "cellularPoaConfig": {
+ "cellId": "3456789"
+ }
+ }
+ ],
+ "label": "zone1"
+ },
+ {
+ "id": "d1f06b00-4454-4d35-94a5-b573888e7ea9",
+ "name": "zone2",
+ "type": "ZONE",
+ "netChar": {
+ "latency": 5,
+ "latencyVariation": 1,
+ "throughput": 1000,
+ "packetLoss": 0
+ },
+ "networkLocations": [
+ {
+ "id": "zone2-DEFAULT",
+ "name": "zone2-DEFAULT",
+ "type": "DEFAULT",
+ "terminalLinkLatency": 1,
+ "terminalLinkLatencyVariation": 1,
+ "terminalLinkThroughput": 1000,
+ "terminalLinkPacketLoss": 0,
+ "physicalLocations": [
+ {
+ "id": "fb130d18-fd81-43e0-900c-c584e7190302",
+ "name": "zone2-edge1",
+ "type": "EDGE",
+ "isExternal": false,
+ "linkLatency": 0,
+ "linkLatencyVariation": 0,
+ "linkThroughput": 1000,
+ "linkPacketLoss": 0,
+ "processes": [
+ {
+ "id": "5c8276ba-0b78-429d-a0bf-d96f35ba2c77",
+ "name": "zone2-edge1-iperf",
+ "type": "EDGE-APP",
+ "isExternal": false,
+ "userChartLocation": null,
+ "userChartAlternateValues": null,
+ "userChartGroup": null,
+ "image": "meep-docker-registry:30001/iperf-server",
+ "environment": "",
+ "commandArguments": "-c, export; iperf -s -p $IPERF_SERVICE_PORT;",
+ "commandExe": "/bin/bash",
+ "serviceConfig": {
+ "name": "zone2-edge1-iperf",
+ "meSvcName": "iperf",
+ "ports": [
+ {
+ "protocol": "UDP",
+ "port": 80,
+ "externalPort": null
+ }
+ ]
+ },
+ "gpuConfig": null,
+ "externalConfig": null,
+ "appLatency": 0,
+ "appLatencyVariation": 0,
+ "appThroughput": 1000,
+ "appPacketLoss": 0,
+ "placementId": ""
+ },
+ {
+ "id": "53fa28f0-80e2-414c-8841-86db9bd37d51",
+ "name": "zone2-edge1-svc",
+ "type": "EDGE-APP",
+ "isExternal": false,
+ "userChartLocation": null,
+ "userChartAlternateValues": null,
+ "userChartGroup": null,
+ "image": "meep-docker-registry:30001/demo-server",
+ "environment": "MGM_GROUP_NAME=svc, MGM_APP_ID=zone2-edge1-svc, MGM_APP_PORT=80",
+ "commandArguments": "",
+ "commandExe": "",
+ "serviceConfig": {
+ "name": "zone2-edge1-svc",
+ "meSvcName": "svc",
+ "ports": [
+ {
+ "protocol": "TCP",
+ "port": 80,
+ "externalPort": null
+ }
+ ]
+ },
+ "gpuConfig": null,
+ "externalConfig": null,
+ "appLatency": 0,
+ "appLatencyVariation": 0,
+ "appThroughput": 1000,
+ "appPacketLoss": 0,
+ "placementId": ""
+ }
+ ],
+ "label": "zone2-edge1"
+ }
+ ]
+ },
+ {
+ "id": "c44b8937-58af-44b2-acdb-e4d1c4a1510b",
+ "name": "zone2-poa1",
+ "type": "POA",
+ "terminalLinkLatency": 1,
+ "terminalLinkLatencyVariation": 1,
+ "terminalLinkThroughput": 20,
+ "terminalLinkPacketLoss": 0,
+ "physicalLocations": [],
+ "label": "zone2-poa1"
+ }
+ ],
+ "label": "zone2"
+ }
+ ],
+ "cellularDomainConfig": {
+ "mcc": "123",
+ "mnc": "456",
+ "defaultCellId": "1234567"
+ }
+ }
+ ]
+ }
+}
+`
+
+const redisTestAddr = "localhost:30380"
+const influxTestAddr = "http://localhost:30986"
+const postgisTestHost = "localhost"
+const postgisTestPort = "30432"
+const testScenarioName = "testScenario"
+
+var m *mod.Model
+var mqLocal *mq.MsgQueue
+
+func TestZonalSuccessSubscription(t *testing.T) {
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ initializeVars()
+
+ err := Init()
+ if err != nil {
+ t.Fatalf("Error initializing test basic procedure")
+ }
+ err = Run()
+ if err != nil {
+ t.Fatalf("Error running test basic procedure")
+ }
+
+ fmt.Println("Set a scenario")
+ initialiseScenario(testScenario)
+
+ //post
+ expectedGetResp := testZonalSubscriptionPost(t)
+
+ //get
+ testZonalSubscriptionGet(t, strconv.Itoa(nextZonalSubscriptionIdAvailable-1), expectedGetResp)
+
+ //put
+ expectedGetResp = testZonalSubscriptionPut(t, strconv.Itoa(nextZonalSubscriptionIdAvailable-1), true)
+
+ //get
+ testZonalSubscriptionGet(t, strconv.Itoa(nextZonalSubscriptionIdAvailable-1), expectedGetResp)
+
+ //delete
+ testZonalSubscriptionDelete(t, strconv.Itoa(nextZonalSubscriptionIdAvailable-1))
+
+ terminateScenario()
+}
+
+func TestFailZonalSubscription(t *testing.T) {
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ initializeVars()
+
+ err := Init()
+ if err != nil {
+ t.Fatalf("Error initializing test basic procedure")
+ }
+ err = Run()
+ if err != nil {
+ t.Fatalf("Error running test basic procedure")
+ }
+
+ fmt.Println("Set a scenario")
+ initialiseScenario(testScenario)
+
+ //get
+ testZonalSubscriptionGet(t, strconv.Itoa(nextZonalSubscriptionIdAvailable), "")
+
+ //put
+ _ = testZonalSubscriptionPut(t, strconv.Itoa(nextZonalSubscriptionIdAvailable), false)
+
+ //delete
+ testZonalSubscriptionDelete(t, strconv.Itoa(nextZonalSubscriptionIdAvailable))
+
+ terminateScenario()
+}
+
+func TestZonalSubscriptionsListGet(t *testing.T) {
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ initializeVars()
+
+ err := Init()
+ if err != nil {
+ t.Fatalf("Error initializing test basic procedure")
+ }
+ err = Run()
+ if err != nil {
+ t.Fatalf("Error running test basic procedure")
+ }
+
+ fmt.Println("Set a scenario")
+ initialiseScenario(testScenario)
+
+ //post
+ _ = testZonalSubscriptionPost(t)
+
+ //get list
+ testZonalSubscriptionList(t)
+
+ //delete
+ testZonalSubscriptionDelete(t, strconv.Itoa(nextZonalSubscriptionIdAvailable-1))
+
+ terminateScenario()
+}
+
+func testZonalSubscriptionList(t *testing.T) {
+ /******************************
+ * expected response section
+ ******************************/
+ expectedSubscriptionNb := 1
+
+ /******************************
+ * request vars section
+ ******************************/
+
+ /******************************
+ * request body section
+ ******************************/
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+
+ rr, err := sendRequest(http.MethodGet, "/subscriptions/zonalTraffic", nil, nil, nil, http.StatusOK, ZonalTrafficSubGet)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ var respBody ResponseZonalTrafficNotificationSubscriptionList
+ err = json.Unmarshal([]byte(rr), &respBody)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ nb := len(respBody.NotificationSubscriptionList.ZonalTrafficSubscription)
+
+ if nb != expectedSubscriptionNb {
+ t.Fatalf("Failed to get expected response")
+ }
+}
+
+func testZonalSubscriptionPost(t *testing.T) string {
+
+ /******************************
+ * expected response section
+ ******************************/
+ requestClientCorrelator := "123"
+ requestCallbackReference := "myCallbackRef"
+ requestZoneId := "zone1"
+ requestUserEvent := []UserEventType{ENTERING, TRANSFERRING}
+ requestDuration := "0"
+ requestResourceURL := "/" + testScenarioName + "/location/v1/subscriptions/zonalTraffic/" + strconv.Itoa(nextZonalSubscriptionIdAvailable)
+
+ expectedZonalTrafficSubscription := ZonalTrafficSubscription{requestClientCorrelator, &UserTrackingSubscriptionCallbackReference{requestCallbackReference}, requestZoneId, nil, requestUserEvent, requestDuration, requestResourceURL}
+
+ expectedResponse := ResponseZonalTrafficSubscription{&expectedZonalTrafficSubscription}
+ expectedResponseStr, err := json.Marshal(expectedResponse)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ /******************************
+ * request vars section
+ ******************************/
+
+ /******************************
+ * request body section
+ ******************************/
+ body, err := json.Marshal(expectedZonalTrafficSubscription)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+
+ rr, err := sendRequest(http.MethodPost, "/subscriptions/zonalTraffic", bytes.NewBuffer(body), nil, nil, http.StatusCreated, ZonalTrafficSubPost)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ var respBody ResponseZonalTrafficSubscription
+ err = json.Unmarshal([]byte(rr), &respBody)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ if rr != string(expectedResponseStr) {
+ t.Fatalf("Failed to get expected response")
+ }
+ return string(expectedResponseStr)
+}
+
+func testZonalSubscriptionPut(t *testing.T, subscriptionId string, expectSuccess bool) string {
+
+ /******************************
+ * expected response section
+ ******************************/
+ requestClientCorrelator := "123"
+ requestCallbackReference := "myCallbackRef"
+ requestZoneId := "zone1"
+ requestUserEvent := []UserEventType{ENTERING, TRANSFERRING}
+ requestDuration := "0"
+ requestResourceURL := "/" + testScenarioName + "/location/v1/subscriptions/zonalTraffic/" + subscriptionId
+
+ expectedZonalTrafficSubscription := ZonalTrafficSubscription{requestClientCorrelator, &UserTrackingSubscriptionCallbackReference{requestCallbackReference}, requestZoneId, nil, requestUserEvent, requestDuration, requestResourceURL}
+
+ expectedResponse := ResponseZonalTrafficSubscription{&expectedZonalTrafficSubscription}
+ expectedResponseStr, err := json.Marshal(expectedResponse)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ /******************************
+ * request vars section
+ ******************************/
+ vars := make(map[string]string)
+ vars["subscriptionId"] = subscriptionId
+
+ /******************************
+ * request body section
+ ******************************/
+ body, err := json.Marshal(expectedZonalTrafficSubscription)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+
+ if expectSuccess {
+ rr, err := sendRequest(http.MethodPost, "/subscriptions/zonalTraffic", bytes.NewBuffer(body), vars, nil, http.StatusOK, ZonalTrafficSubPutById)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ var respBody ResponseZonalTrafficSubscription
+ err = json.Unmarshal([]byte(rr), &respBody)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ if rr != string(expectedResponseStr) {
+ t.Fatalf("Failed to get expected response")
+ }
+ return string(expectedResponseStr)
+ } else {
+ _, err = sendRequest(http.MethodPost, "/subscriptions/zonalTraffic", bytes.NewBuffer(body), vars, nil, http.StatusOK, ZonalTrafficSubPutById)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ return ""
+ }
+}
+
+func testZonalSubscriptionGet(t *testing.T, subscriptionId string, expectedResponse string) {
+
+ /******************************
+ * expected response section
+ ******************************/
+ //passed as a parameter since a POST had to be sent first
+
+ /******************************
+ * request vars section
+ ******************************/
+ vars := make(map[string]string)
+ vars["subscriptionId"] = subscriptionId
+
+ /******************************
+ * request body section
+ ******************************/
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+ var err error
+ if expectedResponse == "" {
+ _, err = sendRequest(http.MethodGet, "/subscriptions/zonalTraffic", nil, vars, nil, http.StatusNotFound, ZonalTrafficSubGetById)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ } else {
+ rr, err := sendRequest(http.MethodGet, "/subscriptions/zonalTraffic", nil, vars, nil, http.StatusOK, ZonalTrafficSubGetById)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ var respBody ResponseZoneInfo
+ err = json.Unmarshal([]byte(rr), &respBody)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ if rr != expectedResponse {
+ t.Fatalf("Failed to get expected response")
+ }
+ }
+}
+
+func testZonalSubscriptionDelete(t *testing.T, subscriptionId string) {
+
+ /******************************
+ * expected response section
+ ******************************/
+
+ /******************************
+ * request vars section
+ ******************************/
+ vars := make(map[string]string)
+ vars["subscriptionId"] = subscriptionId
+
+ /******************************
+ * request body section
+ ******************************/
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+
+ _, err := sendRequest(http.MethodDelete, "/subscriptions/zonalTraffic", nil, vars, nil, http.StatusNoContent, ZonalTrafficSubDelById)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+}
+
+func TestUserSuccessSubscription(t *testing.T) {
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ initializeVars()
+
+ err := Init()
+ if err != nil {
+ t.Fatalf("Error initializing test basic procedure")
+ }
+ err = Run()
+ if err != nil {
+ t.Fatalf("Error running test basic procedure")
+ }
+
+ fmt.Println("Set a scenario")
+ initialiseScenario(testScenario)
+
+ //post
+ expectedGetResp := testUserSubscriptionPost(t)
+
+ //get
+ testUserSubscriptionGet(t, strconv.Itoa(nextUserSubscriptionIdAvailable-1), expectedGetResp)
+
+ //put
+ expectedGetResp = testUserSubscriptionPut(t, strconv.Itoa(nextUserSubscriptionIdAvailable-1), true)
+
+ //get
+ testUserSubscriptionGet(t, strconv.Itoa(nextUserSubscriptionIdAvailable-1), expectedGetResp)
+
+ //delete
+ testUserSubscriptionDelete(t, strconv.Itoa(nextUserSubscriptionIdAvailable-1))
+
+ terminateScenario()
+}
+
+func TestFailUserSubscription(t *testing.T) {
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ initializeVars()
+
+ err := Init()
+ if err != nil {
+ t.Fatalf("Error initializing test basic procedure")
+ }
+ err = Run()
+ if err != nil {
+ t.Fatalf("Error running test basic procedure")
+ }
+
+ fmt.Println("Set a scenario")
+ initialiseScenario(testScenario)
+
+ //get
+ testUserSubscriptionGet(t, strconv.Itoa(nextUserSubscriptionIdAvailable), "")
+
+ //put
+ _ = testUserSubscriptionPut(t, strconv.Itoa(nextUserSubscriptionIdAvailable), false)
+
+ //delete
+ testUserSubscriptionDelete(t, strconv.Itoa(nextUserSubscriptionIdAvailable))
+
+ terminateScenario()
+}
+
+func TestUserSubscriptionsListGet(t *testing.T) {
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ initializeVars()
+
+ err := Init()
+ if err != nil {
+ t.Fatalf("Error initializing test basic procedure")
+ }
+ err = Run()
+ if err != nil {
+ t.Fatalf("Error running test basic procedure")
+ }
+
+ fmt.Println("Set a scenario")
+ initialiseScenario(testScenario)
+
+ //post
+ _ = testUserSubscriptionPost(t)
+
+ //get list
+ testUserSubscriptionList(t)
+
+ //delete
+ testUserSubscriptionDelete(t, strconv.Itoa(nextUserSubscriptionIdAvailable-1))
+
+ terminateScenario()
+}
+
+func testUserSubscriptionList(t *testing.T) {
+ /******************************
+ * expected response section
+ ******************************/
+ expectedSubscriptionNb := 1
+
+ /******************************
+ * request vars section
+ ******************************/
+
+ /******************************
+ * request body section
+ ******************************/
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+
+ rr, err := sendRequest(http.MethodGet, "/subscriptions/userTracking", nil, nil, nil, http.StatusOK, UserTrackingSubGet)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ var respBody ResponseUserTrackingNotificationSubscriptionList
+ err = json.Unmarshal([]byte(rr), &respBody)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ nb := len(respBody.NotificationSubscriptionList.UserTrackingSubscription)
+
+ if nb != expectedSubscriptionNb {
+ t.Fatalf("Failed to get expected response")
+ }
+}
+
+func testUserSubscriptionPost(t *testing.T) string {
+
+ /******************************
+ * expected response section
+ ******************************/
+ requestClientCorrelator := "123"
+ requestCallbackReference := "myCallbackRef"
+ requestAddr := "myAddr"
+ requestUserEvent := []UserEventType{ENTERING, TRANSFERRING}
+ requestResourceURL := "/" + testScenarioName + "/location/v1/subscriptions/userTracking/" + strconv.Itoa(nextUserSubscriptionIdAvailable)
+
+ expectedUserTrackingSubscription := UserTrackingSubscription{requestClientCorrelator, &UserTrackingSubscriptionCallbackReference{requestCallbackReference}, requestAddr, requestUserEvent, requestResourceURL}
+
+ expectedResponse := ResponseUserTrackingSubscription{&expectedUserTrackingSubscription}
+ expectedResponseStr, err := json.Marshal(expectedResponse)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ /******************************
+ * request vars section
+ ******************************/
+
+ /******************************
+ * request body section
+ ******************************/
+ body, err := json.Marshal(expectedUserTrackingSubscription)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+
+ rr, err := sendRequest(http.MethodPost, "/subscriptions/userTracking", bytes.NewBuffer(body), nil, nil, http.StatusCreated, UserTrackingSubPost)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ var respBody ResponseUserTrackingSubscription
+ err = json.Unmarshal([]byte(rr), &respBody)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ if rr != string(expectedResponseStr) {
+ t.Fatalf("Failed to get expected response")
+ }
+ return string(expectedResponseStr)
+}
+
+func testUserSubscriptionPut(t *testing.T, subscriptionId string, expectSuccess bool) string {
+
+ /******************************
+ * expected response section
+ ******************************/
+ requestClientCorrelator := "123"
+ requestCallbackReference := "myCallbackRef"
+ requestAddr := "myAddr"
+ requestUserEvent := []UserEventType{ENTERING, TRANSFERRING}
+ requestResourceURL := "/" + testScenarioName + "/location/v1/subscriptions/userTracking/" + subscriptionId
+
+ expectedUserTrackingSubscription := UserTrackingSubscription{requestClientCorrelator, &UserTrackingSubscriptionCallbackReference{requestCallbackReference}, requestAddr, requestUserEvent, requestResourceURL}
+
+ expectedResponse := ResponseUserTrackingSubscription{&expectedUserTrackingSubscription}
+
+ expectedResponseStr, err := json.Marshal(expectedResponse)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ /******************************
+ * request vars section
+ ******************************/
+ vars := make(map[string]string)
+ vars["subscriptionId"] = subscriptionId
+
+ /******************************
+ * request body section
+ ******************************/
+ body, err := json.Marshal(expectedUserTrackingSubscription)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+
+ if expectSuccess {
+ rr, err := sendRequest(http.MethodPost, "/subscriptions/userTracking", bytes.NewBuffer(body), vars, nil, http.StatusOK, UserTrackingSubPutById)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ var respBody ResponseUserTrackingSubscription
+ err = json.Unmarshal([]byte(rr), &respBody)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ if rr != string(expectedResponseStr) {
+ t.Fatalf("Failed to get expected response")
+ }
+ return string(expectedResponseStr)
+ } else {
+ _, err = sendRequest(http.MethodPost, "/subscriptions/userTracking", bytes.NewBuffer(body), vars, nil, http.StatusOK, UserTrackingSubPutById)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ return ""
+ }
+}
+
+func testUserSubscriptionGet(t *testing.T, subscriptionId string, expectedResponse string) {
+
+ /******************************
+ * expected response section
+ ******************************/
+ //passed as a parameter since a POST had to be sent first
+
+ /******************************
+ * request vars section
+ ******************************/
+ vars := make(map[string]string)
+ vars["subscriptionId"] = subscriptionId
+
+ /******************************
+ * request body section
+ ******************************/
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+ var err error
+ if expectedResponse == "" {
+ _, err = sendRequest(http.MethodGet, "/subscriptions/userTracking", nil, vars, nil, http.StatusNotFound, UserTrackingSubGetById)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ } else {
+ rr, err := sendRequest(http.MethodGet, "/subscriptions/userTracking", nil, vars, nil, http.StatusOK, UserTrackingSubGetById)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ var respBody ResponseUserInfo
+ err = json.Unmarshal([]byte(rr), &respBody)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ if rr != expectedResponse {
+ t.Fatalf("Failed to get expected response")
+ }
+ }
+}
+
+func testUserSubscriptionDelete(t *testing.T, subscriptionId string) {
+
+ /******************************
+ * expected response section
+ ******************************/
+
+ /******************************
+ * request vars section
+ ******************************/
+ vars := make(map[string]string)
+ vars["subscriptionId"] = subscriptionId
+
+ /******************************
+ * request body section
+ ******************************/
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+
+ _, err := sendRequest(http.MethodDelete, "/subscriptions/userTracking", nil, vars, nil, http.StatusNoContent, UserTrackingSubDelById)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+}
+
+func TestZoneStatusSuccessSubscription(t *testing.T) {
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ initializeVars()
+
+ err := Init()
+ if err != nil {
+ t.Fatalf("Error initializing test basic procedure")
+ }
+ err = Run()
+ if err != nil {
+ t.Fatalf("Error running test basic procedure")
+ }
+
+ fmt.Println("Set a scenario")
+ initialiseScenario(testScenario)
+
+ //post
+ expectedGetResp := testZoneStatusSubscriptionPost(t)
+
+ //get
+ testZoneStatusSubscriptionGet(t, strconv.Itoa(nextZoneStatusSubscriptionIdAvailable-1), expectedGetResp)
+
+ //put
+ expectedGetResp = testZoneStatusSubscriptionPut(t, strconv.Itoa(nextZoneStatusSubscriptionIdAvailable-1), true)
+
+ //get
+ testZoneStatusSubscriptionGet(t, strconv.Itoa(nextZoneStatusSubscriptionIdAvailable-1), expectedGetResp)
+
+ //delete
+ testZoneStatusSubscriptionDelete(t, strconv.Itoa(nextZoneStatusSubscriptionIdAvailable-1))
+
+ terminateScenario()
+}
+
+func TestFailZoneStatusSubscription(t *testing.T) {
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ initializeVars()
+
+ err := Init()
+ if err != nil {
+ t.Fatalf("Error initializing test basic procedure")
+ }
+ err = Run()
+ if err != nil {
+ t.Fatalf("Error running test basic procedure")
+ }
+
+ fmt.Println("Set a scenario")
+ initialiseScenario(testScenario)
+
+ //get
+ testZoneStatusSubscriptionGet(t, strconv.Itoa(nextZoneStatusSubscriptionIdAvailable), "")
+
+ //put
+ _ = testZoneStatusSubscriptionPut(t, strconv.Itoa(nextZoneStatusSubscriptionIdAvailable), false)
+
+ //delete
+ testZoneStatusSubscriptionDelete(t, strconv.Itoa(nextZoneStatusSubscriptionIdAvailable))
+
+ terminateScenario()
+}
+
+func TestZoneStatusSubscriptionsListGet(t *testing.T) {
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ initializeVars()
+
+ err := Init()
+ if err != nil {
+ t.Fatalf("Error initializing test basic procedure")
+ }
+ err = Run()
+ if err != nil {
+ t.Fatalf("Error running test basic procedure")
+ }
+
+ fmt.Println("Set a scenario")
+ initialiseScenario(testScenario)
+
+ //post
+ _ = testZoneStatusSubscriptionPost(t)
+
+ //get list
+ testZoneStatusSubscriptionList(t)
+
+ //delete
+ testZoneStatusSubscriptionDelete(t, strconv.Itoa(nextZoneStatusSubscriptionIdAvailable-1))
+
+ terminateScenario()
+}
+
+func testZoneStatusSubscriptionList(t *testing.T) {
+ /******************************
+ * expected response section
+ ******************************/
+ expectedSubscriptionNb := 1
+
+ /******************************
+ * request vars section
+ ******************************/
+
+ /******************************
+ * request body section
+ ******************************/
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+
+ rr, err := sendRequest(http.MethodGet, "/subscriptions/zoneStatus", nil, nil, nil, http.StatusOK, ZoneStatusGet)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ var respBody ResponseZoneStatusNotificationSubscriptionList
+ err = json.Unmarshal([]byte(rr), &respBody)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ nb := len(respBody.NotificationSubscriptionList.ZoneStatusSubscription)
+
+ if nb != expectedSubscriptionNb {
+ t.Fatalf("Failed to get expected response")
+ }
+}
+
+func testZoneStatusSubscriptionPost(t *testing.T) string {
+
+ /******************************
+ * expected response section
+ ******************************/
+ requestClientCorrelator := "123"
+ requestCallbackReference := "myCallbackRef"
+ requestZoneId := "zone1"
+ requestOperationStatus := []OperationStatus{SERVICEABLE}
+ requestNumberOfUsersZoneThreshold := int32(10)
+ requestNumberOfUsersAPThreshold := int32(8)
+ requestResourceURL := "/" + testScenarioName + "/location/v1/subscriptions/zoneStatus/" + strconv.Itoa(nextZoneStatusSubscriptionIdAvailable)
+
+ expectedZoneStatusSubscription := ZoneStatusSubscription{requestClientCorrelator, requestResourceURL, &UserTrackingSubscriptionCallbackReference{requestCallbackReference}, requestZoneId, requestNumberOfUsersZoneThreshold, requestNumberOfUsersAPThreshold, requestOperationStatus}
+
+ expectedResponse := ResponseZoneStatusSubscription2{&expectedZoneStatusSubscription}
+ expectedResponseStr, err := json.Marshal(expectedResponse)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ /******************************
+ * request vars section
+ ******************************/
+
+ /******************************
+ * request body section
+ ******************************/
+ body, err := json.Marshal(expectedZoneStatusSubscription)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+ rr, err := sendRequest(http.MethodPost, "/subscriptions/zoneStatus", bytes.NewBuffer(body), nil, nil, http.StatusCreated, ZoneStatusPost)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ var respBody ResponseZoneStatusSubscription2
+ err = json.Unmarshal([]byte(rr), &respBody)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ if rr != string(expectedResponseStr) {
+ t.Fatalf("Failed to get expected response")
+ }
+ return string(expectedResponseStr)
+}
+
+func testZoneStatusSubscriptionPut(t *testing.T, subscriptionId string, expectSuccess bool) string {
+
+ /******************************
+ * expected response section
+ ******************************/
+ requestClientCorrelator := "123"
+ requestCallbackReference := "myCallbackRef"
+ requestZoneId := "zone1"
+ requestOperationStatus := []OperationStatus{SERVICEABLE}
+ requestNumberOfUsersZoneThreshold := int32(10)
+ requestNumberOfUsersAPThreshold := int32(8)
+ requestResourceURL := "/" + testScenarioName + "/location/v1/subscriptions/zoneStatus/" + subscriptionId
+
+ expectedZoneStatusSubscription := ZoneStatusSubscription{requestClientCorrelator, requestResourceURL, &UserTrackingSubscriptionCallbackReference{requestCallbackReference}, requestZoneId, requestNumberOfUsersZoneThreshold, requestNumberOfUsersAPThreshold, requestOperationStatus}
+
+ expectedResponse := ResponseZoneStatusSubscription2{&expectedZoneStatusSubscription}
+ expectedResponseStr, err := json.Marshal(expectedResponse)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ /******************************
+ * request vars section
+ ******************************/
+ vars := make(map[string]string)
+ vars["subscriptionId"] = subscriptionId
+
+ /******************************
+ * request body section
+ ******************************/
+ body, err := json.Marshal(expectedZoneStatusSubscription)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+
+ if expectSuccess {
+ rr, err := sendRequest(http.MethodPost, "/subscriptions/zoneStatus", bytes.NewBuffer(body), vars, nil, http.StatusOK, ZoneStatusPutById)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ var respBody ResponseZoneStatusSubscription2
+ err = json.Unmarshal([]byte(rr), &respBody)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ if rr != string(expectedResponseStr) {
+ t.Fatalf("Failed to get expected response")
+ }
+ return string(expectedResponseStr)
+ } else {
+ _, err = sendRequest(http.MethodPost, "/subscriptions/zoneStatus", bytes.NewBuffer(body), vars, nil, http.StatusOK, ZoneStatusPutById)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ return ""
+ }
+}
+
+func testZoneStatusSubscriptionGet(t *testing.T, subscriptionId string, expectedResponse string) {
+
+ /******************************
+ * expected response section
+ ******************************/
+ //passed as a parameter since a POST had to be sent first
+
+ /******************************
+ * request vars section
+ ******************************/
+ vars := make(map[string]string)
+ vars["subscriptionId"] = subscriptionId
+
+ /******************************
+ * request body section
+ ******************************/
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+ var err error
+ if expectedResponse == "" {
+ _, err = sendRequest(http.MethodGet, "/subscriptions/zoneStatus", nil, vars, nil, http.StatusNotFound, ZoneStatusGetById)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ } else {
+ rr, err := sendRequest(http.MethodGet, "/subscriptions/zoneStatus", nil, vars, nil, http.StatusOK, ZoneStatusGetById)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ var respBody ResponseZoneStatusSubscription2
+ err = json.Unmarshal([]byte(rr), &respBody)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ if rr != expectedResponse {
+ t.Fatalf("Failed to get expected response")
+ }
+ }
+}
+
+func testZoneStatusSubscriptionDelete(t *testing.T, subscriptionId string) {
+
+ /******************************
+ * expected response section
+ ******************************/
+
+ /******************************
+ * request vars section
+ ******************************/
+ vars := make(map[string]string)
+ vars["subscriptionId"] = subscriptionId
+
+ /******************************
+ * request body section
+ ******************************/
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+
+ _, err := sendRequest(http.MethodDelete, "/subscriptions/zoneStatus", nil, vars, nil, http.StatusNoContent, ZoneStatusDelById)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+}
+
+func TestUserInfo(t *testing.T) {
+
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ initializeVars()
+
+ err := Init()
+ if err != nil {
+ t.Fatalf("Error initializing test basic procedure")
+ }
+ err = Run()
+ if err != nil {
+ t.Fatalf("Error running test basic procedure")
+ }
+
+ fmt.Println("Set a scenario")
+ initialiseScenario(testScenario)
+
+ /******************************
+ * expected response section
+ ******************************/
+ expectedUserInfo := UserInfo{"ue1", "zone1-poa-cell1", "zone1", "", nil, "", ""}
+
+ expectedResponseStr, err := json.Marshal(expectedUserInfo)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ testUserInfo(t, expectedUserInfo.Address, string(expectedResponseStr))
+
+ testUserInfo(t, "ue-unknown", "")
+
+ /******************************
+ * back to initial state section
+ ******************************/
+ terminateScenario()
+
+}
+
+func testUserInfo(t *testing.T, userId string, expectedResponse string) {
+ /******************************
+ * expected response section
+ ******************************/
+
+ /******************************
+ * request vars section
+ ******************************/
+ vars := make(map[string]string)
+ vars["userId"] = userId
+
+ /******************************
+ * request body section
+ ******************************/
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+
+ var err error
+ if expectedResponse == "" {
+ _, err = sendRequest(http.MethodGet, "/users", nil, vars, nil, http.StatusNotFound, UsersGetById)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ } else {
+ rr, err := sendRequest(http.MethodGet, "/users", nil, vars, nil, http.StatusOK, UsersGetById)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ var respBody ResponseUserInfo
+ err = json.Unmarshal([]byte(rr), &respBody)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ //need to remove the resourec url since it was not given in the expected response
+ respBody.UserInfo.ResourceURL = ""
+ receivedResponseStr, err := json.Marshal(respBody.UserInfo)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ if string(receivedResponseStr) != expectedResponse {
+ t.Fatalf("Failed to get expected response")
+ }
+ }
+}
+
+func TestZoneInfo(t *testing.T) {
+
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ initializeVars()
+
+ err := Init()
+ if err != nil {
+ t.Fatalf("Error initializing test basic procedure")
+ }
+ err = Run()
+ if err != nil {
+ t.Fatalf("Error running test basic procedure")
+ }
+
+ fmt.Println("Set a scenario")
+ initialiseScenario(testScenario)
+
+ /******************************
+ * expected response section
+ ******************************/
+ expectedZoneInfo := ZoneInfo{"zone1", 2, 0, 2, ""}
+
+ expectedResponseStr, err := json.Marshal(expectedZoneInfo)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ testZoneInfo(t, expectedZoneInfo.ZoneId, string(expectedResponseStr))
+
+ testZoneInfo(t, "zone-unknown", "")
+
+ /******************************
+ * back to initial state section
+ ******************************/
+ terminateScenario()
+
+}
+
+func testZoneInfo(t *testing.T, zoneId string, expectedResponse string) {
+ /******************************
+ * expected response section
+ ******************************/
+
+ /******************************
+ * request vars section
+ ******************************/
+ vars := make(map[string]string)
+ vars["zoneId"] = zoneId
+
+ /******************************
+ * request body section
+ ******************************/
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+
+ var err error
+ if expectedResponse == "" {
+ _, err = sendRequest(http.MethodGet, "/zones", nil, vars, nil, http.StatusNotFound, ZonesGetById)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ } else {
+ rr, err := sendRequest(http.MethodGet, "/zones", nil, vars, nil, http.StatusOK, ZonesGetById)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ var respBody ResponseZoneInfo
+ err = json.Unmarshal([]byte(rr), &respBody)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ //need to remove the resourec url since it was not given in the expected response
+ respBody.ZoneInfo.ResourceURL = ""
+ receivedResponseStr, err := json.Marshal(respBody.ZoneInfo)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ if string(receivedResponseStr) != expectedResponse {
+ t.Fatalf("Failed to get expected response")
+ }
+ }
+}
+
+func TestAPInfo(t *testing.T) {
+
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ initializeVars()
+
+ err := Init()
+ if err != nil {
+ t.Fatalf("Error initializing test basic procedure")
+ }
+ err = Run()
+ if err != nil {
+ t.Fatalf("Error running test basic procedure")
+ }
+
+ fmt.Println("Set a scenario")
+ initialiseScenario(testScenario)
+
+ /******************************
+ * expected response section
+ ******************************/
+ expectedConnType := CONTYPE_UNKNOWN
+ expectedOpStatus := OPSTATUS_UNKNOWN
+ expectedTimeZone := time.Time{}
+ expectedAPInfo := AccessPointInfo{"zone1-poa-cell1", nil, &expectedConnType, &expectedOpStatus, 2, expectedTimeZone, "", ""}
+
+ expectedResponseStr, err := json.Marshal(expectedAPInfo)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ testAPInfo(t, "zone1", expectedAPInfo.AccessPointId, string(expectedResponseStr))
+
+ testAPInfo(t, "ap-unknown", "ap-unknown", "")
+
+ /******************************
+ * back to initial state section
+ ******************************/
+ terminateScenario()
+
+}
+
+func testAPInfo(t *testing.T, zoneId string, apId string, expectedResponse string) {
+ /******************************
+ * expected response section
+ ******************************/
+
+ /******************************
+ * request vars section
+ ******************************/
+ vars := make(map[string]string)
+ vars["zoneId"] = zoneId
+ vars["accessPointId"] = apId
+
+ /******************************
+ * request body section
+ ******************************/
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+
+ var err error
+ if expectedResponse == "" {
+ _, err = sendRequest(http.MethodGet, "/zones/"+zoneId+"/accessPoints", nil, vars, nil, http.StatusNotFound, ZonesByIdGetApsById)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ } else {
+ rr, err := sendRequest(http.MethodGet, "/zones"+zoneId+"/accessPoints", nil, vars, nil, http.StatusOK, ZonesByIdGetApsById)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ var respBody ResponseAccessPointInfo
+ err = json.Unmarshal([]byte(rr), &respBody)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ //need to remove the resourec url since it was not given in the expected response
+ respBody.AccessPointInfo.ResourceURL = ""
+ receivedResponseStr, err := json.Marshal(respBody.AccessPointInfo)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ if string(receivedResponseStr) != expectedResponse {
+ t.Fatalf("Failed to get expected response")
+ }
+ }
+}
+
+func TestUserSubscriptionNotification(t *testing.T) {
+
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ initializeVars()
+
+ err := Init()
+ if err != nil {
+ t.Fatalf("Error initializing test basic procedure")
+ }
+ err = Run()
+ if err != nil {
+ t.Fatalf("Error running test basic procedure")
+ }
+
+ fmt.Println("Set a scenario")
+ initialiseScenario(testScenario)
+
+ /******************************
+ * expected response section
+ ******************************/
+
+ //as a result of mobility event, expected result from the notification
+ expectedZoneId := "zone2"
+ expectedPoa := "zone2-poa1"
+ expectedAddr := "ue1"
+
+ requestClientCorrelator := "123"
+ requestCallbackReference := "myCallbackRef"
+ requestAddr := "ue1"
+ requestUserEvent := []UserEventType{ENTERING, TRANSFERRING}
+ requestResourceURL := ""
+
+ expectedUserTrackingSubscription := UserTrackingSubscription{requestClientCorrelator, &UserTrackingSubscriptionCallbackReference{requestCallbackReference}, requestAddr, requestUserEvent, requestResourceURL}
+
+ /*expectedResponse := ResponseUserTrackingSubscription{&expectedUserTrackingSubscription}
+ expectedResponseStr, err := json.Marshal(expectedResponse)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+ */
+ /******************************
+ * request vars section
+ ******************************/
+
+ /******************************
+ * request body section
+ ******************************/
+ body, err := json.Marshal(expectedUserTrackingSubscription)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+ _, err = sendRequest(http.MethodPost, "/subscriptions/userTracking", bytes.NewBuffer(body), nil, nil, http.StatusCreated, UserTrackingSubPost)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ updateScenario("mobility1")
+
+ fmt.Println("Create valid Metric Store")
+ metricStore, err := ms.NewMetricStore(currentStoreName, sandboxName, influxTestAddr, redisTestAddr)
+ if err != nil {
+ t.Fatalf("Failed to create a store")
+ }
+
+ httpLog, err := metricStore.GetHttpMetric(logModuleLocServ, "TX", "", 1)
+ if err != nil || len(httpLog) != 1 {
+ t.Fatalf("Failed to get metric")
+ }
+
+ var notification locNotif.TrackingNotification
+ err = json.Unmarshal([]byte(httpLog[0].Body), ¬ification)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ if expectedZoneId != notification.ZoneId || expectedPoa != notification.CurrentAccessPointId || expectedAddr != notification.Address {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ //cleanup allocated subscription
+ testUserSubscriptionDelete(t, strconv.Itoa(nextUserSubscriptionIdAvailable-1))
+
+ /******************************
+ * back to initial state section
+ ******************************/
+ terminateScenario()
+
+}
+
+func TestZoneSubscriptionNotification(t *testing.T) {
+
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ initializeVars()
+
+ err := Init()
+ if err != nil {
+ t.Fatalf("Error initializing test basic procedure")
+ }
+ err = Run()
+ if err != nil {
+ t.Fatalf("Error running test basic procedure")
+ }
+
+ fmt.Println("Set a scenario")
+ initialiseScenario(testScenario)
+
+ /******************************
+ * expected response section
+ ******************************/
+
+ //as a result of mobility event 1 and 2, expected result from the notification
+ expectedZoneId := "zone2"
+ expectedPoa := "zone2-poa1"
+ expectedAddr := "ue1"
+
+ //as a result of mobility event 3, expected result from the notification
+ expectedZoneId2 := "zone1"
+ expectedPoa2 := "zone1-poa-cell1"
+ expectedAddr2 := "ue1"
+
+ //1st request
+ requestClientCorrelator := "123"
+ requestCallbackReference := "myCallbackRef"
+ requestZoneId := "zone2"
+ requestUserEvent := []UserEventType{ENTERING, LEAVING}
+ requestDuration := "0"
+ requestResourceURL := ""
+
+ expectedZonalTrafficSubscription := ZonalTrafficSubscription{requestClientCorrelator, &UserTrackingSubscriptionCallbackReference{requestCallbackReference}, requestZoneId, nil, requestUserEvent, requestDuration, requestResourceURL}
+
+ //2nd request
+ requestClientCorrelator = "123"
+ requestCallbackReference = "myCallbackRef"
+ requestZoneId = "zone1"
+ requestUserEvent = []UserEventType{TRANSFERRING}
+ requestDuration = "0"
+ requestResourceURL = ""
+
+ expectedZonalTrafficSubscription2 := ZonalTrafficSubscription{requestClientCorrelator, &UserTrackingSubscriptionCallbackReference{requestCallbackReference}, requestZoneId, nil, requestUserEvent, requestDuration, requestResourceURL}
+
+ /******************************
+ * request vars section
+ ******************************/
+
+ /******************************
+ * request body section
+ ******************************/
+ body, err := json.Marshal(expectedZonalTrafficSubscription)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ body2, err := json.Marshal(expectedZonalTrafficSubscription2)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+ _, err = sendRequest(http.MethodPost, "/subscriptions/zonalTraffic", bytes.NewBuffer(body), nil, nil, http.StatusCreated, ZonalTrafficSubPost)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ _, err = sendRequest(http.MethodPost, "/subscriptions/zonalTraffic", bytes.NewBuffer(body2), nil, nil, http.StatusCreated, ZonalTrafficSubPost)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ updateScenario("mobility1")
+
+ fmt.Println("Create valid Metric Store")
+ metricStore, err := ms.NewMetricStore(currentStoreName, sandboxName, influxTestAddr, redisTestAddr)
+ if err != nil {
+ t.Fatalf("Failed to create a store")
+ }
+
+ httpLog, err := metricStore.GetHttpMetric(logModuleLocServ, "TX", "", 1)
+ if err != nil || len(httpLog) != 1 {
+ t.Fatalf("Failed to get metric")
+ }
+
+ var notification locNotif.TrackingNotification
+ err = json.Unmarshal([]byte(httpLog[0].Body), ¬ification)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ if expectedZoneId != notification.ZoneId || expectedPoa != notification.CurrentAccessPointId || expectedAddr != notification.Address {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ updateScenario("mobility2")
+
+ httpLog, err = metricStore.GetHttpMetric(logModuleLocServ, "TX", "", 1)
+ if err != nil || len(httpLog) != 1 {
+ t.Fatalf("Failed to get metric")
+ }
+
+ err = json.Unmarshal([]byte(httpLog[0].Body), ¬ification)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ if expectedZoneId != notification.ZoneId || expectedPoa != notification.CurrentAccessPointId || expectedAddr != notification.Address {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ updateScenario("mobility3")
+
+ httpLog, err = metricStore.GetHttpMetric(logModuleLocServ, "TX", "", 1)
+ if err != nil || len(httpLog) != 1 {
+ t.Fatalf("Failed to get metric")
+ }
+
+ err = json.Unmarshal([]byte(httpLog[0].Body), ¬ification)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ if expectedZoneId2 != notification.ZoneId || expectedPoa2 != notification.CurrentAccessPointId || expectedAddr2 != notification.Address {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ //cleanup allocated subscription
+ testUserSubscriptionDelete(t, strconv.Itoa(nextUserSubscriptionIdAvailable-1))
+
+ /******************************
+ * back to initial state section
+ ******************************/
+ terminateScenario()
+
+}
+
+func terminateScenario() {
+ if mqLocal != nil {
+ _ = Stop()
+ msg := mqLocal.CreateMsg(mq.MsgScenarioTerminate, mq.TargetAll, testScenarioName)
+ err := mqLocal.SendMsg(msg)
+ if err != nil {
+ log.Error("Failed to send message: ", err)
+ }
+ time.Sleep(100 * time.Millisecond)
+ }
+}
+
+func updateScenario(testUpdate string) {
+
+ switch testUpdate {
+ case "mobility1":
+ // mobility event of ue1 to zone2-poa1
+ elemName := "ue1"
+ destName := "zone2-poa1"
+
+ _, _, err := m.MoveNode(elemName, destName)
+ if err != nil {
+ log.Error("Error sending mobility event")
+ }
+
+ msg := mqLocal.CreateMsg(mq.MsgScenarioUpdate, mq.TargetAll, testScenarioName)
+ err = mqLocal.SendMsg(msg)
+ if err != nil {
+ log.Error("Failed to send message: ", err)
+ }
+ case "mobility2":
+ // mobility event of ue1 to zone2-poa1
+ elemName := "ue1"
+ destName := "zone1-poa-cell2"
+
+ _, _, err := m.MoveNode(elemName, destName)
+ if err != nil {
+ log.Error("Error sending mobility event")
+ }
+
+ msg := mqLocal.CreateMsg(mq.MsgScenarioUpdate, mq.TargetAll, testScenarioName)
+ err = mqLocal.SendMsg(msg)
+ if err != nil {
+ log.Error("Failed to send message: ", err)
+ }
+ case "mobility3":
+ // mobility event of ue1 to zone2-poa1
+ elemName := "ue1"
+ destName := "zone1-poa-cell1"
+
+ _, _, err := m.MoveNode(elemName, destName)
+ if err != nil {
+ log.Error("Error sending mobility event")
+ }
+
+ msg := mqLocal.CreateMsg(mq.MsgScenarioUpdate, mq.TargetAll, testScenarioName)
+ err = mqLocal.SendMsg(msg)
+ if err != nil {
+ log.Error("Failed to send message: ", err)
+ }
+ default:
+ }
+ time.Sleep(100 * time.Millisecond)
+}
+
+func initializeVars() {
+ mod.DbAddress = redisTestAddr
+ redisAddr = redisTestAddr
+ influxAddr = influxTestAddr
+ postgisHost = postgisTestHost
+ postgisPort = postgisTestPort
+ sandboxName = testScenarioName
+}
+
+func initialiseScenario(testScenario string) {
+
+ //clear DB
+ cleanUp()
+
+ cfg := mod.ModelCfg{
+ Name: testScenarioName,
+ Namespace: sandboxName,
+ Module: "test-mod",
+ UpdateCb: nil,
+ DbAddr: redisAddr,
+ }
+
+ var err error
+ m, err = mod.NewModel(cfg)
+ if err != nil {
+ log.Error("Failed to create model: ", err)
+ return
+ }
+
+ // Create message queue
+ mqLocal, err = mq.NewMsgQueue(mq.GetLocalName(testScenarioName), "test-mod", testScenarioName, redisAddr)
+ if err != nil {
+ log.Error("Failed to create Message Queue with error: ", err)
+ return
+ }
+ log.Info("Message Queue created")
+
+ fmt.Println("Set Model")
+ err = m.SetScenario([]byte(testScenario))
+ if err != nil {
+ log.Error("Failed to set model: ", err)
+ return
+ }
+
+ err = m.Activate()
+ if err != nil {
+ log.Error("Failed to activate scenario with err: ", err.Error())
+ return
+ }
+
+ msg := mqLocal.CreateMsg(mq.MsgScenarioActivate, mq.TargetAll, testScenarioName)
+ err = mqLocal.SendMsg(msg)
+ if err != nil {
+ log.Error("Failed to send message: ", err)
+ return
+ }
+
+ time.Sleep(100 * time.Millisecond)
+
+}
+
+func sendRequest(method string, url string, body io.Reader, vars map[string]string, query map[string]string, code int, f http.HandlerFunc) (string, error) {
+ req, err := http.NewRequest(method, url, body)
+ if err != nil || req == nil {
+ return "", err
+ }
+ if vars != nil {
+ req = mux.SetURLVars(req, vars)
+ }
+ if query != nil {
+ q := req.URL.Query()
+ for k, v := range query {
+ q.Add(k, v)
+ }
+ req.URL.RawQuery = q.Encode()
+ }
+
+ // We create a ResponseRecorder (which satisfies http.ResponseWriter) to record the response.
+ rr := httptest.NewRecorder()
+ handler := http.HandlerFunc(f)
+
+ // Our handlers satisfy http.Handler, so we can call their ServeHTTP method
+ // directly and pass in our Request and ResponseRecorder.
+ handler.ServeHTTP(rr, req)
+
+ time.Sleep(50 * time.Millisecond)
+
+ // Check the status code is what we expect.
+ if status := rr.Code; status != code {
+ s := fmt.Sprintf("Wrong status code - got %v want %v", status, code)
+ return "", errors.New(s)
+ }
+ return string(rr.Body.String()), nil
+}
diff --git a/go-apps/meep-loc-serv/server/logger.go b/go-apps/meep-loc-serv/server/logger.go
index fb887a7b53e272c5da08b317290a54b4206d1cff..3649bd00a5318c4b249534821cf2215f9d8f9876 100644
--- a/go-apps/meep-loc-serv/server/logger.go
+++ b/go-apps/meep-loc-serv/server/logger.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_access_point_info.go b/go-apps/meep-loc-serv/server/model_access_point_info.go
index 130164a9b4869b1cdcb6e053536d02603151fc09..7aaa58426464ddf2c1a8c645fd55457cdfa4efca 100644
--- a/go-apps/meep-loc-serv/server/model_access_point_info.go
+++ b/go-apps/meep-loc-serv/server/model_access_point_info.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_access_point_list.go b/go-apps/meep-loc-serv/server/model_access_point_list.go
index 4ebf538bafb156ff8d53be210799a4e4341cc175..8b20a2fc546fc438e6ed43d2d39108138a5ff7c5 100644
--- a/go-apps/meep-loc-serv/server/model_access_point_list.go
+++ b/go-apps/meep-loc-serv/server/model_access_point_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_connection_type.go b/go-apps/meep-loc-serv/server/model_connection_type.go
index aa099b95a568657f767b5fb51e6e9cadc22b94dd..f3103c06d8656a353e8ab1f4d96b54a81b97890f 100644
--- a/go-apps/meep-loc-serv/server/model_connection_type.go
+++ b/go-apps/meep-loc-serv/server/model_connection_type.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_link.go b/go-apps/meep-loc-serv/server/model_link.go
index 39c4eb42c8296034ac60a5fc82ecfc1c423c23e6..045aa85d67a4eae978450692ed02001f4e46bfa2 100644
--- a/go-apps/meep-loc-serv/server/model_link.go
+++ b/go-apps/meep-loc-serv/server/model_link.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_location_info.go b/go-apps/meep-loc-serv/server/model_location_info.go
index 0d348eed6407a678382f1d2668fcc8c0cb1be0eb..196d31b86debf78b97f13617089ebaeea95d5068 100644
--- a/go-apps/meep-loc-serv/server/model_location_info.go
+++ b/go-apps/meep-loc-serv/server/model_location_info.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_operation_status.go b/go-apps/meep-loc-serv/server/model_operation_status.go
index de952c901eef77083c837457d003533ccdf4f2b0..6d9d9c6dd6bf074aba4650509371293c91d53c66 100644
--- a/go-apps/meep-loc-serv/server/model_operation_status.go
+++ b/go-apps/meep-loc-serv/server/model_operation_status.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_response_access_point_info.go b/go-apps/meep-loc-serv/server/model_response_access_point_info.go
index b2018bd7d90c826463bb63c00ff226459eaca0f5..8dec1a66354a07a8c11f2604176bfbf349254ade 100644
--- a/go-apps/meep-loc-serv/server/model_response_access_point_info.go
+++ b/go-apps/meep-loc-serv/server/model_response_access_point_info.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_response_access_point_list.go b/go-apps/meep-loc-serv/server/model_response_access_point_list.go
index ba03f637b70b457ddff802698b89ac34884f575a..f7e4cb8e101fb7d94b2177820a1f1d6ce80e5194 100644
--- a/go-apps/meep-loc-serv/server/model_response_access_point_list.go
+++ b/go-apps/meep-loc-serv/server/model_response_access_point_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_response_user_info.go b/go-apps/meep-loc-serv/server/model_response_user_info.go
index d4577e7978d2ef1da824b30a42f7cb6ac78b5371..4df5b1295ede73d33665657ca4ea1543c9cb4074 100644
--- a/go-apps/meep-loc-serv/server/model_response_user_info.go
+++ b/go-apps/meep-loc-serv/server/model_response_user_info.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_response_user_list.go b/go-apps/meep-loc-serv/server/model_response_user_list.go
index fae5ec463a7071112107a2a126533c61fab7f8a8..49effb43ddfc300ccb2069dbd8b6cf2384c48b1d 100644
--- a/go-apps/meep-loc-serv/server/model_response_user_list.go
+++ b/go-apps/meep-loc-serv/server/model_response_user_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_response_user_tracking_notification_subscription_list.go b/go-apps/meep-loc-serv/server/model_response_user_tracking_notification_subscription_list.go
index 767aa1628a6e724f2c196a00fd6550d4481a19e8..8a52bd7c71ba7bacb5acd1f91811b355024a2d77 100644
--- a/go-apps/meep-loc-serv/server/model_response_user_tracking_notification_subscription_list.go
+++ b/go-apps/meep-loc-serv/server/model_response_user_tracking_notification_subscription_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_response_user_tracking_subscription.go b/go-apps/meep-loc-serv/server/model_response_user_tracking_subscription.go
index 28ff020489a5e7b9de6c9d35b032507b4cd08a42..8f78ea96c3650ef2e5211729b3f30ed1b6fe657c 100644
--- a/go-apps/meep-loc-serv/server/model_response_user_tracking_subscription.go
+++ b/go-apps/meep-loc-serv/server/model_response_user_tracking_subscription.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_response_zonal_traffic_notification_subscription_list.go b/go-apps/meep-loc-serv/server/model_response_zonal_traffic_notification_subscription_list.go
index a56d96e085a2adabf549b32d45bc4a10661a0c0f..d238c83447fdceda6b740b692dab129782819a16 100644
--- a/go-apps/meep-loc-serv/server/model_response_zonal_traffic_notification_subscription_list.go
+++ b/go-apps/meep-loc-serv/server/model_response_zonal_traffic_notification_subscription_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_response_zonal_traffic_subscription.go b/go-apps/meep-loc-serv/server/model_response_zonal_traffic_subscription.go
index fded2ea174dead84aaeb64ed5435ba16f15bc68a..226b34253808d972066aacae5dfc949fd3d3bdd9 100644
--- a/go-apps/meep-loc-serv/server/model_response_zonal_traffic_subscription.go
+++ b/go-apps/meep-loc-serv/server/model_response_zonal_traffic_subscription.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_response_zone_info.go b/go-apps/meep-loc-serv/server/model_response_zone_info.go
index 57793756368b04f16e52ebb8a5d243f9acbb4d93..0f718e39b03f797e5a09c94131ac6dc00ee6ec75 100644
--- a/go-apps/meep-loc-serv/server/model_response_zone_info.go
+++ b/go-apps/meep-loc-serv/server/model_response_zone_info.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_response_zone_list.go b/go-apps/meep-loc-serv/server/model_response_zone_list.go
index 391f81f45db5f31cb3917e6b9c5750ef5b96f67e..9fead2988de2b3db8be1ec1dda0523feff56752b 100644
--- a/go-apps/meep-loc-serv/server/model_response_zone_list.go
+++ b/go-apps/meep-loc-serv/server/model_response_zone_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_response_zone_status_notification_subscription_list.go b/go-apps/meep-loc-serv/server/model_response_zone_status_notification_subscription_list.go
index d64ab9e2f14a65c0347828bb8b6e596020b92b13..d57b1dc8154f3ce7e199f2bfa9fb0a45c4183741 100644
--- a/go-apps/meep-loc-serv/server/model_response_zone_status_notification_subscription_list.go
+++ b/go-apps/meep-loc-serv/server/model_response_zone_status_notification_subscription_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_response_zone_status_subscription.go b/go-apps/meep-loc-serv/server/model_response_zone_status_subscription.go
index 8c055b39a096cedc5e1e114f8b006d84e5cefe7d..a8c3d40a7dd881121426ee1bd370815016d6953c 100644
--- a/go-apps/meep-loc-serv/server/model_response_zone_status_subscription.go
+++ b/go-apps/meep-loc-serv/server/model_response_zone_status_subscription.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_response_zone_status_subscription2.go b/go-apps/meep-loc-serv/server/model_response_zone_status_subscription2.go
index 5cdc040e3a30a030b36285b277c46a36b766a47f..9037031a44115cdd04540c418a319be7f6f94f92 100644
--- a/go-apps/meep-loc-serv/server/model_response_zone_status_subscription2.go
+++ b/go-apps/meep-loc-serv/server/model_response_zone_status_subscription2.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_user_event_type.go b/go-apps/meep-loc-serv/server/model_user_event_type.go
index ba5f13ab1f135e69f26a3656d56553da99524ebc..5b6d46b1eca21236499809e7405d47d4667096a3 100644
--- a/go-apps/meep-loc-serv/server/model_user_event_type.go
+++ b/go-apps/meep-loc-serv/server/model_user_event_type.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_user_info.go b/go-apps/meep-loc-serv/server/model_user_info.go
index 9b07838dde5411535b5ebe804e993d3f3c6eebcc..387d984d657d5866f4be6133b73cb087f3720493 100644
--- a/go-apps/meep-loc-serv/server/model_user_info.go
+++ b/go-apps/meep-loc-serv/server/model_user_info.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_user_list.go b/go-apps/meep-loc-serv/server/model_user_list.go
index 7c809f7bcca2b92c2bb48218d2545c1462aee267..7723b5ad24216f5b58e14b31b885bf6663e50ffd 100644
--- a/go-apps/meep-loc-serv/server/model_user_list.go
+++ b/go-apps/meep-loc-serv/server/model_user_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_user_tracking_notification_subscription_list.go b/go-apps/meep-loc-serv/server/model_user_tracking_notification_subscription_list.go
index 8798629378b629c6967df8a2053965ff8cb5980a..745332254d2a04348064f77b32a1c9dddf92fb12 100644
--- a/go-apps/meep-loc-serv/server/model_user_tracking_notification_subscription_list.go
+++ b/go-apps/meep-loc-serv/server/model_user_tracking_notification_subscription_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_user_tracking_subscription.go b/go-apps/meep-loc-serv/server/model_user_tracking_subscription.go
index 9db8fe575f118c8ac7ab87958baea8283e82b30d..ba724bb78e594e4dcae3fdd1a1458ababb5d7c93 100644
--- a/go-apps/meep-loc-serv/server/model_user_tracking_subscription.go
+++ b/go-apps/meep-loc-serv/server/model_user_tracking_subscription.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_user_tracking_subscription_callback_reference.go b/go-apps/meep-loc-serv/server/model_user_tracking_subscription_callback_reference.go
index 3885656e7019e434502578ff51c5a5110fec12cd..d8a5d994d9477b45d7a959baaf272e64c4e06fca 100644
--- a/go-apps/meep-loc-serv/server/model_user_tracking_subscription_callback_reference.go
+++ b/go-apps/meep-loc-serv/server/model_user_tracking_subscription_callback_reference.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_zonal_presence_notification.go b/go-apps/meep-loc-serv/server/model_zonal_presence_notification.go
index 0e172d7da8484658cc632848c4e25180e43518f2..988ddc1543bf7aeac5a7689269e5c95d6084554a 100644
--- a/go-apps/meep-loc-serv/server/model_zonal_presence_notification.go
+++ b/go-apps/meep-loc-serv/server/model_zonal_presence_notification.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_zonal_traffic_notification_subscription_list.go b/go-apps/meep-loc-serv/server/model_zonal_traffic_notification_subscription_list.go
index 3a5f6a8a338fa6faccb35bbf89eab2be51195dab..c71745be9d404226da9dbe636687dcb0b43b8477 100644
--- a/go-apps/meep-loc-serv/server/model_zonal_traffic_notification_subscription_list.go
+++ b/go-apps/meep-loc-serv/server/model_zonal_traffic_notification_subscription_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_zonal_traffic_subscription.go b/go-apps/meep-loc-serv/server/model_zonal_traffic_subscription.go
index 151f6edc2b01e8294c3bef202c0d44ae968e7c71..1273f042c7295476b90c0c02e158dd75de9a57a2 100644
--- a/go-apps/meep-loc-serv/server/model_zonal_traffic_subscription.go
+++ b/go-apps/meep-loc-serv/server/model_zonal_traffic_subscription.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_zone_info.go b/go-apps/meep-loc-serv/server/model_zone_info.go
index 4c825f339aacc77aec7a6da7068c912df6c15231..aeab504f7f00397721b7a344fd4c9cb1cf15d5a3 100644
--- a/go-apps/meep-loc-serv/server/model_zone_info.go
+++ b/go-apps/meep-loc-serv/server/model_zone_info.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_zone_list.go b/go-apps/meep-loc-serv/server/model_zone_list.go
index bdc3338d7fd05da79a3f9677f1a539c858fb36e0..85fd4a1cadbc2d3c374ad1916ca8343457705e3e 100644
--- a/go-apps/meep-loc-serv/server/model_zone_list.go
+++ b/go-apps/meep-loc-serv/server/model_zone_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_zone_status_notification.go b/go-apps/meep-loc-serv/server/model_zone_status_notification.go
index dd5af71ecea7864e5fd042499ee77c456971a29f..027371791dce8cf402a90f50322dfb1d5f45486c 100644
--- a/go-apps/meep-loc-serv/server/model_zone_status_notification.go
+++ b/go-apps/meep-loc-serv/server/model_zone_status_notification.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_zone_status_notification_subscription_list.go b/go-apps/meep-loc-serv/server/model_zone_status_notification_subscription_list.go
index b56494e52462ac61436d661b266fcd8ae6d504d0..4d61f07746682840bf2d93291ba46e8af6ec4276 100644
--- a/go-apps/meep-loc-serv/server/model_zone_status_notification_subscription_list.go
+++ b/go-apps/meep-loc-serv/server/model_zone_status_notification_subscription_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/model_zone_status_subscription.go b/go-apps/meep-loc-serv/server/model_zone_status_subscription.go
index 56141a6739b375febcbb6fe272591e7918a6c9a6..d9377fd15c6c8504f4767e6aa22dfae885a47e82 100644
--- a/go-apps/meep-loc-serv/server/model_zone_status_subscription.go
+++ b/go-apps/meep-loc-serv/server/model_zone_status_subscription.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-loc-serv/server/routers.go b/go-apps/meep-loc-serv/server/routers.go
index d09e1b03e706507957a51182e5e28400f70c11c6..cd2b3906c99df0edc1b7a1095dd4a59b538d0a56 100644
--- a/go-apps/meep-loc-serv/server/routers.go
+++ b/go-apps/meep-loc-serv/server/routers.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
**Type & Usage**
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
@@ -29,6 +29,8 @@ import (
"net/http"
"strings"
+ httpLog "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-http-logger"
+
"github.com/gorilla/mux"
)
@@ -46,6 +48,7 @@ func NewRouter() *mux.Router {
for _, route := range routes {
var handler http.Handler = route.HandlerFunc
handler = Logger(handler, route.Name)
+ handler = httpLog.LogRx(handler, "")
router.
Methods(route.Method).
@@ -65,154 +68,154 @@ var routes = Routes{
Route{
"Index",
"GET",
- "/etsi-013/location/v1/",
+ "/location/v1/",
Index,
},
Route{
"UserTrackingSubDelById",
strings.ToUpper("Delete"),
- "/etsi-013/location/v1/subscriptions/userTracking/{subscriptionId}",
+ "/location/v1/subscriptions/userTracking/{subscriptionId}",
UserTrackingSubDelById,
},
Route{
"UserTrackingSubGet",
strings.ToUpper("Get"),
- "/etsi-013/location/v1/subscriptions/userTracking",
+ "/location/v1/subscriptions/userTracking",
UserTrackingSubGet,
},
Route{
"UserTrackingSubGetById",
strings.ToUpper("Get"),
- "/etsi-013/location/v1/subscriptions/userTracking/{subscriptionId}",
+ "/location/v1/subscriptions/userTracking/{subscriptionId}",
UserTrackingSubGetById,
},
Route{
"UserTrackingSubPost",
strings.ToUpper("Post"),
- "/etsi-013/location/v1/subscriptions/userTracking",
+ "/location/v1/subscriptions/userTracking",
UserTrackingSubPost,
},
Route{
"UserTrackingSubPutById",
strings.ToUpper("Put"),
- "/etsi-013/location/v1/subscriptions/userTracking/{subscriptionId}",
+ "/location/v1/subscriptions/userTracking/{subscriptionId}",
UserTrackingSubPutById,
},
Route{
"ZonalTrafficSubDelById",
strings.ToUpper("Delete"),
- "/etsi-013/location/v1/subscriptions/zonalTraffic/{subscriptionId}",
+ "/location/v1/subscriptions/zonalTraffic/{subscriptionId}",
ZonalTrafficSubDelById,
},
Route{
"ZonalTrafficSubGet",
strings.ToUpper("Get"),
- "/etsi-013/location/v1/subscriptions/zonalTraffic",
+ "/location/v1/subscriptions/zonalTraffic",
ZonalTrafficSubGet,
},
Route{
"ZonalTrafficSubGetById",
strings.ToUpper("Get"),
- "/etsi-013/location/v1/subscriptions/zonalTraffic/{subscriptionId}",
+ "/location/v1/subscriptions/zonalTraffic/{subscriptionId}",
ZonalTrafficSubGetById,
},
Route{
"ZonalTrafficSubPost",
strings.ToUpper("Post"),
- "/etsi-013/location/v1/subscriptions/zonalTraffic",
+ "/location/v1/subscriptions/zonalTraffic",
ZonalTrafficSubPost,
},
Route{
"ZonalTrafficSubPutById",
strings.ToUpper("Put"),
- "/etsi-013/location/v1/subscriptions/zonalTraffic/{subscriptionId}",
+ "/location/v1/subscriptions/zonalTraffic/{subscriptionId}",
ZonalTrafficSubPutById,
},
Route{
"ZoneStatusDelById",
strings.ToUpper("Delete"),
- "/etsi-013/location/v1/subscriptions/zoneStatus/{subscriptionId}",
+ "/location/v1/subscriptions/zoneStatus/{subscriptionId}",
ZoneStatusDelById,
},
Route{
"ZoneStatusGet",
strings.ToUpper("Get"),
- "/etsi-013/location/v1/subscriptions/zonalStatus",
+ "/location/v1/subscriptions/zonalStatus",
ZoneStatusGet,
},
Route{
"ZoneStatusGetById",
strings.ToUpper("Get"),
- "/etsi-013/location/v1/subscriptions/zoneStatus/{subscriptionId}",
+ "/location/v1/subscriptions/zoneStatus/{subscriptionId}",
ZoneStatusGetById,
},
Route{
"ZoneStatusPost",
strings.ToUpper("Post"),
- "/etsi-013/location/v1/subscriptions/zonalStatus",
+ "/location/v1/subscriptions/zonalStatus",
ZoneStatusPost,
},
Route{
"ZoneStatusPutById",
strings.ToUpper("Put"),
- "/etsi-013/location/v1/subscriptions/zoneStatus/{subscriptionId}",
+ "/location/v1/subscriptions/zoneStatus/{subscriptionId}",
ZoneStatusPutById,
},
Route{
"UsersGet",
strings.ToUpper("Get"),
- "/etsi-013/location/v1/users",
+ "/location/v1/users",
UsersGet,
},
Route{
"UsersGetById",
strings.ToUpper("Get"),
- "/etsi-013/location/v1/users/{userId}",
+ "/location/v1/users/{userId}",
UsersGetById,
},
Route{
"ZonesByIdGetAps",
strings.ToUpper("Get"),
- "/etsi-013/location/v1/zones/{zoneId}/accessPoints",
+ "/location/v1/zones/{zoneId}/accessPoints",
ZonesByIdGetAps,
},
Route{
"ZonesByIdGetApsById",
strings.ToUpper("Get"),
- "/etsi-013/location/v1/zones/{zoneId}/accessPoints/{accessPointId}",
+ "/location/v1/zones/{zoneId}/accessPoints/{accessPointId}",
ZonesByIdGetApsById,
},
Route{
"ZonesGet",
strings.ToUpper("Get"),
- "/etsi-013/location/v1/zones",
+ "/location/v1/zones",
ZonesGet,
},
Route{
"ZonesGetById",
strings.ToUpper("Get"),
- "/etsi-013/location/v1/zones/{zoneId}",
+ "/location/v1/zones/{zoneId}",
ZonesGetById,
},
}
diff --git a/go-apps/meep-metrics-engine/api/v1/swagger.yaml b/go-apps/meep-metrics-engine/api/v1/swagger.yaml
deleted file mode 100644
index a0582ed94c765760056634d0577d5359262ab308..0000000000000000000000000000000000000000
--- a/go-apps/meep-metrics-engine/api/v1/swagger.yaml
+++ /dev/null
@@ -1,215 +0,0 @@
----
-swagger: "2.0"
-info:
- description: "Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)\
- \
**Type & Usage**
Platform Service used by control/monitoring software\
- \ and possibly by edge applications that require metrics
**Details**
API\
- \ details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30005`"
- version: "1.0.0"
- title: "AdvantEDGE Metrics Service REST API"
- contact:
- name: "InterDigital AdvantEDGE Support"
- email: "AdvantEDGE@InterDigital.com"
- license:
- name: "Apache 2.0"
- url: "https://github.com/InterDigitalInc/AdvantEDGE/blob/master/LICENSE"
-basePath: "/v1"
-tags:
-- name: "Metrics"
-schemes:
-- "http"
-consumes:
-- "application/json"
-produces:
-- "application/json"
-paths:
- /metrics:
- get:
- tags:
- - "metrics"
- description: "Used to get a list of all metrics for a specific message type,\
- \ destination pd and source pod combination"
- operationId: "metricsGet"
- produces:
- - "application/json"
- parameters:
- - name: "dest"
- in: "query"
- description: "Pod where the log message is taken from"
- required: false
- type: "string"
- x-exportParamName: "Dest"
- x-optionalDataType: "String"
- - name: "dataType"
- in: "query"
- description: "Log Message Type"
- required: false
- type: "string"
- x-exportParamName: "DataType"
- x-optionalDataType: "String"
- - name: "src"
- in: "query"
- description: "Pod that originated the metrics logged in the message"
- required: false
- type: "string"
- x-exportParamName: "Src"
- x-optionalDataType: "String"
- - name: "starTime"
- in: "query"
- description: "Starting timestamp of time range"
- required: false
- type: "string"
- x-exportParamName: "StarTime"
- x-optionalDataType: "String"
- - name: "stopTime"
- in: "query"
- description: "Ending timestamp of time range"
- required: false
- type: "string"
- x-exportParamName: "StopTime"
- x-optionalDataType: "String"
- responses:
- 200:
- description: "Successful response to a query regarding metrics based on\
- \ search criteria"
- examples:
- application/json:
- logResponseList:
- logResponse:
- - dest: "pod1"
- dataType: "latency"
- src: "pod2"
- timestamp: "2019-07-09T13:47:04.279+0000"
- - dest: "pod2"
- dataType: "latency"
- src: "pod1"
- timestamp: "2019-07-09T13:47:04.379+0000"
- schema:
- $ref: "#/definitions/LogResponseList"
- 404:
- description: "Not found"
- 500:
- description: "Internal server error"
-definitions:
- LogResponse:
- type: "object"
- required:
- - "dataType"
- - "dest"
- - "src"
- - "timestamp"
- properties:
- dest:
- type: "string"
- example: "node1"
- description: "Pod where the log message is taken from"
- dataType:
- type: "string"
- example: "node1"
- description: "Pod where the log message is taken from"
- src:
- type: "string"
- example: "node1"
- description: "Pod that originated the metrics logged in the message"
- timestamp:
- type: "string"
- example: "2019-07-09T13:47:03.279Z"
- description: "System time at which the metric was logged"
- data:
- $ref: "#/definitions/LogResponse_data"
- LogResponseList:
- type: "object"
- properties:
- logResponse:
- type: "array"
- items:
- $ref: "#/definitions/LogResponse"
- Inline_response_200:
- properties:
- logResponseList:
- $ref: "#/definitions/LogResponseList"
- LogResponse_data:
- type: "object"
- properties:
- rx:
- type: "integer"
- example: 128
- description: "Number of packets received since last log event"
- rxBytes:
- type: "integer"
- example: 6892
- description: "Number of bytes received since last log event"
- throughput:
- type: "number"
- format: "float"
- example: 17.01234
- description: "Throughput measured between 2 pods in Mbits/seconds"
- packet-loss:
- type: "string"
- example: "50.000"
- description: "Number of packets loss between2 pods as a percentage"
- latency:
- type: "integer"
- example: 63
- description: "Latency measured betwen 2 pods in ms"
- newPoa:
- type: "string"
- example: "poa1"
- description: "New poa affected by a mobility event"
- oldPoa:
- type: "string"
- example: "poa1"
- description: "Old poa affected by a mobility event"
-parameters:
- Query.Dest:
- name: "dest"
- in: "query"
- description: "Pod where the log message is taken from"
- required: false
- type: "string"
- x-exportParamName: "Dest"
- x-optionalDataType: "String"
- Query.DataType:
- name: "dataType"
- in: "query"
- description: "Log message type/category"
- required: false
- type: "string"
- x-exportParamName: "DataType"
- x-optionalDataType: "String"
- Query.Src:
- name: "src"
- in: "query"
- description: "Pod that originated the metrics logged in the message"
- required: false
- type: "string"
- x-exportParamName: "Src"
- x-optionalDataType: "String"
- Query.StartTime:
- name: "startTime"
- in: "query"
- description: "Starting timestamp of time range query"
- required: false
- type: "string"
- x-exportParamName: "StartTime"
- x-optionalDataType: "String"
- Query.StopTime:
- name: "stopTime"
- in: "query"
- description: "Ending timestamp of time range query"
- required: false
- type: "string"
- x-exportParamName: "StopTime"
- x-optionalDataType: "String"
-responses:
- Std200:
- description: "OK"
- Std400:
- description: "Bad request"
- Std404:
- description: "Not found"
- Std500:
- description: "Internal server error"
-externalDocs:
- description: "GitHub Wiki"
- url: "https://github.com/InterDigitalInc/AdvantEDGE/wiki"
diff --git a/go-apps/meep-metrics-engine/api/v2/swagger.yaml b/go-apps/meep-metrics-engine/api/v2/swagger.yaml
index b78bc22e8d55787a8b4fa659da37ca37afc1ff3f..750a40b3e0b7b2350157d9c2a03870d33ceeefe0 100644
--- a/go-apps/meep-metrics-engine/api/v2/swagger.yaml
+++ b/go-apps/meep-metrics-engine/api/v2/swagger.yaml
@@ -4,7 +4,7 @@ info:
description: "Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)\
\
**Type & Usage**
Platform Service used by control/monitoring software\
\ and possibly by edge applications that require metrics
**Details**
API\
- \ details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30008`"
+ \ details available at _your-AdvantEDGE-ip-address/api_"
version: "1.0.0"
title: "AdvantEDGE Metrics Service REST API"
contact:
@@ -13,17 +13,40 @@ info:
license:
name: "Apache 2.0"
url: "https://github.com/InterDigitalInc/AdvantEDGE/blob/master/LICENSE"
-basePath: "/v2"
+basePath: "/metrics/v2"
tags:
- name: "Metrics"
- name: "Subscriptions"
-schemes:
-- "http"
consumes:
- "application/json"
produces:
- "application/json"
paths:
+ /metrics/query/http:
+ post:
+ tags:
+ - "Metrics"
+ description: "Returns Http metrics according to specificed parameters"
+ operationId: "postHttpQuery"
+ produces:
+ - "application/json"
+ parameters:
+ - in: "body"
+ name: "params"
+ description: "Query parameters"
+ required: true
+ schema:
+ $ref: "#/definitions/HttpQueryParams"
+ x-exportParamName: "Params"
+ responses:
+ 200:
+ description: "OK"
+ schema:
+ $ref: "#/definitions/HttpMetricList"
+ 404:
+ description: "Not found"
+ 500:
+ description: "Internal server error"
/metrics/query/network:
post:
tags:
@@ -241,49 +264,61 @@ paths:
500:
description: "Internal server error"
definitions:
- NetworkQueryParams:
+ HttpQueryParams:
type: "object"
properties:
tags:
type: "array"
- description: "Tag names to match in query. Supported values:
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30005`
+ * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-metrics-engine/server/routers.go b/go-apps/meep-metrics-engine/server/routers.go
index 5e7bc538517b5d76309edf57a4b70e0f5acf107d..42dc8d8707e57ad17251fad016ea5a85c8fcfa17 100644
--- a/go-apps/meep-metrics-engine/server/routers.go
+++ b/go-apps/meep-metrics-engine/server/routers.go
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service REST API
*
- * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30005`
+ * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -29,6 +29,8 @@ import (
"net/http"
"strings"
+ httpLog "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-http-logger"
+
"github.com/gorilla/mux"
v2 "github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-metrics-engine/server/v2"
@@ -48,6 +50,7 @@ func NewRouter() *mux.Router {
for _, route := range routes {
var handler http.Handler = route.HandlerFunc
handler = Logger(handler, route.Name)
+ handler = httpLog.LogRx(handler, "")
router.
Methods(route.Method).
@@ -71,81 +74,96 @@ func Init() (err error) {
return nil
}
+func Run() (err error) {
+ err = v2.Run()
+ if err != nil {
+ return err
+ }
+ return nil
+}
+
var routes = Routes{
Route{
"IndexV2",
"GET",
- "/v2/",
+ "/metrics/v2/",
IndexV2,
},
Route{
"PostEventQuery",
strings.ToUpper("Post"),
- "/v2/metrics/query/event",
+ "/metrics/v2/metrics/query/event",
v2.PostEventQuery,
},
+ Route{
+ "PostHttpQuery",
+ strings.ToUpper("Post"),
+ "/metrics/v2/metrics/query/http",
+ v2.PostHttpQuery,
+ },
+
Route{
"PostNetworkQuery",
strings.ToUpper("Post"),
- "/v2/metrics/query/network",
+ "/metrics/v2/metrics/query/network",
v2.PostNetworkQuery,
},
Route{
"CreateEventSubscription",
strings.ToUpper("Post"),
- "/v2/metrics/subscriptions/event",
+ "/metrics/v2/metrics/subscriptions/event",
v2.CreateEventSubscription,
},
Route{
"CreateNetworkSubscription",
strings.ToUpper("Post"),
- "/v2/metrics/subscriptions/network",
+ "/metrics/v2/metrics/subscriptions/network",
v2.CreateNetworkSubscription,
},
Route{
"DeleteEventSubscriptionById",
strings.ToUpper("Delete"),
- "/v2/metrics/subscriptions/event/{subscriptionId}",
+ "/metrics/v2/metrics/subscriptions/event/{subscriptionId}",
v2.DeleteEventSubscriptionById,
},
Route{
"DeleteNetworkSubscriptionById",
strings.ToUpper("Delete"),
- "/v2/metrics/subscriptions/network/{subscriptionId}",
+ "/metrics/v2/metrics/subscriptions/network/{subscriptionId}",
v2.DeleteNetworkSubscriptionById,
},
Route{
"GetEventSubscription",
strings.ToUpper("Get"),
- "/v2/metrics/subscriptions/event",
+ "/metrics/v2/metrics/subscriptions/event",
v2.GetEventSubscription,
},
Route{
"GetEventSubscriptionById",
strings.ToUpper("Get"),
- "/v2/metrics/subscriptions/event/{subscriptionId}",
+ "/metrics/v2/metrics/subscriptions/event/{subscriptionId}",
v2.GetEventSubscriptionById,
},
Route{
"GetNetworkSubscription",
strings.ToUpper("Get"),
- "/v2/metrics/subscriptions/network",
+ "/metrics/v2/metrics/subscriptions/network",
v2.GetNetworkSubscription,
},
Route{
"GetNetworkSubscriptionById",
strings.ToUpper("Get"),
- "/v2/metrics/subscriptions/network/{subscriptionId}",
+ "/metrics/v2/metrics/subscriptions/network/{subscriptionId}",
v2.GetNetworkSubscriptionById,
},
}
diff --git a/go-apps/meep-metrics-engine/server/v2/README.md b/go-apps/meep-metrics-engine/server/v2/README.md
index d72b1505ab4c9a73a8803471035eced318cc19e8..5758fcf48b992be62d611383cf98a99e3ffacacc 100644
--- a/go-apps/meep-metrics-engine/server/v2/README.md
+++ b/go-apps/meep-metrics-engine/server/v2/README.md
@@ -1,6 +1,6 @@
# Go API Server for server
-Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30008`
+Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
## Overview
This server was generated by the [swagger-codegen]
@@ -13,7 +13,7 @@ To see how to make this your own, look here:
[README](https://github.com/swagger-api/swagger-codegen/blob/master/README.md)
- API version: 1.0.0
-- Build date: 2020-03-03T14:26:37.459-05:00
+- Build date: 2020-06-28T22:53:35.895-04:00
### Running the server
diff --git a/go-apps/meep-metrics-engine/server/v2/api_metrics.go b/go-apps/meep-metrics-engine/server/v2/api_metrics.go
index a8fa2b5b79c4777924a233201f4041d3b4b62ed7..7690b945ea9a764e61113a6ab7313503ae70dd00 100644
--- a/go-apps/meep-metrics-engine/server/v2/api_metrics.go
+++ b/go-apps/meep-metrics-engine/server/v2/api_metrics.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service REST API
*
- * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30005`
+ * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -32,6 +32,10 @@ func PostEventQuery(w http.ResponseWriter, r *http.Request) {
mePostEventQuery(w, r)
}
+func PostHttpQuery(w http.ResponseWriter, r *http.Request) {
+ mePostHttpQuery(w, r)
+}
+
func PostNetworkQuery(w http.ResponseWriter, r *http.Request) {
mePostNetworkQuery(w, r)
}
diff --git a/go-apps/meep-metrics-engine/server/v2/api_subscriptions.go b/go-apps/meep-metrics-engine/server/v2/api_subscriptions.go
index 810e2095db3c90d8bfd71ad9e98cd6b12e717c25..77ff8309bc7045827193491fb97f046c0fa55b1a 100644
--- a/go-apps/meep-metrics-engine/server/v2/api_subscriptions.go
+++ b/go-apps/meep-metrics-engine/server/v2/api_subscriptions.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service REST API
*
- * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30005`
+ * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-metrics-engine/server/v2/logger.go b/go-apps/meep-metrics-engine/server/v2/logger.go
index e3b06ae39f6378ee8346d8129cd0a490cbb7ab42..98294ca9542801f352f6e6573ce6a87716755c83 100644
--- a/go-apps/meep-metrics-engine/server/v2/logger.go
+++ b/go-apps/meep-metrics-engine/server/v2/logger.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service REST API
*
- * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30008`
+ * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -25,9 +25,10 @@
package server
import (
- "log"
"net/http"
"time"
+
+ log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
)
func Logger(inner http.Handler, name string) http.Handler {
@@ -36,11 +37,10 @@ func Logger(inner http.Handler, name string) http.Handler {
inner.ServeHTTP(w, r)
- log.Printf(
- "%s %s %s %s",
- r.Method,
- r.RequestURI,
- name,
+ log.Debug(
+ r.Method, " ",
+ r.RequestURI, " ",
+ name, " ",
time.Since(start),
)
})
diff --git a/go-apps/meep-metrics-engine/server/v2/metrics-engine.go b/go-apps/meep-metrics-engine/server/v2/metrics-engine.go
index a3dd24f970259b081ee4b94a38553a1260ab7be1..f5605404a0f5c7c51debb77afb3c524bfc95baf0 100644
--- a/go-apps/meep-metrics-engine/server/v2/metrics-engine.go
+++ b/go-apps/meep-metrics-engine/server/v2/metrics-engine.go
@@ -22,27 +22,34 @@ import (
"errors"
"fmt"
"net/http"
+ "net/url"
+ "os"
"strconv"
+ "strings"
"time"
- ceModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model"
+ dkm "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr"
+ dataModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model"
+ httpLog "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-http-logger"
log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
ms "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-metric-store"
clientv2 "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-metrics-engine-notification-client"
mod "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model"
+ mq "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq"
redis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis"
"github.com/gorilla/mux"
)
-const influxDBAddr = "http://meep-influxdb:8086"
+const influxDBAddr = "http://meep-influxdb.default.svc.cluster.local:8086"
const metricEvent = "events"
const metricNetwork = "network"
const moduleName string = "meep-metrics-engine"
-const redisAddr string = "meep-redis-master:6379"
+const redisAddr string = "meep-redis-master.default.svc.cluster.local:6379"
+const metricsEngineKey string = "metrics-engine:"
-const basepathURL = "http://meep-metrics-engine/v2/"
+const metricsBasePath = "/metrics/v2/"
const typeNetworkSubscription = "netsubs"
const typeEventSubscription = "eventsubs"
@@ -56,9 +63,15 @@ var nextEventSubscriptionIdAvailable int
var networkSubscriptionMap = map[string]*NetworkRegistration{}
var eventSubscriptionMap = map[string]*EventRegistration{}
+var sandboxName string
+var mqLocal *mq.MsgQueue
+var handlerId int
var activeModel *mod.Model
var activeScenarioName string
var metricStore *ms.MetricStore
+var hostUrl *url.URL
+var basePath string
+var baseKey string
var rc *redis.Connector
@@ -76,24 +89,58 @@ type NetworkRegistration struct {
// Init - Metrics engine initialization
func Init() (err error) {
- // Connect to Metric Store
- metricStore, err = ms.NewMetricStore("", influxDBAddr, redisAddr)
- if err != nil {
- log.Error("Failed connection to Redis: ", err)
+ // Retrieve Sandbox name from environment variable
+ sandboxName = strings.TrimSpace(os.Getenv("MEEP_SANDBOX_NAME"))
+ if sandboxName == "" {
+ err = errors.New("MEEP_SANDBOX_NAME env variable not set")
+ log.Error(err.Error())
return err
}
+ log.Info("MEEP_SANDBOX_NAME: ", sandboxName)
+
+ // Retrieve Root URL from environment variable
+ hostUrl, err = url.Parse(strings.TrimSpace(os.Getenv("MEEP_HOST_URL")))
+ if err != nil {
+ hostUrl = new(url.URL)
+ }
+ log.Info("MEEP_HOST_URL: ", hostUrl)
+
+ // Set base path
+ basePath = "/" + sandboxName + metricsBasePath
- // Listen for model updates
- activeModel, err = mod.NewModel(redisAddr, moduleName, "activeScenario")
+ // Create message queue
+ mqLocal, err = mq.NewMsgQueue(mq.GetLocalName(sandboxName), moduleName, sandboxName, redisAddr)
+ if err != nil {
+ log.Error("Failed to create Message Queue with error: ", err)
+ return err
+ }
+ log.Info("Message Queue created")
+
+ // Create new active scenario model
+ modelCfg := mod.ModelCfg{
+ Name: "activeScenario",
+ Namespace: sandboxName,
+ Module: moduleName,
+ UpdateCb: nil,
+ DbAddr: redisAddr,
+ }
+ activeModel, err = mod.NewModel(modelCfg)
if err != nil {
log.Error("Failed to create model: ", err.Error())
return err
}
- err = activeModel.Listen(eventHandler)
+
+ // Connect to Metric Store
+ metricStore, err = ms.NewMetricStore("", sandboxName, influxDBAddr, redisAddr)
if err != nil {
- log.Error("Failed to listening for model updates: ", err.Error())
+ log.Error("Failed connection to Redis: ", err)
+ return err
}
+ // Get base store key
+ baseKey = dkm.GetKeyRoot(sandboxName) + metricsEngineKey
+
+ // Connect to Redis DB to monitor metrics
rc, err = redis.NewConnector(redisAddr, METRICS_DB)
if err != nil {
log.Error("Failed connection to Redis DB. Error: ", err)
@@ -107,36 +154,53 @@ func Init() (err error) {
networkSubscriptionReInit()
eventSubscriptionReInit()
+ // Initialize metrics engine if scenario already active
+ activateScenarioMetrics()
+
return nil
}
-func eventHandler(channel string, payload string) {
- // Handle Message according to Rx Channel
- switch channel {
+// Run - Start Metrics Engine execution
+func Run() (err error) {
- // MEEP Ctrl Engine active scenario update event
- case mod.ActiveScenarioEvents:
- log.Debug("Event received on channel: ", mod.ActiveScenarioEvents, " payload: ", payload)
- processActiveScenarioUpdate(payload)
- default:
- log.Warn("Unsupported channel event: ", channel, " payload: ", payload)
+ // Register Message Queue handler
+ handler := mq.MsgHandler{Handler: msgHandler, UserData: nil}
+ handlerId, err = mqLocal.RegisterHandler(handler)
+ if err != nil {
+ log.Error("Failed to listen for sandbox updates: ", err.Error())
+ return err
}
+
+ return nil
}
-func processActiveScenarioUpdate(event string) {
- if event == mod.EventTerminate {
- terminateScenario(activeScenarioName)
- activeScenarioName = ""
- } else if event == mod.EventActivate {
- // Cache name for later deletion
- activeScenarioName = activeModel.GetScenarioName()
- activateScenario()
- } else {
- log.Debug("Reveived event: ", event, " - Do nothing")
+// Message Queue handler
+func msgHandler(msg *mq.Msg, userData interface{}) {
+ switch msg.Message {
+ case mq.MsgScenarioActivate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ activateScenarioMetrics()
+ case mq.MsgScenarioTerminate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ terminateScenarioMetrics()
+ default:
+ log.Trace("Ignoring unsupported message: ", mq.PrintMsg(msg))
}
}
-func activateScenario() {
+func activateScenarioMetrics() {
+ // Sync with active scenario store
+ activeModel.UpdateScenario()
+
+ // Update current active scenario name
+ activeScenarioName = activeModel.GetScenarioName()
+ if activeScenarioName == "" {
+ return
+ }
+
+ // Set new HTTP logger store name
+ _ = httpLog.ReInit(moduleName, sandboxName, activeScenarioName, redisAddr, influxDBAddr)
+
// Set Metrics Store
err := metricStore.SetStore(activeScenarioName)
if err != nil {
@@ -148,7 +212,7 @@ func activateScenario() {
metricStore.Flush()
//inserting an INIT event at T0
- var ev ceModel.Event
+ var ev dataModel.Event
ev.Name = "Init"
ev.Type_ = "OTHER"
j, _ := json.Marshal(ev)
@@ -170,15 +234,24 @@ func activateScenario() {
}
}
-func terminateScenario(name string) {
+func terminateScenarioMetrics() {
+ // Sync with active scenario store
+ activeModel.UpdateScenario()
+
// Terminate snapshot thread
metricStore.StopSnapshotThread()
+ // Set new HTTP logger store name
+ _ = httpLog.ReInit(moduleName, sandboxName, activeScenarioName, redisAddr, influxDBAddr)
+
// Set Metrics Store
err := metricStore.SetStore("")
if err != nil {
log.Error(err.Error())
}
+
+ // Reset current active scenario name
+ activeScenarioName = ""
}
func mePostEventQuery(w http.ResponseWriter, r *http.Request) {
@@ -262,6 +335,130 @@ func mePostEventQuery(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, string(jsonResponse))
}
+func mePostHttpQuery(w http.ResponseWriter, r *http.Request) {
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ log.Debug("mePostHttpQuery")
+
+ // Retrieve network metric query parameters from request body
+ var params HttpQueryParams
+ if r.Body == nil {
+ err := errors.New("Request body is missing")
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusBadRequest)
+ return
+ }
+ decoder := json.NewDecoder(r.Body)
+ err := decoder.Decode(¶ms)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ // Make sure metrics store is up
+ if metricStore == nil {
+ err := errors.New("No active scenario to get metrics from")
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusNotFound)
+ return
+ }
+
+ // Parse tags
+ tags := make(map[string]string)
+ for _, tag := range params.Tags {
+ tags[tag.Name] = tag.Value
+ }
+
+ // Get scope
+ duration := ""
+ limit := 0
+ if params.Scope != nil {
+ duration = params.Scope.Duration
+ limit = int(params.Scope.Limit)
+ }
+ // Get metrics
+ valuesArray, err := metricStore.GetInfluxMetric(ms.HttpLogMetricName, tags, params.Fields, duration, limit)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ if len(valuesArray) == 0 {
+ err := errors.New("No matching metrics found")
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusNotFound)
+ return
+ }
+
+ // Prepare & send response
+ var response HttpMetricList
+ response.Name = "http metrics"
+ response.Columns = append(params.Fields, "time")
+ response.Values = make([]HttpMetric, len(valuesArray))
+ for index, values := range valuesArray {
+ metric := &response.Values[index]
+ metric.Time = values["time"].(string)
+ if values[ms.HttpLoggerName] != nil {
+ if val, ok := values[ms.HttpLoggerName].(string); ok {
+ metric.LoggerName = val
+ }
+ }
+ if values[ms.HttpLoggerDirection] != nil {
+ if val, ok := values[ms.HttpLoggerDirection].(string); ok {
+ metric.Direction = val
+ }
+ }
+
+ if values[ms.HttpLogId] != nil {
+ metric.Id = ms.JsonNumToInt32(values[ms.HttpLogId].(json.Number))
+ }
+ if values[ms.HttpLogEndpoint] != nil {
+ if val, ok := values[ms.HttpLogEndpoint].(string); ok {
+ metric.Endpoint = val
+ }
+ }
+ if values[ms.HttpUrl] != nil {
+ if val, ok := values[ms.HttpUrl].(string); ok {
+ metric.Url = val
+ }
+ }
+ if values[ms.HttpMethod] != nil {
+ if val, ok := values[ms.HttpMethod].(string); ok {
+ metric.Method = val
+ }
+ }
+ if values[ms.HttpBody] != nil {
+ if val, ok := values[ms.HttpBody].(string); ok {
+ metric.Body = val
+ }
+ }
+ if values[ms.HttpRespBody] != nil {
+ if val, ok := values[ms.HttpRespBody].(string); ok {
+ metric.RespBody = val
+ }
+ }
+ if values[ms.HttpRespCode] != nil {
+ if val, ok := values[ms.HttpRespCode].(string); ok {
+ metric.RespCode = val
+ }
+ }
+ if values[ms.HttpProcTime] != nil {
+ if val, ok := values[ms.HttpProcTime].(string); ok {
+ metric.ProcTime = val
+ }
+ }
+ }
+
+ jsonResponse, err := json.Marshal(response)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ w.WriteHeader(http.StatusOK)
+ fmt.Fprintf(w, string(jsonResponse))
+}
+
func mePostNetworkQuery(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
log.Debug("mePostNetworkQuery")
@@ -378,7 +575,7 @@ func createEventSubscription(w http.ResponseWriter, r *http.Request) {
return
}
- response.ResourceURL = basepathURL + "subscriptions/event/" + subsIdStr
+ response.ResourceURL = hostUrl.String() + basePath + "subscriptions/event/" + subsIdStr
response.SubscriptionId = subsIdStr
response.SubscriptionType = eventSubscriptionParams.SubscriptionType
response.Period = eventSubscriptionParams.Period
@@ -386,7 +583,7 @@ func createEventSubscription(w http.ResponseWriter, r *http.Request) {
response.CallbackReference = eventSubscriptionParams.CallbackReference
response.EventQueryParams = eventSubscriptionParams.EventQueryParams
- _ = rc.JSONSetEntry(moduleName+":"+typeEventSubscription+":"+subsIdStr, ".", convertEventSubscriptionToJson(&response))
+ _ = rc.JSONSetEntry(baseKey+typeEventSubscription+":"+subsIdStr, ".", convertEventSubscriptionToJson(&response))
jsonResponse, err := json.Marshal(response)
if err != nil {
@@ -423,7 +620,7 @@ func createNetworkSubscription(w http.ResponseWriter, r *http.Request) {
return
}
- response.ResourceURL = basepathURL + "metrics/subscriptions/network/" + subsIdStr
+ response.ResourceURL = hostUrl.String() + basePath + "metrics/subscriptions/network/" + subsIdStr
response.SubscriptionId = subsIdStr
response.SubscriptionType = networkSubscriptionParams.SubscriptionType
response.Period = networkSubscriptionParams.Period
@@ -431,7 +628,7 @@ func createNetworkSubscription(w http.ResponseWriter, r *http.Request) {
response.CallbackReference = networkSubscriptionParams.CallbackReference
response.NetworkQueryParams = networkSubscriptionParams.NetworkQueryParams
- _ = rc.JSONSetEntry(moduleName+":"+typeNetworkSubscription+":"+subsIdStr, ".", convertNetworkSubscriptionToJson(&response))
+ _ = rc.JSONSetEntry(baseKey+typeNetworkSubscription+":"+subsIdStr, ".", convertNetworkSubscriptionToJson(&response))
jsonResponse, err := json.Marshal(response)
if err != nil {
@@ -443,7 +640,7 @@ func createNetworkSubscription(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, string(jsonResponse))
}
-func populateEventList(key string, jsonInfo string, dummy1 string, dummy2 string, userData interface{}) error {
+func populateEventList(key string, jsonInfo string, userData interface{}) error {
subList := userData.(*EventSubscriptionList)
var subInfo EventSubscription
@@ -456,7 +653,7 @@ func populateEventList(key string, jsonInfo string, dummy1 string, dummy2 string
return nil
}
-func populateNetworkList(key string, jsonInfo string, dummy1 string, dummy2 string, userData interface{}) error {
+func populateNetworkList(key string, jsonInfo string, userData interface{}) error {
subList := userData.(*NetworkSubscriptionList)
var subInfo NetworkSubscription
@@ -756,9 +953,10 @@ func getEventSubscription(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
var response EventSubscriptionList
- _ = rc.JSONGetList("", "", moduleName+":"+typeEventSubscription, populateEventList, &response)
+ keyName := baseKey + typeEventSubscription + "*"
+ _ = rc.ForEachJSONEntry(keyName, populateEventList, &response)
- response.ResourceURL = basepathURL + "metrics/subscriptions/event"
+ response.ResourceURL = hostUrl.String() + basePath + "metrics/subscriptions/event"
jsonResponse, err := json.Marshal(response)
if err != nil {
log.Error(err.Error())
@@ -773,9 +971,10 @@ func getNetworkSubscription(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
var response NetworkSubscriptionList
- _ = rc.JSONGetList("", "", moduleName+":"+typeNetworkSubscription, populateNetworkList, &response)
+ keyName := baseKey + typeNetworkSubscription + "*"
+ _ = rc.ForEachJSONEntry(keyName, populateNetworkList, &response)
- response.ResourceURL = basepathURL + "metrics/subscriptions/network"
+ response.ResourceURL = hostUrl.String() + basePath + "metrics/subscriptions/network"
jsonResponse, err := json.Marshal(response)
if err != nil {
log.Error(err.Error())
@@ -790,7 +989,7 @@ func getEventSubscriptionById(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
vars := mux.Vars(r)
- jsonResponse, _ := rc.JSONGetEntry(moduleName+":"+typeEventSubscription+":"+vars["subscriptionId"], ".")
+ jsonResponse, _ := rc.JSONGetEntry(baseKey+typeEventSubscription+":"+vars["subscriptionId"], ".")
if jsonResponse == "" {
w.WriteHeader(http.StatusNotFound)
return
@@ -804,7 +1003,7 @@ func getNetworkSubscriptionById(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
vars := mux.Vars(r)
- jsonResponse, _ := rc.JSONGetEntry(moduleName+":"+typeNetworkSubscription+":"+vars["subscriptionId"], ".")
+ jsonResponse, _ := rc.JSONGetEntry(baseKey+typeNetworkSubscription+":"+vars["subscriptionId"], ".")
if jsonResponse == "" {
w.WriteHeader(http.StatusNotFound)
return
@@ -818,7 +1017,7 @@ func deleteEventSubscriptionById(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
vars := mux.Vars(r)
- err := rc.JSONDelEntry(moduleName+":"+typeEventSubscription+":"+vars["subscriptionId"], ".")
+ err := rc.JSONDelEntry(baseKey+typeEventSubscription+":"+vars["subscriptionId"], ".")
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -836,7 +1035,7 @@ func deleteNetworkSubscriptionById(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
vars := mux.Vars(r)
- err := rc.JSONDelEntry(moduleName+":"+typeNetworkSubscription+":"+vars["subscriptionId"], ".")
+ err := rc.JSONDelEntry(baseKey+typeNetworkSubscription+":"+vars["subscriptionId"], ".")
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -854,7 +1053,8 @@ func networkSubscriptionReInit() {
//reusing the object response for the get multiple zonalSubscription
var responseList NetworkSubscriptionList
- _ = rc.JSONGetList("", "", moduleName+":"+typeNetworkSubscription, populateNetworkList, &responseList)
+ keyName := baseKey + typeNetworkSubscription + "*"
+ _ = rc.ForEachJSONEntry(keyName, populateNetworkList, &responseList)
maxSubscriptionId := 0
for _, response := range responseList.NetworkSubscription {
@@ -881,7 +1081,8 @@ func eventSubscriptionReInit() {
//reusing the object response for the get multiple zonalSubscription
var responseList EventSubscriptionList
- _ = rc.JSONGetList("", "", moduleName+":"+typeEventSubscription, populateEventList, &responseList)
+ keyName := baseKey + typeEventSubscription + "*"
+ _ = rc.ForEachJSONEntry(keyName, populateEventList, &responseList)
maxSubscriptionId := 0
for _, response := range responseList.EventSubscription {
diff --git a/go-apps/meep-metrics-engine/server/v2/model_event_metric.go b/go-apps/meep-metrics-engine/server/v2/model_event_metric.go
index 1f3d1a9814b41fa6bd3ce6b97aaa4fe38cd3551c..a42fce1f10f84c9725f16e79a6e03db3022ba185 100644
--- a/go-apps/meep-metrics-engine/server/v2/model_event_metric.go
+++ b/go-apps/meep-metrics-engine/server/v2/model_event_metric.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service REST API
*
- * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30008`
+ * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-metrics-engine/server/v2/model_event_metric_list.go b/go-apps/meep-metrics-engine/server/v2/model_event_metric_list.go
index f670d07840004e980d5946a4b60628a30b8200a2..15082f08f4254abce8dd7abb607a8781df551584 100644
--- a/go-apps/meep-metrics-engine/server/v2/model_event_metric_list.go
+++ b/go-apps/meep-metrics-engine/server/v2/model_event_metric_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service REST API
*
- * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30008`
+ * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-metrics-engine/server/v2/model_event_query_params.go b/go-apps/meep-metrics-engine/server/v2/model_event_query_params.go
index 2b4c5ac1f18988b09a099a410c631bba16e26bf5..99586843c9e8c9a6e3355c5b10badf2e80ad1d16 100644
--- a/go-apps/meep-metrics-engine/server/v2/model_event_query_params.go
+++ b/go-apps/meep-metrics-engine/server/v2/model_event_query_params.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service REST API
*
- * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30008`
+ * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-metrics-engine/server/v2/model_event_subscription.go b/go-apps/meep-metrics-engine/server/v2/model_event_subscription.go
index b2a57f5c0cfa1e451dff5ee5eb0a9ed364b751d8..55c7202fe23c187e436b5c1369e68dc2a6adc9f1 100644
--- a/go-apps/meep-metrics-engine/server/v2/model_event_subscription.go
+++ b/go-apps/meep-metrics-engine/server/v2/model_event_subscription.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service REST API
*
- * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30008`
+ * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-metrics-engine/server/v2/model_event_subscription_list.go b/go-apps/meep-metrics-engine/server/v2/model_event_subscription_list.go
index 504e755677378535b1482a3c74e759de84912af3..2b99ee547b440ef57ad4fb161e8a389a0ed36d71 100644
--- a/go-apps/meep-metrics-engine/server/v2/model_event_subscription_list.go
+++ b/go-apps/meep-metrics-engine/server/v2/model_event_subscription_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service REST API
*
- * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30008`
+ * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-metrics-engine/server/v2/model_event_subscription_params.go b/go-apps/meep-metrics-engine/server/v2/model_event_subscription_params.go
index 8be2cdc20f20b198c2aaa0ffb38cdf096c1d9035..bd6d35d450b3c621eaddf5accb2d22cb3879b818 100644
--- a/go-apps/meep-metrics-engine/server/v2/model_event_subscription_params.go
+++ b/go-apps/meep-metrics-engine/server/v2/model_event_subscription_params.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service REST API
*
- * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30008`
+ * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-metrics-engine/server/v2/model_events_callback_reference.go b/go-apps/meep-metrics-engine/server/v2/model_events_callback_reference.go
index 03684da0ac956a65d530b5a05bfd50b5726254e9..ed537e95bcff5f687376b8a0602689aabab21d21 100644
--- a/go-apps/meep-metrics-engine/server/v2/model_events_callback_reference.go
+++ b/go-apps/meep-metrics-engine/server/v2/model_events_callback_reference.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service REST API
*
- * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30008`
+ * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-metrics-engine/server/v2/model_http_metric.go b/go-apps/meep-metrics-engine/server/v2/model_http_metric.go
new file mode 100644
index 0000000000000000000000000000000000000000..7abef951d32afee2d4690b395f338e881f75e4bd
--- /dev/null
+++ b/go-apps/meep-metrics-engine/server/v2/model_http_metric.go
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Metrics Service REST API
+ *
+ * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// Value of a single http metric
+type HttpMetric struct {
+
+ // Time of http metrics
+ Time string `json:"time,omitempty"`
+
+ // Http metrics identifier
+ Id int32 `json:"id,omitempty"`
+
+ // Http metrics queried endpoint
+ Endpoint string `json:"endpoint,omitempty"`
+
+ // Http metrics queried endpoint with query parameters
+ Url string `json:"url,omitempty"`
+
+ // Http metrics method
+ Method string `json:"method,omitempty"`
+
+ // Http metrics response status code
+ RespCode string `json:"resp_code,omitempty"`
+
+ // Http metrics response body
+ RespBody string `json:"resp_body,omitempty"`
+
+ // Http metrics body
+ Body string `json:"body,omitempty"`
+
+ // Request processing time in ms
+ ProcTime string `json:"proc_time,omitempty"`
+
+ // Service processing the http metric
+ LoggerName string `json:"logger_name,omitempty"`
+
+ // Http type
+ Direction string `json:"direction,omitempty"`
+}
diff --git a/go-apps/meep-metrics-engine/server/v2/model_http_metric_list.go b/go-apps/meep-metrics-engine/server/v2/model_http_metric_list.go
new file mode 100644
index 0000000000000000000000000000000000000000..6c4bb6cfaed2f7f7a06ea197021cee1cfd787bab
--- /dev/null
+++ b/go-apps/meep-metrics-engine/server/v2/model_http_metric_list.go
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Metrics Service REST API
+ *
+ * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// Http metrics query response
+type HttpMetricList struct {
+
+ // Response name
+ Name string `json:"name,omitempty"`
+
+ // columns included in response based on queried values
+ Columns []string `json:"columns,omitempty"`
+
+ Values []HttpMetric `json:"values,omitempty"`
+}
diff --git a/go-apps/meep-metrics-engine/server/v2/model_http_query_params.go b/go-apps/meep-metrics-engine/server/v2/model_http_query_params.go
new file mode 100644
index 0000000000000000000000000000000000000000..6b4c5add3c3168a4fd2dd9eef44a7eb9287d4cda
--- /dev/null
+++ b/go-apps/meep-metrics-engine/server/v2/model_http_query_params.go
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Metrics Service REST API
+ *
+ * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// Http metrics query parameters
+type HttpQueryParams struct {
+
+ // Tag names to match in query. Supported values:
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30008`
+ * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-metrics-engine/server/v2/model_network_metric.go b/go-apps/meep-metrics-engine/server/v2/model_network_metric.go
index 2213ecb7e77347b11dccf621323b21732f39fd06..b6f8c410806cf1bd9efdb026e7bc1e9a4d4b69a1 100644
--- a/go-apps/meep-metrics-engine/server/v2/model_network_metric.go
+++ b/go-apps/meep-metrics-engine/server/v2/model_network_metric.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service REST API
*
- * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30008`
+ * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-metrics-engine/server/v2/model_network_metric_list.go b/go-apps/meep-metrics-engine/server/v2/model_network_metric_list.go
index d5b5669af10032e0e5ac2f9f93d6c8a0ff06ef62..822d5bf50e25f5c23a584b98f8ddb8003c1d05c5 100644
--- a/go-apps/meep-metrics-engine/server/v2/model_network_metric_list.go
+++ b/go-apps/meep-metrics-engine/server/v2/model_network_metric_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service REST API
*
- * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30008`
+ * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-metrics-engine/server/v2/model_network_query_params.go b/go-apps/meep-metrics-engine/server/v2/model_network_query_params.go
index 9399567865d6c879ac614baeb12e71f9ae9e7e83..d7c3bfb4936f233068e07e2f0d7bc7483f3e6f35 100644
--- a/go-apps/meep-metrics-engine/server/v2/model_network_query_params.go
+++ b/go-apps/meep-metrics-engine/server/v2/model_network_query_params.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service REST API
*
- * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30008`
+ * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-metrics-engine/server/v2/model_network_subscription.go b/go-apps/meep-metrics-engine/server/v2/model_network_subscription.go
index 76954fef3b2d52a27e3f94ab169d614fc442160c..37161591928165143bcf9fc240fac2db3e62a8f8 100644
--- a/go-apps/meep-metrics-engine/server/v2/model_network_subscription.go
+++ b/go-apps/meep-metrics-engine/server/v2/model_network_subscription.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service REST API
*
- * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30008`
+ * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-metrics-engine/server/v2/model_network_subscription_list.go b/go-apps/meep-metrics-engine/server/v2/model_network_subscription_list.go
index dfcb6f78139495f718bd0414446d04e736e9894f..fb1955860af15e496a5dd9a3275b86ac0af3db53 100644
--- a/go-apps/meep-metrics-engine/server/v2/model_network_subscription_list.go
+++ b/go-apps/meep-metrics-engine/server/v2/model_network_subscription_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service REST API
*
- * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30008`
+ * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-metrics-engine/server/v2/model_network_subscription_params.go b/go-apps/meep-metrics-engine/server/v2/model_network_subscription_params.go
index 4059b5b3a98a4d809f511b336b491d3cb61adac2..03463825b90a07c8b08dcb6535a61be235c22784 100644
--- a/go-apps/meep-metrics-engine/server/v2/model_network_subscription_params.go
+++ b/go-apps/meep-metrics-engine/server/v2/model_network_subscription_params.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service REST API
*
- * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30008`
+ * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-metrics-engine/server/v2/model_scope.go b/go-apps/meep-metrics-engine/server/v2/model_scope.go
index edaf1f10b1f2779beebe9dc38567a73c0cbf6f21..54176152a4df07c3f7be6a3d89fb8a63a5d3d0ed 100644
--- a/go-apps/meep-metrics-engine/server/v2/model_scope.go
+++ b/go-apps/meep-metrics-engine/server/v2/model_scope.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service REST API
*
- * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30008`
+ * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-metrics-engine/server/v2/model_tag.go b/go-apps/meep-metrics-engine/server/v2/model_tag.go
index 01c70dd3fa2287854ecd1977e0965db89455b017..a964f8edb20e9076d77931582e9aa50f5b469a24 100644
--- a/go-apps/meep-metrics-engine/server/v2/model_tag.go
+++ b/go-apps/meep-metrics-engine/server/v2/model_tag.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service REST API
*
- * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30008`
+ * Metrics Service provides metrics about the active scenario
**Micro-service**
[meep-metrics-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-metrics-engine)
**Type & Usage**
Platform Service used by control/monitoring software and possibly by edge applications that require metrics
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-mg-manager/api/swagger.yaml b/go-apps/meep-mg-manager/api/swagger.yaml
index ef2bb8f88007a0c2c67dad3f0b4a795090604ee5..8ce89741d01c6318b9515fd9d3f85038e25a3132 100644
--- a/go-apps/meep-mg-manager/api/swagger.yaml
+++ b/go-apps/meep-mg-manager/api/swagger.yaml
@@ -6,7 +6,7 @@ info:
\
**Micro-service**
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)\
\
**Type & Usage**
Edge Service used by edge applications to share user\
\ state between the Mobility Group members
**Details**
API details available\
- \ at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30005`"
+ \ at _your-AdvantEDGE-ip-address/api_"
version: "1.0.0"
title: "AdvantEDGE Mobility Group Service REST API"
contact:
@@ -15,12 +15,10 @@ info:
license:
name: "Apache 2.0"
url: "https://github.com/InterDigitalInc/AdvantEDGE/blob/master/LICENSE"
-basePath: "/v1"
+basePath: "/mgm/v1"
tags:
- name: "Membership"
- name: "State Transfer"
-schemes:
-- "http"
consumes:
- "application/json"
produces:
diff --git a/go-apps/meep-mg-manager/go.mod b/go-apps/meep-mg-manager/go.mod
index 592f5eac27a42e9e1f103e9b083b96552199f92b..2b92382512ceeb33044d1450f107fbdbb42468bb 100644
--- a/go-apps/meep-mg-manager/go.mod
+++ b/go-apps/meep-mg-manager/go.mod
@@ -3,11 +3,14 @@ module github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-mg-manager
go 1.12
require (
- github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-http-logger v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mg-app-client v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mg-manager-model v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis v0.0.0
github.com/RyanCarrier/dijkstra v0.0.0-20190726134004-b51cadb5ae52
github.com/gorilla/handlers v1.4.0
@@ -15,10 +18,14 @@ require (
)
replace (
- github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model => ../../go-packages/meep-ctrl-engine-model
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr => ../../go-packages/meep-data-key-mgr
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model => ../../go-packages/meep-data-model
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-http-logger => ../../go-packages/meep-http-logger
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-mg-app-client => ../../go-packages/meep-mg-app-client
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mg-manager-model => ../../go-packages/meep-mg-manager-model
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model => ../../go-packages/meep-model
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq => ../../go-packages/meep-mq
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis => ../../go-packages/meep-redis
)
diff --git a/go-apps/meep-mg-manager/go.sum b/go-apps/meep-mg-manager/go.sum
index 4a5545def40fcc544dbfebb41354e727f1f8f019..7ee3c8dd1e2c8e50b9a6d7a4c68215f8ffd1ddd3 100644
--- a/go-apps/meep-mg-manager/go.sum
+++ b/go-apps/meep-mg-manager/go.sum
@@ -1,19 +1,14 @@
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db h1:Zkf5kwhxdW0xV7WM/crqIcOP5LCFGnAmumWSFAewJ74=
github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db/go.mod h1:RU+6d0CNIRSp6yo1mXLIIrnFa/3LHhvcDVLVJyovptM=
github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351 h1:1u1XrfCBnY+GijnyU6O1k4odp5TnqZQTsp5v7+n/E4Y=
github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351/go.mod h1:HxwfbuElTuGf+/uKZfjJrCnv0BmmpkPJDI7gBwj1KkM=
github.com/RyanCarrier/dijkstra v0.0.0-20190726134004-b51cadb5ae52 h1:trnwuu/Q8T59kgRjXcSDBODnyZP9wes+bnLn0lx4PgM=
github.com/RyanCarrier/dijkstra v0.0.0-20190726134004-b51cadb5ae52/go.mod h1:DdR6ymcLl8+sN/XOVNjnYO1NDYfgHskGjreZUDuQCTY=
-github.com/RyanCarrier/dijkstra-1 v0.0.0-20170512020943-0e5801a26345 h1:fgSpoKViTSqRb4hjDNj10ig5wUvO0CayCzFdLf6fuRM=
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/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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/go-redis/redis v6.15.2+incompatible h1:9SpNVG76gr6InJGxoZ6IuuxaCOQwDAhzyXg+Bs+0Sb4=
github.com/go-redis/redis v6.15.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
@@ -23,23 +18,19 @@ github.com/gorilla/handlers v1.4.0 h1:XulKRWSQK5uChr4pEgSE4Tc/OcmnU9GJuSwdog/tZs
github.com/gorilla/handlers v1.4.0/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw=
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+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=
github.com/mattomatic/dijkstra v0.0.0-20130617153013-6f6d134eb237/go.mod h1:UOnLAUmVG5paym8pD3C4B9BQylUDC2vXFJJpT7JrlEA=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo=
github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME=
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -50,21 +41,15 @@ golang.org/x/net v0.0.0-20190415100556-4a65cf94b679/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a h1:tImsplftrFpALCYumobsd0K86vlAs/eXGFms2txfJfA=
golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
-gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/go-apps/meep-mg-manager/server/README.md b/go-apps/meep-mg-manager/server/README.md
index 91f04aea583ff336372b8b95e67f54df61dded2f..cff9a4b1af3e0af63c7b155b4c1748c4b0d147d9 100644
--- a/go-apps/meep-mg-manager/server/README.md
+++ b/go-apps/meep-mg-manager/server/README.md
@@ -1,6 +1,6 @@
# Go API Server for server
-Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
**Micro-service**
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
**Type & Usage**
Edge Service used by edge applications to share user state between the Mobility Group members
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30005`
+Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
**Micro-service**
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
**Type & Usage**
Edge Service used by edge applications to share user state between the Mobility Group members
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
## Overview
This server was generated by the [swagger-codegen]
@@ -13,7 +13,7 @@ To see how to make this your own, look here:
[README](https://github.com/swagger-api/swagger-codegen/blob/master/README.md)
- API version: 1.0.0
-- Build date: 2020-03-03T14:26:32.157-05:00
+- Build date: 2020-06-28T22:53:32.034-04:00
### Running the server
diff --git a/go-apps/meep-mg-manager/server/api_membership.go b/go-apps/meep-mg-manager/server/api_membership.go
index 0663f3b8b96624af742895554404897814765cc5..6d01adf0b8e56257446ee3f75114c76e8fc54d59 100644
--- a/go-apps/meep-mg-manager/server/api_membership.go
+++ b/go-apps/meep-mg-manager/server/api_membership.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Mobility Group Service REST API
*
- * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
**Micro-service**
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
**Type & Usage**
Edge Service used by edge applications to share user state between the Mobility Group members
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30005`
+ * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
**Micro-service**
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
**Type & Usage**
Edge Service used by edge applications to share user state between the Mobility Group members
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-mg-manager/server/api_state_transfer.go b/go-apps/meep-mg-manager/server/api_state_transfer.go
index b56dba84a204450d4c0d0734fd40d993eba8fe04..760b54faf43f870f8e76754acc7f7e4924f5734d 100644
--- a/go-apps/meep-mg-manager/server/api_state_transfer.go
+++ b/go-apps/meep-mg-manager/server/api_state_transfer.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Mobility Group Service REST API
*
- * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
**Micro-service**
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
**Type & Usage**
Edge Service used by edge applications to share user state between the Mobility Group members
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30005`
+ * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
**Micro-service**
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
**Type & Usage**
Edge Service used by edge applications to share user state between the Mobility Group members
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-mg-manager/server/logger.go b/go-apps/meep-mg-manager/server/logger.go
index 10e869acd4986a4a0bd7305efe3c0e16e99202bd..67e0a8ccaa0f4b060ccd377a0cd55de1427f0c95 100644
--- a/go-apps/meep-mg-manager/server/logger.go
+++ b/go-apps/meep-mg-manager/server/logger.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Mobility Group Service REST API
*
- * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
**Micro-service**
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
**Type & Usage**
Edge Service used by edge applications to share user state between the Mobility Group members
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30005`
+ * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
**Micro-service**
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
**Type & Usage**
Edge Service used by edge applications to share user state between the Mobility Group members
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-mg-manager/server/mg-manager.go b/go-apps/meep-mg-manager/server/mg-manager.go
index 6afa07f9a82222b755460f0596c55cbe1ce4458f..e7025bec3765d33ae086825efa58aa5b1fd7353b 100644
--- a/go-apps/meep-mg-manager/server/mg-manager.go
+++ b/go-apps/meep-mg-manager/server/mg-manager.go
@@ -21,24 +21,31 @@ import (
"errors"
"fmt"
"net/http"
+ "os"
"strings"
"sync"
- ceModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model"
+ dkm "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr"
+ dataModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model"
+ httpLog "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-http-logger"
log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
mga "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mg-app-client"
mgModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mg-manager-model"
mod "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model"
+ mq "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq"
redis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis"
"github.com/RyanCarrier/dijkstra"
"github.com/gorilla/mux"
)
-const moduleMgManager string = "mg-manager"
+const moduleName string = "meep-mg-manager"
+const moduleTcEngine string = "meep-tc-engine"
+const mgmKey string = "mg-manager:"
const typeLb string = "lb"
-const channelMgManagerLb string = moduleMgManager + "-" + typeLb
-const redisAddr string = "meep-redis-master:6379"
+const redisAddr string = "meep-redis-master.default.svc.cluster.local:6379"
+const influxAddr string = "http://meep-influxdb.default.svc.cluster.local:8086"
+
const DEFAULT_LB_RULES_DB = 0
const eventTypeStateUpdate = "STATE-UPDATE"
@@ -117,6 +124,10 @@ type lbRulesStore struct {
}
type MgManager struct {
+ sandboxName string
+ baseKey string
+ mqLocal *mq.MsgQueue
+ handlerId int
mutex sync.Mutex
networkGraph *dijkstra.Graph
activeModel *mod.Model
@@ -153,24 +164,51 @@ func Init() (err error) {
mgm.netElemInfoMap = make(map[string]*netElemInfo)
mgm.mgInfoMap = make(map[string]*mgInfo)
- // Open Load Balancing Rules Store
- mgm.lbRulesStore = new(lbRulesStore)
- mgm.lbRulesStore.rc, err = redis.NewConnector(redisAddr, DEFAULT_LB_RULES_DB)
+ // Retrieve Sandbox name from environment variable
+ mgm.sandboxName = strings.TrimSpace(os.Getenv("MEEP_SANDBOX_NAME"))
+ if mgm.sandboxName == "" {
+ err = errors.New("MEEP_SANDBOX_NAME env variable not set")
+ log.Error(err.Error())
+ return err
+ }
+ log.Info("MEEP_SANDBOX_NAME: ", mgm.sandboxName)
+
+ // Create message queue
+ mgm.mqLocal, err = mq.NewMsgQueue(mq.GetLocalName(mgm.sandboxName), moduleName, mgm.sandboxName, redisAddr)
if err != nil {
- log.Error("Failed connection to LB Rules Store Redis DB. Error: ", err)
+ log.Error("Failed to create Message Queue with error: ", err)
return err
}
- log.Info("Connected to LB Rules Store redis DB")
+ log.Info("Message Queue created")
- // Create new Model
- mgm.activeModel, err = mod.NewModel(redisAddr, moduleMgManager, "activeScenario")
+ // Create new active scenario model
+ modelCfg := mod.ModelCfg{
+ Name: "activeScenario",
+ Namespace: mgm.sandboxName,
+ Module: moduleName,
+ UpdateCb: nil,
+ DbAddr: redisAddr,
+ }
+ mgm.activeModel, err = mod.NewModel(modelCfg)
if err != nil {
log.Error("Failed to create model: ", err.Error())
return err
}
+ // Get base store key
+ mgm.baseKey = dkm.GetKeyRoot(mgm.sandboxName) + mgmKey
+
+ // Open Load Balancing Rules Store
+ mgm.lbRulesStore = new(lbRulesStore)
+ mgm.lbRulesStore.rc, err = redis.NewConnector(redisAddr, DEFAULT_LB_RULES_DB)
+ if err != nil {
+ log.Error("Failed connection to LB Rules Store Redis DB. Error: ", err)
+ return err
+ }
+ log.Info("Connected to LB Rules Store redis DB")
+
// Flush module data
- _ = mgm.lbRulesStore.rc.DBFlush(moduleMgManager)
+ _ = mgm.lbRulesStore.rc.DBFlush(mgm.baseKey)
// Initialize Edge-LB rules with current active scenario
processActiveScenarioUpdate()
@@ -181,29 +219,39 @@ func Init() (err error) {
// Run - MEEP MG Manager execution
func Run() (err error) {
- // Listen for Model updates
- err = mgm.activeModel.Listen(eventHandler)
+ // Register Message Queue handler
+ handler := mq.MsgHandler{Handler: msgHandler, UserData: nil}
+ mgm.handlerId, err = mgm.mqLocal.RegisterHandler(handler)
if err != nil {
- log.Error("Failed to listen for model updates: ", err.Error())
+ log.Error("Failed to listen for sandbox updates: ", err.Error())
return err
}
+
return nil
}
-func eventHandler(channel string, payload string) {
- // Handle Message according to Rx Channel
- switch channel {
-
- // MEEP Ctrl Engine active scenario update Channel
- case mod.ActiveScenarioEvents:
- log.Debug("Event received on channel: ", mod.ActiveScenarioEvents, " payload: ", payload)
+// Message Queue handler
+func msgHandler(msg *mq.Msg, userData interface{}) {
+ switch msg.Message {
+ case mq.MsgScenarioActivate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ processActiveScenarioUpdate()
+ case mq.MsgScenarioUpdate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ processActiveScenarioUpdate()
+ case mq.MsgScenarioTerminate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
processActiveScenarioUpdate()
default:
- log.Warn("Unsupported channel", " payload: ", payload)
+ log.Trace("Ignoring unsupported message: ", mq.PrintMsg(msg))
}
}
func processActiveScenarioUpdate() {
+ // Sync with active scenario store
+ mgm.activeModel.UpdateScenario()
+
+ _ = httpLog.ReInit(moduleName, mgm.sandboxName, mgm.activeModel.GetScenarioName(), redisAddr, influxAddr)
// Handle empty/missing scenario
if mgm.activeModel.GetScenarioName() == "" {
@@ -241,15 +289,22 @@ func clearScenario() {
mgm.mgInfoMap = make(map[string]*mgInfo)
// Flush module data and send update
- _ = mgm.lbRulesStore.rc.DBFlush(moduleMgManager)
- _ = mgm.lbRulesStore.rc.Publish(channelMgManagerLb, "")
+ _ = mgm.lbRulesStore.rc.DBFlush(mgm.baseKey)
+
+ // Send LB Rules Update message
+ msg := mgm.mqLocal.CreateMsg(mq.MsgMgLbRulesUpdate, moduleTcEngine, mgm.sandboxName)
+ log.Debug("TX MSG: ", mq.PrintMsg(msg))
+ err := mgm.mqLocal.SendMsg(msg)
+ if err != nil {
+ log.Error("Failed to send message. Error: ", err.Error())
+ }
}
func processScenario(model *mod.Model) error {
log.Debug("processScenario")
// Populate net location list
- mgm.netLocList = model.GetNodeNames("POA")
+ mgm.netLocList = model.GetNodeNames(mod.NodeTypePoa, mod.NodeTypePoaCell)
mgm.netLocList = append(mgm.netLocList, model.GetNodeNames("DEFAULT")...)
// Get list of processes
@@ -266,7 +321,7 @@ func processScenario(model *mod.Model) error {
err := errors.New("Error finding process: " + name)
return err
}
- proc, ok := procNode.(*ceModel.Process)
+ proc, ok := procNode.(*dataModel.Process)
if !ok {
err := errors.New("Error casting process: " + name)
return err
@@ -293,7 +348,7 @@ func processScenario(model *mod.Model) error {
err := errors.New("Error finding physical location: " + netElem.phyLoc)
return err
}
- phyLoc, ok := phyLocNode.(*ceModel.PhysicalLocation)
+ phyLoc, ok := phyLocNode.(*dataModel.PhysicalLocation)
if !ok {
err := errors.New("Error casting physical location: " + netElem.phyLoc)
return err
@@ -632,15 +687,19 @@ func applyMgSvcMapping() {
log.Error(err.Error())
return
}
- err = mgm.lbRulesStore.rc.JSONSetEntry(moduleMgManager+":"+typeLb, ".", string(jsonNetElemList))
+ err = mgm.lbRulesStore.rc.JSONSetEntry(mgm.baseKey+typeLb, ".", string(jsonNetElemList))
if err != nil {
log.Error(err.Error())
return
}
- // Publish Edge LB rules update
- log.Debug("TX-MSG [", channelMgManagerLb, "] ", "")
- _ = mgm.lbRulesStore.rc.Publish(channelMgManagerLb, "")
+ // Send LB Rules Update message
+ msg := mgm.mqLocal.CreateMsg(mq.MsgMgLbRulesUpdate, moduleTcEngine, mgm.sandboxName)
+ log.Debug("TX MSG: ", mq.PrintMsg(msg))
+ err = mgm.mqLocal.SendMsg(msg)
+ if err != nil {
+ log.Error("Failed to send message. Error: ", err.Error())
+ }
}
func mgCreate(mg *mgModel.MobilityGroup) error {
diff --git a/go-apps/meep-mg-manager/server/model_mobility_group.go b/go-apps/meep-mg-manager/server/model_mobility_group.go
index a7d24ae3279898891ec4b55e12b60fe3dd61456a..eb90b72737e4efa97c6e9596b5b98e2694e2585b 100644
--- a/go-apps/meep-mg-manager/server/model_mobility_group.go
+++ b/go-apps/meep-mg-manager/server/model_mobility_group.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Mobility Group Service REST API
*
- * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
**Micro-service**
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
**Type & Usage**
Edge Service used by edge applications to share user state between the Mobility Group members
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30005`
+ * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
**Micro-service**
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
**Type & Usage**
Edge Service used by edge applications to share user state between the Mobility Group members
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-mg-manager/server/model_mobility_group_app.go b/go-apps/meep-mg-manager/server/model_mobility_group_app.go
index 025b837bdb46bed01434e3a74bd343dc53b5816a..3b68d94c7ca9bff4d06e6fd78f130feba583b1a6 100644
--- a/go-apps/meep-mg-manager/server/model_mobility_group_app.go
+++ b/go-apps/meep-mg-manager/server/model_mobility_group_app.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Mobility Group Service REST API
*
- * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
**Micro-service**
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
**Type & Usage**
Edge Service used by edge applications to share user state between the Mobility Group members
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30005`
+ * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
**Micro-service**
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
**Type & Usage**
Edge Service used by edge applications to share user state between the Mobility Group members
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-mg-manager/server/model_mobility_group_app_state.go b/go-apps/meep-mg-manager/server/model_mobility_group_app_state.go
index e540bafbc6699d6f3a45b63a492b59047f93a93d..91d1bca6bd316fe0036f741605a9eeeeea36d800 100644
--- a/go-apps/meep-mg-manager/server/model_mobility_group_app_state.go
+++ b/go-apps/meep-mg-manager/server/model_mobility_group_app_state.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Mobility Group Service REST API
*
- * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
**Micro-service**
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
**Type & Usage**
Edge Service used by edge applications to share user state between the Mobility Group members
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30005`
+ * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
**Micro-service**
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
**Type & Usage**
Edge Service used by edge applications to share user state between the Mobility Group members
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-mg-manager/server/model_mobility_group_ue.go b/go-apps/meep-mg-manager/server/model_mobility_group_ue.go
index 046f6bb72b4682fa3793ee4a9028c837c3a76f62..7c646cd4ec8031b93c32eb7964e1750868c95e46 100644
--- a/go-apps/meep-mg-manager/server/model_mobility_group_ue.go
+++ b/go-apps/meep-mg-manager/server/model_mobility_group_ue.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Mobility Group Service REST API
*
- * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
**Micro-service**
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
**Type & Usage**
Edge Service used by edge applications to share user state between the Mobility Group members
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30005`
+ * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
**Micro-service**
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
**Type & Usage**
Edge Service used by edge applications to share user state between the Mobility Group members
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-apps/meep-mg-manager/server/routers.go b/go-apps/meep-mg-manager/server/routers.go
index e536383d64bb5fa98bfb506977dda3fc16a7d2af..16dbb55fa21849bd71d8007779a2a81cd96654d9 100644
--- a/go-apps/meep-mg-manager/server/routers.go
+++ b/go-apps/meep-mg-manager/server/routers.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Mobility Group Service REST API
*
- * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
**Micro-service**
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
**Type & Usage**
Edge Service used by edge applications to share user state between the Mobility Group members
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30005`
+ * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
**Micro-service**
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
**Type & Usage**
Edge Service used by edge applications to share user state between the Mobility Group members
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -29,6 +29,8 @@ import (
"net/http"
"strings"
+ httpLog "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-http-logger"
+
"github.com/gorilla/mux"
)
@@ -46,6 +48,7 @@ func NewRouter() *mux.Router {
for _, route := range routes {
var handler http.Handler = route.HandlerFunc
handler = Logger(handler, route.Name)
+ handler = httpLog.LogRx(handler, "")
router.
Methods(route.Method).
@@ -65,91 +68,91 @@ var routes = Routes{
Route{
"Index",
"GET",
- "/v1/",
+ "/mgm/v1/",
Index,
},
Route{
"CreateMobilityGroup",
strings.ToUpper("Post"),
- "/v1/mg/{mgName}",
+ "/mgm/v1/mg/{mgName}",
CreateMobilityGroup,
},
Route{
"CreateMobilityGroupApp",
strings.ToUpper("Post"),
- "/v1/mg/{mgName}/app/{appId}",
+ "/mgm/v1/mg/{mgName}/app/{appId}",
CreateMobilityGroupApp,
},
Route{
"CreateMobilityGroupUe",
strings.ToUpper("Post"),
- "/v1/mg/{mgName}/app/{appId}/ue",
+ "/mgm/v1/mg/{mgName}/app/{appId}/ue",
CreateMobilityGroupUe,
},
Route{
"DeleteMobilityGroup",
strings.ToUpper("Delete"),
- "/v1/mg/{mgName}",
+ "/mgm/v1/mg/{mgName}",
DeleteMobilityGroup,
},
Route{
"DeleteMobilityGroupApp",
strings.ToUpper("Delete"),
- "/v1/mg/{mgName}/app/{appId}",
+ "/mgm/v1/mg/{mgName}/app/{appId}",
DeleteMobilityGroupApp,
},
Route{
"GetMobilityGroup",
strings.ToUpper("Get"),
- "/v1/mg/{mgName}",
+ "/mgm/v1/mg/{mgName}",
GetMobilityGroup,
},
Route{
"GetMobilityGroupApp",
strings.ToUpper("Get"),
- "/v1/mg/{mgName}/app/{appId}",
+ "/mgm/v1/mg/{mgName}/app/{appId}",
GetMobilityGroupApp,
},
Route{
"GetMobilityGroupAppList",
strings.ToUpper("Get"),
- "/v1/mg/{mgName}/app",
+ "/mgm/v1/mg/{mgName}/app",
GetMobilityGroupAppList,
},
Route{
"GetMobilityGroupList",
strings.ToUpper("Get"),
- "/v1/mg",
+ "/mgm/v1/mg",
GetMobilityGroupList,
},
Route{
"SetMobilityGroup",
strings.ToUpper("Put"),
- "/v1/mg/{mgName}",
+ "/mgm/v1/mg/{mgName}",
SetMobilityGroup,
},
Route{
"SetMobilityGroupApp",
strings.ToUpper("Put"),
- "/v1/mg/{mgName}/app/{appId}",
+ "/mgm/v1/mg/{mgName}/app/{appId}",
SetMobilityGroupApp,
},
Route{
"TransferAppState",
strings.ToUpper("Post"),
- "/v1/mg/{mgName}/app/{appId}/state",
+ "/mgm/v1/mg/{mgName}/app/{appId}/state",
TransferAppState,
},
}
diff --git a/js-packages/meep-ctrl-engine-client/.swagger-codegen-ignore b/go-apps/meep-mon-engine/.swagger-codegen-ignore
similarity index 100%
rename from js-packages/meep-ctrl-engine-client/.swagger-codegen-ignore
rename to go-apps/meep-mon-engine/.swagger-codegen-ignore
diff --git a/js-packages/meep-ctrl-engine-client/.swagger-codegen/VERSION b/go-apps/meep-mon-engine/.swagger-codegen/VERSION
similarity index 100%
rename from js-packages/meep-ctrl-engine-client/.swagger-codegen/VERSION
rename to go-apps/meep-mon-engine/.swagger-codegen/VERSION
diff --git a/go-apps/meep-mon-engine/api/swagger.yaml b/go-apps/meep-mon-engine/api/swagger.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..cb68d4f390ba4653fc3ca7c5f1f412ff6adf4fe9
--- /dev/null
+++ b/go-apps/meep-mon-engine/api/swagger.yaml
@@ -0,0 +1,185 @@
+---
+swagger: "2.0"
+info:
+ description: "This API provides AdvantEDGE microservice & scenario deployment status\
+ \ information collected in the Monitoring Engine.
**Micro-service**
[meep-mon-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mon-engine)\
+ \
**Type & Usage**
Platform interface to retrieve AdvantEDGE microservice\
+ \ & scenario deployment status information
**Details**
API details available\
+ \ at _your-AdvantEDGE-ip-address/api_"
+ version: "1.0.0"
+ title: "AdvantEDGE Monitoring Engine REST API"
+ contact:
+ name: "InterDigital AdvantEDGE Support"
+ email: "AdvantEDGE@InterDigital.com"
+ license:
+ name: "Apache 2.0"
+ url: "https://github.com/InterDigitalInc/AdvantEDGE/blob/master/LICENSE"
+basePath: "/mon-engine/v1"
+tags:
+- name: "Pod States"
+consumes:
+- "application/json"
+produces:
+- "application/json"
+paths:
+ /states:
+ get:
+ tags:
+ - "Pod States"
+ summary: "Get pods states"
+ description: "Get status information of Core micro-services pods and Scenario\
+ \ pods"
+ operationId: "getStates"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "type"
+ in: "query"
+ description: "Pod type"
+ required: false
+ type: "string"
+ enum:
+ - "core"
+ - "scenario"
+ x-exportParamName: "Type_"
+ x-optionalDataType: "String"
+ - name: "sandbox"
+ in: "query"
+ description: "Sandbox name"
+ required: false
+ type: "string"
+ x-exportParamName: "Sandbox"
+ x-optionalDataType: "String"
+ - name: "long"
+ in: "query"
+ description: "Return detailed status information"
+ required: false
+ type: "string"
+ enum:
+ - "true"
+ - "false"
+ x-exportParamName: "Long"
+ x-optionalDataType: "String"
+ responses:
+ 200:
+ description: "successful operation"
+ examples:
+ application/json:
+ podsStatus:
+ - podName: "mypod"
+ namespace: "default"
+ meepApp: "pod1"
+ meepOrigin: "scenario"
+ meepScenario: "myScenario"
+ phase: "Running"
+ podInitialized: "True"
+ podReady: "False"
+ podScheduled: "True"
+ podUnschedulable: "False"
+ podConditionError: "containers with unready status: [myshel]"
+ nbOkContainers: "0"
+ nbTotalContainers: "1"
+ nbPodRestart: "15005"
+ logicalState: "Terminating"
+ startTime: "2018-09-10 14:24:00 +0000 UTC"
+ schema:
+ $ref: "#/definitions/PodsStatus"
+definitions:
+ PodStatus:
+ type: "object"
+ properties:
+ podType:
+ type: "string"
+ description: "Pod type"
+ sandbox:
+ type: "string"
+ description: "Pod Sandbox"
+ name:
+ type: "string"
+ description: "Pod name"
+ namespace:
+ type: "string"
+ description: "Pod namespace"
+ meepApp:
+ type: "string"
+ description: "Pod process name"
+ meepOrigin:
+ type: "string"
+ description: "Pod origin(core, scenario)"
+ meepScenario:
+ type: "string"
+ description: "Pod scenario name"
+ phase:
+ type: "string"
+ description: "Pod phase"
+ podInitialized:
+ type: "string"
+ description: "Pod initialized (true/false)"
+ podReady:
+ type: "string"
+ description: "Pod ready (true/false)"
+ podScheduled:
+ type: "string"
+ description: "Pod scheduled (true/false)"
+ podUnschedulable:
+ type: "string"
+ description: "Pod unschedulable (true/false)"
+ podConditionError:
+ type: "string"
+ description: "Pod error message"
+ containerStatusesMsg:
+ type: "string"
+ description: "Failed container error message"
+ nbOkContainers:
+ type: "string"
+ description: "Number of containers that are up"
+ nbTotalContainers:
+ type: "string"
+ description: "Number of total containers in the pod"
+ nbPodRestart:
+ type: "string"
+ description: "Number of container failures leading to pod restarts"
+ logicalState:
+ type: "string"
+ description: "State that is mapping the kubernetes api state"
+ startTime:
+ type: "string"
+ description: "Pod creation time"
+ example:
+ podStatus:
+ - type: "core"
+ sandbox: "sbox-1"
+ podName: "mypod"
+ namespace: "sbox-1"
+ meepApp: "pod1"
+ meepOrigin: "scenario"
+ meepScenario: "myScenario"
+ phase: "Running"
+ podInitialized: "True"
+ podReady: "False"
+ podScheduled: "True"
+ podUnschedulable: "False"
+ podConditionError: "containers with unready status: [myshel]"
+ nbOkContainers: "0"
+ nbTotalContainers: "1"
+ nbPodRestart: "15005"
+ startTime: "2018-09-10 14:24:00 +0000 UTC"
+ PodsStatus:
+ type: "object"
+ properties:
+ podStatus:
+ type: "array"
+ items:
+ $ref: "#/definitions/PodStatus"
+ description: "List of all pods status"
+ example: {}
+responses:
+ Std200:
+ description: "OK"
+ Std404:
+ description: "Not found"
+ Std500:
+ description: "Internal server error"
+externalDocs:
+ description: "GitHub Wiki"
+ url: "https://github.com/InterDigitalInc/AdvantEDGE/wiki"
diff --git a/go-apps/meep-mon-engine/go.mod b/go-apps/meep-mon-engine/go.mod
index a1f379a19110a75d987f9a74e0f0e936da6e0032..86271083a2a651a74994eb0e35789bb7c190a2cc 100644
--- a/go-apps/meep-mon-engine/go.mod
+++ b/go-apps/meep-mon-engine/go.mod
@@ -3,13 +3,18 @@ module github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-mon-engine
go 1.12
require (
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-sandbox-store v0.0.0
github.com/gogo/protobuf v1.2.1 // indirect
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef // indirect
github.com/google/btree v1.0.0 // indirect
github.com/google/gofuzz v1.0.0 // indirect
github.com/googleapis/gnostic v0.2.0 // indirect
+ github.com/gorilla/handlers v1.4.2
+ github.com/gorilla/mux v1.7.4
github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc // indirect
github.com/hashicorp/golang-lru v0.5.1 // indirect
github.com/json-iterator/go v1.1.6 // indirect
@@ -30,6 +35,9 @@ require (
)
replace (
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr => ../../go-packages/meep-data-key-mgr
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger => ../../go-packages/meep-logger
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq => ../../go-packages/meep-mq
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis => ../../go-packages/meep-redis
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-sandbox-store => ../../go-packages/meep-sandbox-store
)
diff --git a/go-apps/meep-mon-engine/go.sum b/go-apps/meep-mon-engine/go.sum
index a63bf8fecc6726d2d20a300aba8b7252f910a96a..026faf5c680a162df9ec6a6954cf6026139739a9 100644
--- a/go-apps/meep-mon-engine/go.sum
+++ b/go-apps/meep-mon-engine/go.sum
@@ -1,17 +1,14 @@
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db h1:Zkf5kwhxdW0xV7WM/crqIcOP5LCFGnAmumWSFAewJ74=
github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db/go.mod h1:RU+6d0CNIRSp6yo1mXLIIrnFa/3LHhvcDVLVJyovptM=
github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351 h1:1u1XrfCBnY+GijnyU6O1k4odp5TnqZQTsp5v7+n/E4Y=
github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351/go.mod h1:HxwfbuElTuGf+/uKZfjJrCnv0BmmpkPJDI7gBwj1KkM=
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/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/go-redis/redis v6.15.2+incompatible h1:9SpNVG76gr6InJGxoZ6IuuxaCOQwDAhzyXg+Bs+0Sb4=
github.com/go-redis/redis v6.15.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE=
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
-github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef h1:veQD95Isof8w9/WXiA+pa3tz3fJXkt5B7QaRBrM62gk=
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -21,11 +18,14 @@ github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/googleapis/gnostic v0.2.0 h1:l6N3VoaVzTncYYW+9yOz2LJJammFZGBO13sqgEhpy9g=
github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
+github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg=
+github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
+github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc=
+github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc h1:f8eY6cV/x1x+HLjOp4r72s/31/V2aTUtg5oKRRPf8/Q=
github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
@@ -38,20 +38,15 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ
github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo=
github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME=
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
-github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a h1:Igim7XhdOpBnWPuYJ70XcNpq8q3BCACtVgNfoJxOV7g=
golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
@@ -62,7 +57,6 @@ golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73r
golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a h1:tImsplftrFpALCYumobsd0K86vlAs/eXGFms2txfJfA=
golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -75,13 +69,10 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
diff --git a/go-apps/meep-mon-engine/main.go b/go-apps/meep-mon-engine/main.go
index 995b573711de4f91ccc2e4382ecf50b4ab2457ca..615cdde7245ce88c9d217570c2427eca074058d5 100644
--- a/go-apps/meep-mon-engine/main.go
+++ b/go-apps/meep-mon-engine/main.go
@@ -17,12 +17,16 @@
package main
import (
+ "net/http"
"os"
"os/signal"
"syscall"
"time"
+ server "github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-mon-engine/server"
log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
+
+ "github.com/gorilla/handlers"
)
func init() {
@@ -32,7 +36,7 @@ func init() {
func main() {
log.Info(os.Args)
- log.Info("Starting Monitoring Engine")
+ log.Info("Starting Monitoring Engine Service")
run := true
go func() {
@@ -45,21 +49,27 @@ func main() {
}()
go func() {
- // Initialize Mon Engine
- err := Init()
+ // Initialize Monitoring Engine
+ err := server.Init()
if err != nil {
- log.Error("Failed to initialize Mon Engine")
+ log.Error("Failed to initialize Monitoring Engine")
run = false
return
}
- // Run Mon Engine
- err = Run()
+ // Start Monitoring Engine Event Handler thread
+ err = server.Run()
if err != nil {
- log.Error("Failed to run Mon Engine")
+ log.Error("Failed to start Monitoring Engine")
run = false
return
}
+
+ // Start Monitoring Engine REST API Server
+ router := server.NewRouter()
+ methods := handlers.AllowedMethods([]string{"OPTIONS", "DELETE", "GET", "HEAD", "POST", "PUT"})
+ header := handlers.AllowedHeaders([]string{"content-type"})
+ log.Fatal(http.ListenAndServe(":80", handlers.CORS(methods, header)(router)))
run = false
}()
@@ -67,6 +77,7 @@ func main() {
for {
if !run {
log.Info("Ran for ", count, " seconds")
+ server.Stop()
break
}
time.Sleep(time.Second)
diff --git a/go-apps/meep-mon-engine/mon-engine.go b/go-apps/meep-mon-engine/mon-engine.go
deleted file mode 100644
index 7aa91858c18a7d37746b6d392c4c7b2bdf09a084..0000000000000000000000000000000000000000
--- a/go-apps/meep-mon-engine/mon-engine.go
+++ /dev/null
@@ -1,329 +0,0 @@
-/*
- * Copyright (c) 2019 InterDigital Communications, Inc
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package main
-
-import (
- "fmt"
- "time"
-
- log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
- redis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis"
- v1 "k8s.io/api/core/v1"
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-
- "k8s.io/apimachinery/pkg/fields"
- "k8s.io/client-go/kubernetes"
- "k8s.io/client-go/rest"
- "k8s.io/client-go/tools/cache"
-)
-
-const moduleMonEngine string = "mon-engine"
-
-//index in array
-const EVENT_POD_ADDED = 0
-const EVENT_POD_MODIFIED = 1
-const EVENT_POD_DELETED = 2
-
-var pod_event_str = [3]string{"pod added", "pod modified", "pod deleted"}
-
-type MonEngineInfo struct {
- PodName string
- Namespace string
- MeepApp string
- MeepOrigin string
- MeepScenario string
- Phase string
- PodInitialized string
- PodReady string
- PodScheduled string
- PodUnschedulable string
- PodConditionError string
- ContainerStatusesMsg string
- NbOkContainers int
- NbTotalContainers int
- NbPodRestart int
- LogicalState string
- StartTime string
-}
-
-var rc *redis.Connector
-var redisDBAddr = "meep-redis-master:6379"
-
-// Init - Mon Engine initialization
-func Init() (err error) {
-
- // Connect to Redis DB
- rc, err = redis.NewConnector(redisDBAddr, 0)
- if err != nil {
- log.Error("Failed connection to Redis: ", err)
- return err
- }
- log.Info("Connected to Mon Engine DB")
-
- // Empty DB
- _ = rc.DBFlush(moduleMonEngine)
-
- return nil
-}
-
-// Run - Mon Engine main loop
-func Run() (err error) {
-
- // Watch k8s pods (main loop)
- err = k8sConnect()
- if err != nil {
- log.Error("Failed to watch k8s pods")
- return err
- }
-
- return nil
-}
-
-func connectToAPISvr() (*kubernetes.Clientset, error) {
-
- // Create the in-cluster config
- config, err := rest.InClusterConfig()
- if err != nil {
- log.Error(err)
- return nil, err
- }
- // Create the clientset
- clientset, err := kubernetes.NewForConfig(config)
- if err != nil {
- log.Error(err)
- return nil, err
- }
- return clientset, nil
-}
-
-func printfMonEngineInfo(monEngineInfo MonEngineInfo, reason int) {
-
- log.Debug("Monitoring Engine info *** ", pod_event_str[reason], " *** ",
- " pod name : ", monEngineInfo.PodName,
- " namespace : ", monEngineInfo.Namespace,
- " meepApp : ", monEngineInfo.MeepApp,
- " meepOrigin : ", monEngineInfo.MeepOrigin,
- " meepScenario : ", monEngineInfo.MeepScenario,
- " phase : ", monEngineInfo.Phase,
- " podInitialized : ", monEngineInfo.PodInitialized,
- " podUnschedulable : ", monEngineInfo.PodUnschedulable,
- " podScheduled : ", monEngineInfo.PodScheduled,
- " podReady : ", monEngineInfo.PodReady,
- " podConditionError : ", monEngineInfo.PodConditionError,
- " ContainerStatusesMsg : ", monEngineInfo.ContainerStatusesMsg,
- " NbOkContainers : ", monEngineInfo.NbOkContainers,
- " NbTotalContainers : ", monEngineInfo.NbTotalContainers,
- " NbPodRestart : ", monEngineInfo.NbPodRestart,
- " LogicalState : ", monEngineInfo.LogicalState,
- " StartTime : ", monEngineInfo.StartTime)
-}
-
-func processEvent(obj interface{}, reason int) {
- if pod, ok := obj.(*v1.Pod); ok {
-
- var monEngineInfo MonEngineInfo
-
- if reason != EVENT_POD_DELETED {
- podConditionMsg := ""
- podScheduled := "False"
- podReady := "False"
- podInitialized := "False"
- podUnschedulable := "False"
- nbConditions := len(pod.Status.Conditions)
- for i := 0; i < nbConditions; i++ {
- switch pod.Status.Conditions[i].Type {
- case "PodScheduled":
- podScheduled = string(pod.Status.Conditions[i].Status)
- case "Ready":
- podReady = string(pod.Status.Conditions[i].Status)
- if podReady == "False" {
- podConditionMsg = string(pod.Status.Conditions[i].Message)
- }
- case "Initialized":
- podInitialized = string(pod.Status.Conditions[i].Status)
- case "Unschedulable":
- podUnschedulable = string(pod.Status.Conditions[i].Status)
- }
- }
-
- nbContainers := len(pod.Status.ContainerStatuses)
- okContainers := 0
- restartCount := 0
- reasonFailureStr := ""
- for i := 0; i < nbContainers; i++ {
- if pod.Status.ContainerStatuses[i].Ready {
- okContainers++
- } else {
- if pod.Status.ContainerStatuses[i].State.Waiting != nil {
- reasonFailureStr = pod.Status.ContainerStatuses[i].State.Waiting.Reason
- } else if pod.Status.ContainerStatuses[i].State.Terminated != nil {
- if reasonFailureStr != "" {
- reasonFailureStr = pod.Status.ContainerStatuses[i].State.Terminated.Reason
- }
- }
- }
- //only update if the value is greater than 0, and we keep it
- if restartCount == 0 {
- restartCount = int(pod.Status.ContainerStatuses[i].RestartCount)
- }
- }
-
- monEngineInfo.PodInitialized = podInitialized
- monEngineInfo.PodUnschedulable = podUnschedulable
- monEngineInfo.PodScheduled = podScheduled
- monEngineInfo.PodReady = podReady
- monEngineInfo.PodConditionError = podConditionMsg
- monEngineInfo.ContainerStatusesMsg = reasonFailureStr
- monEngineInfo.NbOkContainers = okContainers
- monEngineInfo.NbTotalContainers = nbContainers
- monEngineInfo.NbPodRestart = restartCount
- }
-
- //common for both the add, update and delete
- monEngineInfo.Phase = string(pod.Status.Phase)
- monEngineInfo.PodName = pod.Name
- monEngineInfo.Namespace = pod.Namespace
- monEngineInfo.MeepApp = pod.Labels["meepApp"]
- monEngineInfo.MeepOrigin = pod.Labels["meepOrigin"]
- monEngineInfo.MeepScenario = pod.Labels["meepScenario"]
- if pod.Status.StartTime != nil {
- monEngineInfo.StartTime = pod.Status.StartTime.String()
- }
-
- monEngineInfo.LogicalState = monEngineInfo.Phase
-
- //Phase is Running but might not really be because of some other attributes
- //start of override section of the LogicalState by specific conditions
-
- if pod.GetObjectMeta().GetDeletionTimestamp() != nil {
- monEngineInfo.LogicalState = "Terminating"
- } else {
- if monEngineInfo.PodReady != "True" {
- monEngineInfo.LogicalState = "Pending"
- } else {
- if monEngineInfo.NbOkContainers < monEngineInfo.NbTotalContainers {
- monEngineInfo.LogicalState = "Failed"
- }
- }
- }
- //end of override section
-
- printfMonEngineInfo(monEngineInfo, reason)
-
- if reason == EVENT_POD_DELETED {
- deleteEntryInDB(monEngineInfo)
- } else {
- addOrUpdateEntryInDB(monEngineInfo)
- }
- }
-}
-
-func addOrUpdateEntryInDB(monEngineInfo MonEngineInfo) {
- // Populate rule fields
- fields := make(map[string]interface{})
- fields["name"] = monEngineInfo.PodName
- fields["namespace"] = monEngineInfo.Namespace
- fields["meepApp"] = monEngineInfo.MeepApp
- fields["meepOrigin"] = monEngineInfo.MeepOrigin
- fields["meepScenario"] = monEngineInfo.MeepScenario
- fields["phase"] = monEngineInfo.Phase
- fields["initialised"] = monEngineInfo.PodInitialized
- fields["scheduled"] = monEngineInfo.PodScheduled
- fields["ready"] = monEngineInfo.PodReady
- fields["unschedulable"] = monEngineInfo.PodUnschedulable
- fields["condition-error"] = monEngineInfo.PodConditionError
- fields["nbOkContainers"] = monEngineInfo.NbOkContainers
- fields["nbTotalContainers"] = monEngineInfo.NbTotalContainers
- fields["nbPodRestart"] = monEngineInfo.NbPodRestart
- fields["logicalState"] = monEngineInfo.LogicalState
- fields["startTime"] = monEngineInfo.StartTime
-
- // Make unique key
- key := moduleMonEngine + ":MO-" + monEngineInfo.MeepOrigin + ":MS-" + monEngineInfo.MeepScenario + ":MA-" + monEngineInfo.MeepApp + ":" + monEngineInfo.PodName
-
- // Set rule information in DB
- err := rc.SetEntry(key, fields)
- if err != nil {
- log.Error("Entry could not be updated in DB for ", monEngineInfo.MeepApp, ": ", err)
- }
-}
-
-func deleteEntryInDB(monEngineInfo MonEngineInfo) {
-
- // Make unique key
- key := moduleMonEngine + ":MO-" + monEngineInfo.MeepOrigin + ":MS-" + monEngineInfo.MeepScenario + ":MA-" + monEngineInfo.MeepApp + ":" + monEngineInfo.PodName
-
- // Set rule information in DB
- err := rc.DelEntry(key)
- if err != nil {
- log.Error("Entry could not be deleted in DB for ", monEngineInfo.MeepApp, ": ", err)
- }
-}
-
-func k8sConnect() (err error) {
-
- // Connect to K8s API Server
- clientset, err := connectToAPISvr()
- if err != nil {
- log.Error("Failed to connect with k8s API Server. Error: ", err)
- return err
- }
-
- //scenarioName := "latency-demo"
- meepOrigin := "core"
-
- // Retrieve pods from k8s api with scenario label
- pods, err := clientset.CoreV1().Pods("").List(
- metav1.ListOptions{LabelSelector: fmt.Sprintf("meepOrigin=%s", meepOrigin)})
- if err != nil {
- log.Error("Failed to retrieve services from k8s API Server. Error: ", err)
- return err
- }
-
- // Store service IPs
- for _, pod := range pods.Items {
- podName := pod.ObjectMeta.Name
- podPhase := pod.Status.Phase
- log.Debug("podName: ", podName, " podPhase: ", podPhase)
- }
-
- watchlist := cache.NewListWatchFromClient(clientset.CoreV1().RESTClient(), "pods", v1.NamespaceAll, fields.Everything())
-
- _, controller := cache.NewInformer( // also take a look at NewSharedIndexInformer
- watchlist,
- &v1.Pod{},
- 0, //Duration is int64
- cache.ResourceEventHandlerFuncs{
- AddFunc: func(obj interface{}) {
- processEvent(obj, EVENT_POD_ADDED)
- },
- DeleteFunc: func(obj interface{}) {
- processEvent(obj, EVENT_POD_DELETED)
- },
- UpdateFunc: func(oldObj, newObj interface{}) {
- processEvent(newObj, EVENT_POD_MODIFIED)
- },
- },
- )
-
- stop := make(chan struct{})
- defer close(stop)
- go controller.Run(stop)
- for {
- time.Sleep(time.Second)
- }
-}
diff --git a/go-apps/meep-ctrl-engine/server/README.md b/go-apps/meep-mon-engine/server/README.md
similarity index 50%
rename from go-apps/meep-ctrl-engine/server/README.md
rename to go-apps/meep-mon-engine/server/README.md
index 278b8dfcc217483a6f58514c92ad8210cd916cb2..19387ccbf932b3385f9502441a6efca0ce229433 100644
--- a/go-apps/meep-ctrl-engine/server/README.md
+++ b/go-apps/meep-mon-engine/server/README.md
@@ -1,6 +1,6 @@
# Go API Server for server
-This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
**Micro-service**
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
**Type & Usage**
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30000`
+This API provides AdvantEDGE microservice & scenario deployment status information collected in the Monitoring Engine.
**Micro-service**
[meep-mon-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mon-engine)
**Type & Usage**
Platform interface to retrieve AdvantEDGE microservice & scenario deployment status information
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
## Overview
This server was generated by the [swagger-codegen]
@@ -13,7 +13,7 @@ To see how to make this your own, look here:
[README](https://github.com/swagger-api/swagger-codegen/blob/master/README.md)
- API version: 1.0.0
-- Build date: 2020-03-03T14:26:29.865-05:00
+- Build date: 2020-06-28T22:53:30.736-04:00
### Running the server
diff --git a/go-apps/meep-ctrl-engine/server/api_pod_states.go b/go-apps/meep-mon-engine/server/api_pod_states.go
similarity index 55%
rename from go-apps/meep-ctrl-engine/server/api_pod_states.go
rename to go-apps/meep-mon-engine/server/api_pod_states.go
index 025b47cea9452d297b3b93bb0e2440726e01e1e3..8b8b2237aa05784353466134b996cfb24f18135c 100644
--- a/go-apps/meep-ctrl-engine/server/api_pod_states.go
+++ b/go-apps/meep-mon-engine/server/api_pod_states.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Monitoring Engine REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
**Micro-service**
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
**Type & Usage**
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30000`
+ * This API provides AdvantEDGE microservice & scenario deployment status information collected in the Monitoring Engine.
**Micro-service**
[meep-mon-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mon-engine)
**Type & Usage**
Platform interface to retrieve AdvantEDGE microservice & scenario deployment status information
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -28,7 +28,6 @@ import (
"net/http"
)
-// GetStates - This operation returns status information for pods
func GetStates(w http.ResponseWriter, r *http.Request) {
- ceGetStates(w, r)
+ meGetStates(w, r)
}
diff --git a/go-apps/meep-ctrl-engine/server/logger.go b/go-apps/meep-mon-engine/server/logger.go
similarity index 66%
rename from go-apps/meep-ctrl-engine/server/logger.go
rename to go-apps/meep-mon-engine/server/logger.go
index 55d3b2569a012bd1e40e72c0fec9440f5d1ef4a0..379269b7dfacce9fb4aaf60429a673bcc700b801 100644
--- a/go-apps/meep-ctrl-engine/server/logger.go
+++ b/go-apps/meep-mon-engine/server/logger.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Monitoring Engine REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
**Micro-service**
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
**Type & Usage**
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30000`
+ * This API provides AdvantEDGE microservice & scenario deployment status information collected in the Monitoring Engine.
**Micro-service**
[meep-mon-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mon-engine)
**Type & Usage**
Platform interface to retrieve AdvantEDGE microservice & scenario deployment status information
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-ctrl-engine-client/model_pod_status.go b/go-apps/meep-mon-engine/server/model_pod_status.go
similarity index 75%
rename from go-packages/meep-ctrl-engine-client/model_pod_status.go
rename to go-apps/meep-mon-engine/server/model_pod_status.go
index 9a55afe8e9824bc7c3c7cae7c8fa561d393fbfa9..9a95afdf635c57bc9c22c988d22e2b5aa46dd714 100644
--- a/go-packages/meep-ctrl-engine-client/model_pod_status.go
+++ b/go-apps/meep-mon-engine/server/model_pod_status.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,50 +13,73 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Monitoring Engine REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
**Micro-service**
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
**Type & Usage**
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30000`
+ * This API provides AdvantEDGE microservice & scenario deployment status information collected in the Monitoring Engine.
**Micro-service**
[meep-mon-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mon-engine)
**Type & Usage**
Platform interface to retrieve AdvantEDGE microservice & scenario deployment status information
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
-package client
+package server
type PodStatus struct {
+
+ // Pod type
+ PodType string `json:"podType,omitempty"`
+
+ // Pod Sandbox
+ Sandbox string `json:"sandbox,omitempty"`
+
// Pod name
Name string `json:"name,omitempty"`
+
// Pod namespace
Namespace string `json:"namespace,omitempty"`
+
// Pod process name
MeepApp string `json:"meepApp,omitempty"`
+
// Pod origin(core, scenario)
MeepOrigin string `json:"meepOrigin,omitempty"`
+
// Pod scenario name
MeepScenario string `json:"meepScenario,omitempty"`
+
// Pod phase
Phase string `json:"phase,omitempty"`
+
// Pod initialized (true/false)
PodInitialized string `json:"podInitialized,omitempty"`
+
// Pod ready (true/false)
PodReady string `json:"podReady,omitempty"`
+
// Pod scheduled (true/false)
PodScheduled string `json:"podScheduled,omitempty"`
+
// Pod unschedulable (true/false)
PodUnschedulable string `json:"podUnschedulable,omitempty"`
+
// Pod error message
PodConditionError string `json:"podConditionError,omitempty"`
+
// Failed container error message
ContainerStatusesMsg string `json:"containerStatusesMsg,omitempty"`
+
// Number of containers that are up
NbOkContainers string `json:"nbOkContainers,omitempty"`
+
// Number of total containers in the pod
NbTotalContainers string `json:"nbTotalContainers,omitempty"`
+
// Number of container failures leading to pod restarts
NbPodRestart string `json:"nbPodRestart,omitempty"`
+
// State that is mapping the kubernetes api state
LogicalState string `json:"logicalState,omitempty"`
+
// Pod creation time
StartTime string `json:"startTime,omitempty"`
}
diff --git a/go-packages/meep-ctrl-engine-client/model_pods_status.go b/go-apps/meep-mon-engine/server/model_pods_status.go
similarity index 58%
rename from go-packages/meep-ctrl-engine-client/model_pods_status.go
rename to go-apps/meep-mon-engine/server/model_pods_status.go
index 4d897497c3c5d0ea6acea3b3d9a191be166b160e..0f78cb98ffaf8e00c3cbd3d872b399bd48df3850 100644
--- a/go-packages/meep-ctrl-engine-client/model_pods_status.go
+++ b/go-apps/meep-mon-engine/server/model_pods_status.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,16 +13,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Monitoring Engine REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
**Micro-service**
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
**Type & Usage**
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30000`
+ * This API provides AdvantEDGE microservice & scenario deployment status information collected in the Monitoring Engine.
**Micro-service**
[meep-mon-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mon-engine)
**Type & Usage**
Platform interface to retrieve AdvantEDGE microservice & scenario deployment status information
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
-package client
+package server
// List of all pods status
type PodsStatus struct {
diff --git a/go-apps/meep-mon-engine/server/mon-engine.go b/go-apps/meep-mon-engine/server/mon-engine.go
new file mode 100644
index 0000000000000000000000000000000000000000..80dfdf9a814c756265a178f174a66dc5691457bb
--- /dev/null
+++ b/go-apps/meep-mon-engine/server/mon-engine.go
@@ -0,0 +1,635 @@
+/*
+ * Copyright (c) 2019 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package server
+
+import (
+ "encoding/json"
+ "fmt"
+ "net/http"
+ "os"
+ "strings"
+
+ dkm "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr"
+ log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
+ mq "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq"
+ redis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis"
+ ss "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-sandbox-store"
+ v1 "k8s.io/api/core/v1"
+
+ "k8s.io/apimachinery/pkg/fields"
+ "k8s.io/client-go/kubernetes"
+ "k8s.io/client-go/rest"
+ "k8s.io/client-go/tools/cache"
+)
+
+type UserData struct {
+ AllPodsStatus PodsStatus
+ ExpectedPods map[string]*PodStatus
+}
+
+type MonEngineInfo struct {
+ PodType string
+ PodName string
+ Namespace string
+ MeepApp string
+ MeepOrigin string
+ MeepScenario string
+ Release string
+ Phase string
+ PodInitialized string
+ PodReady string
+ PodScheduled string
+ PodUnschedulable string
+ PodConditionError string
+ ContainerStatusesMsg string
+ NbOkContainers int
+ NbTotalContainers int
+ NbPodRestart int
+ LogicalState string
+ StartTime string
+}
+
+const moduleName = "meep-mon-engine"
+const moduleNamespace = "default"
+const notFoundStr = "na"
+const monEngineKey = "mon-engine:"
+
+// MQ payload fields
+const fieldSandboxName = "sandbox-name"
+
+// index in array
+const EVENT_POD_ADDED = 0
+const EVENT_POD_MODIFIED = 1
+const EVENT_POD_DELETED = 2
+
+var pod_event_str = [3]string{"pod added", "pod modified", "pod deleted"}
+var rc *redis.Connector
+var redisAddr = "meep-redis-master:6379"
+var baseKey string = dkm.GetKeyRootGlobal() + monEngineKey
+var stopChan = make(chan struct{})
+var mqGlobal *mq.MsgQueue
+var handlerId int
+var sandboxStore *ss.SandboxStore
+
+var depPodsList []string
+var corePodsList []string
+var sboxPodsList []string
+
+var expectedDepPods map[string]*PodStatus
+var expectedCorePods map[string]*PodStatus
+var expectedSboxPods map[string]*PodStatus
+
+// Init - Mon Engine initialization
+func Init() (err error) {
+
+ // Retrieve dependency pod list from environment variable
+ expectedDepPods = make(map[string]*PodStatus)
+ depPodsStr := strings.TrimSpace(os.Getenv("MEEP_DEPENDENCY_PODS"))
+ log.Info("MEEP_DEPENDENCY_PODS: ", depPodsStr)
+ if depPodsStr != "" {
+ depPodsList = strings.Split(depPodsStr, ",")
+ for _, pod := range depPodsList {
+ podStatus := new(PodStatus)
+ podStatus.PodType = "core"
+ podStatus.Sandbox = "default"
+ podStatus.Name = pod
+ podStatus.LogicalState = "NotAvailable"
+ expectedDepPods[pod] = podStatus
+ }
+ }
+
+ // Retrieve core pod list from environment variable
+ expectedCorePods = make(map[string]*PodStatus)
+ corePodsStr := strings.TrimSpace(os.Getenv("MEEP_CORE_PODS"))
+ log.Info("MEEP_CORE_PODS: ", corePodsStr)
+ if corePodsStr != "" {
+ corePodsList = strings.Split(corePodsStr, ",")
+ for _, pod := range corePodsList {
+ podStatus := new(PodStatus)
+ podStatus.PodType = "core"
+ podStatus.Sandbox = "default"
+ podStatus.Name = pod
+ podStatus.LogicalState = "NotAvailable"
+ expectedCorePods[pod] = podStatus
+ }
+ }
+
+ // Retrieve sandbox pod list from environment variable
+ expectedSboxPods = make(map[string]*PodStatus)
+ sboxPodsStr := strings.TrimSpace(os.Getenv("MEEP_SANDBOX_PODS"))
+ log.Info("MEEP_SANDBOX_PODS: ", sboxPodsStr)
+ if sboxPodsStr != "" {
+ sboxPodsList = strings.Split(sboxPodsStr, ",")
+ }
+
+ // Create message queue
+ mqGlobal, err = mq.NewMsgQueue(mq.GetGlobalName(), moduleName, moduleNamespace, redisAddr)
+ if err != nil {
+ log.Error("Failed to create Message Queue with error: ", err)
+ return err
+ }
+ log.Info("Message Queue created")
+
+ // Connect to Redis DB
+ rc, err = redis.NewConnector(redisAddr, 0)
+ if err != nil {
+ log.Error("Failed connection to Redis: ", err)
+ return err
+ }
+ log.Info("Connected to Mon Engine DB")
+
+ // Empty DB
+ _ = rc.DBFlush(baseKey)
+
+ // Connect to Sandbox Store
+ sandboxStore, err = ss.NewSandboxStore(redisAddr)
+ if err != nil {
+ log.Error("Failed connection to Sandbox Store: ", err.Error())
+ return err
+ }
+ log.Info("Connected to Sandbox Store")
+
+ return nil
+}
+
+// Run - Mon Engine monitoring thread
+func Run() (err error) {
+
+ // Initialize expected pods for existing sandboxes
+ if sboxMap, err := sandboxStore.GetAll(); err == nil {
+ for _, sbox := range sboxMap {
+ addExpectedPods(sbox.Name)
+ }
+ }
+
+ // Register Message Queue handler
+ handler := mq.MsgHandler{Handler: msgHandler, UserData: nil}
+ handlerId, err = mqGlobal.RegisterHandler(handler)
+ if err != nil {
+ log.Error("Failed to register MsgQueue handler: ", err.Error())
+ return err
+ }
+
+ // Start thread to watch k8s pods
+ err = k8sConnect()
+ if err != nil {
+ log.Error("Failed to watch k8s pods")
+ return err
+ }
+
+ return nil
+}
+
+func Stop() {
+ close(stopChan)
+}
+
+// Message Queue handler
+func msgHandler(msg *mq.Msg, userData interface{}) {
+ switch msg.Message {
+ case mq.MsgSandboxCreate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ addExpectedPods(msg.Payload[fieldSandboxName])
+ case mq.MsgSandboxDestroy:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ removeExpectedPods(msg.Payload[fieldSandboxName])
+ default:
+ log.Trace("Ignoring unsupported message: ", mq.PrintMsg(msg))
+ }
+}
+
+func connectToAPISvr() (*kubernetes.Clientset, error) {
+
+ // Create the in-cluster config
+ config, err := rest.InClusterConfig()
+ if err != nil {
+ log.Error(err)
+ return nil, err
+ }
+ // Create the clientset
+ clientset, err := kubernetes.NewForConfig(config)
+ if err != nil {
+ log.Error(err)
+ return nil, err
+ }
+ return clientset, nil
+}
+
+func printfMonEngineInfo(monEngineInfo MonEngineInfo, reason int) {
+
+ log.Debug("Monitoring Engine info *** ", pod_event_str[reason], " *** ",
+ " podType : ", monEngineInfo.PodType,
+ " podName : ", monEngineInfo.PodName,
+ " namespace : ", monEngineInfo.Namespace,
+ " meepApp : ", monEngineInfo.MeepApp,
+ " meepOrigin : ", monEngineInfo.MeepOrigin,
+ " meepScenario : ", monEngineInfo.MeepScenario,
+ " release : ", monEngineInfo.Release,
+ " phase : ", monEngineInfo.Phase,
+ " podInitialized : ", monEngineInfo.PodInitialized,
+ " podUnschedulable : ", monEngineInfo.PodUnschedulable,
+ " podScheduled : ", monEngineInfo.PodScheduled,
+ " podReady : ", monEngineInfo.PodReady,
+ " podConditionError : ", monEngineInfo.PodConditionError,
+ " ContainerStatusesMsg : ", monEngineInfo.ContainerStatusesMsg,
+ " NbOkContainers : ", monEngineInfo.NbOkContainers,
+ " NbTotalContainers : ", monEngineInfo.NbTotalContainers,
+ " NbPodRestart : ", monEngineInfo.NbPodRestart,
+ " LogicalState : ", monEngineInfo.LogicalState,
+ " StartTime : ", monEngineInfo.StartTime)
+}
+
+func processEvent(obj interface{}, reason int) {
+ var ok bool
+ var pod *v1.Pod
+
+ // Validate object type is Pod
+ if pod, ok = obj.(*v1.Pod); !ok {
+ return
+ }
+
+ var monEngineInfo MonEngineInfo
+
+ if reason != EVENT_POD_DELETED {
+ podConditionMsg := ""
+ podScheduled := "False"
+ podReady := "False"
+ podInitialized := "False"
+ podUnschedulable := "False"
+ nbConditions := len(pod.Status.Conditions)
+ for i := 0; i < nbConditions; i++ {
+ switch pod.Status.Conditions[i].Type {
+ case "PodScheduled":
+ podScheduled = string(pod.Status.Conditions[i].Status)
+ case "Ready":
+ podReady = string(pod.Status.Conditions[i].Status)
+ if podReady == "False" {
+ podConditionMsg = string(pod.Status.Conditions[i].Message)
+ }
+ case "Initialized":
+ podInitialized = string(pod.Status.Conditions[i].Status)
+ case "Unschedulable":
+ podUnschedulable = string(pod.Status.Conditions[i].Status)
+ }
+ }
+
+ nbContainers := len(pod.Status.ContainerStatuses)
+ okContainers := 0
+ restartCount := 0
+ reasonFailureStr := ""
+ for i := 0; i < nbContainers; i++ {
+ if pod.Status.ContainerStatuses[i].Ready {
+ okContainers++
+ } else if pod.Status.ContainerStatuses[i].State.Waiting != nil {
+ reasonFailureStr = pod.Status.ContainerStatuses[i].State.Waiting.Reason
+ } else if pod.Status.ContainerStatuses[i].State.Terminated != nil && reasonFailureStr != "" {
+ reasonFailureStr = pod.Status.ContainerStatuses[i].State.Terminated.Reason
+ }
+ //only update if the value is greater than 0, and we keep it
+ if restartCount == 0 {
+ restartCount = int(pod.Status.ContainerStatuses[i].RestartCount)
+ }
+ }
+
+ monEngineInfo.PodInitialized = podInitialized
+ monEngineInfo.PodUnschedulable = podUnschedulable
+ monEngineInfo.PodScheduled = podScheduled
+ monEngineInfo.PodReady = podReady
+ monEngineInfo.PodConditionError = podConditionMsg
+ monEngineInfo.ContainerStatusesMsg = reasonFailureStr
+ monEngineInfo.NbOkContainers = okContainers
+ monEngineInfo.NbTotalContainers = nbContainers
+ monEngineInfo.NbPodRestart = restartCount
+ }
+
+ //common for both the add, update and delete
+ monEngineInfo.Phase = string(pod.Status.Phase)
+ monEngineInfo.PodName = pod.Name
+ monEngineInfo.Namespace = pod.Namespace
+ monEngineInfo.MeepApp = pod.Labels["meepApp"]
+ monEngineInfo.MeepScenario = pod.Labels["meepScenario"]
+ if monEngineInfo.Release, ok = pod.Labels["release"]; !ok {
+ monEngineInfo.Release = notFoundStr
+ }
+ if monEngineInfo.MeepApp, ok = pod.Labels["meepApp"]; !ok {
+ monEngineInfo.MeepApp = notFoundStr
+ }
+ if monEngineInfo.MeepOrigin, ok = pod.Labels["meepOrigin"]; !ok {
+ monEngineInfo.MeepOrigin = notFoundStr
+ }
+ if monEngineInfo.MeepScenario, ok = pod.Labels["meepScenario"]; !ok {
+ monEngineInfo.MeepScenario = notFoundStr
+ }
+ monEngineInfo.LogicalState = monEngineInfo.Phase
+ monEngineInfo.PodType = getPodType(monEngineInfo.MeepOrigin, monEngineInfo.Release)
+
+ //Phase is Running but might not really be because of some other attributes
+ //start of override section of the LogicalState by specific conditions
+
+ if pod.GetObjectMeta().GetDeletionTimestamp() != nil {
+ monEngineInfo.LogicalState = "Terminating"
+ } else if monEngineInfo.PodReady != "True" {
+ monEngineInfo.LogicalState = "Pending"
+ } else if monEngineInfo.NbOkContainers < monEngineInfo.NbTotalContainers {
+ monEngineInfo.LogicalState = "Failed"
+ }
+ //end of override section
+
+ printfMonEngineInfo(monEngineInfo, reason)
+
+ // Add, update or remove entry in DB only if core or scenario pod
+ if monEngineInfo.PodType != notFoundStr {
+ if reason == EVENT_POD_DELETED {
+ deleteEntryInDB(monEngineInfo)
+ } else {
+ addOrUpdateEntryInDB(monEngineInfo)
+ }
+ } else {
+ log.Debug("Ignoring non-AdvantEDGE pod: ", monEngineInfo.PodName)
+ }
+}
+
+func addOrUpdateEntryInDB(monEngineInfo MonEngineInfo) {
+ // Populate rule fields
+ fields := make(map[string]interface{})
+ fields["type"] = monEngineInfo.PodType
+ fields["name"] = monEngineInfo.PodName
+ fields["namespace"] = monEngineInfo.Namespace
+ fields["meepApp"] = monEngineInfo.MeepApp
+ fields["meepOrigin"] = monEngineInfo.MeepOrigin
+ fields["meepScenario"] = monEngineInfo.MeepScenario
+ fields["release"] = monEngineInfo.Release
+ fields["phase"] = monEngineInfo.Phase
+ fields["initialised"] = monEngineInfo.PodInitialized
+ fields["scheduled"] = monEngineInfo.PodScheduled
+ fields["ready"] = monEngineInfo.PodReady
+ fields["unschedulable"] = monEngineInfo.PodUnschedulable
+ fields["condition-error"] = monEngineInfo.PodConditionError
+ fields["nbOkContainers"] = monEngineInfo.NbOkContainers
+ fields["nbTotalContainers"] = monEngineInfo.NbTotalContainers
+ fields["nbPodRestart"] = monEngineInfo.NbPodRestart
+ fields["logicalState"] = monEngineInfo.LogicalState
+ fields["startTime"] = monEngineInfo.StartTime
+
+ // Make unique key
+ key := baseKey + monEngineInfo.Namespace + ":" + monEngineInfo.PodType + ":" + monEngineInfo.PodName
+
+ // Set rule information in DB
+ err := rc.SetEntry(key, fields)
+ if err != nil {
+ log.Error("Entry could not be updated in DB for ", monEngineInfo.MeepApp, ": ", err)
+ }
+}
+
+func deleteEntryInDB(monEngineInfo MonEngineInfo) {
+
+ // Make unique key
+ key := baseKey + monEngineInfo.Namespace + ":" + monEngineInfo.PodType + ":" + monEngineInfo.PodName
+
+ // Set rule information in DB
+ err := rc.DelEntry(key)
+ if err != nil {
+ log.Error("Entry could not be deleted in DB for ", monEngineInfo.MeepApp, ": ", err)
+ }
+}
+
+func k8sConnect() (err error) {
+
+ // Connect to K8s API Server
+ clientset, err := connectToAPISvr()
+ if err != nil {
+ log.Error("Failed to connect with k8s API Server. Error: ", err)
+ return err
+ }
+
+ watchlist := cache.NewListWatchFromClient(clientset.CoreV1().RESTClient(), "pods", v1.NamespaceAll, fields.Everything())
+
+ // also take a look at NewSharedIndexInformer
+ _, controller := cache.NewInformer(
+ watchlist,
+ &v1.Pod{},
+ 0, //Duration is int64
+ cache.ResourceEventHandlerFuncs{
+ AddFunc: func(obj interface{}) {
+ processEvent(obj, EVENT_POD_ADDED)
+ },
+ DeleteFunc: func(obj interface{}) {
+ processEvent(obj, EVENT_POD_DELETED)
+ },
+ UpdateFunc: func(oldObj, newObj interface{}) {
+ processEvent(newObj, EVENT_POD_MODIFIED)
+ },
+ },
+ )
+
+ go controller.Run(stopChan)
+ return nil
+}
+
+// Retrieve POD states
+// GET /states
+func meGetStates(w http.ResponseWriter, r *http.Request) {
+ var err error
+ var data UserData
+
+ // Retrieve query parameters
+ query := r.URL.Query()
+ queryType := query.Get("type")
+ querySandbox := query.Get("sandbox")
+ queryLong := query.Get("long")
+
+ // Get expected pods list
+ data.ExpectedPods = make(map[string]*PodStatus)
+ if queryType != "scenario" {
+ if querySandbox == "" || querySandbox == "all" {
+ for k, v := range expectedCorePods {
+ data.ExpectedPods[k] = v
+ }
+ for k, v := range expectedDepPods {
+ data.ExpectedPods[k] = v
+ }
+ }
+ if querySandbox != "" || querySandbox == "all" {
+ for k, v := range expectedSboxPods {
+ if v.Sandbox == querySandbox || querySandbox == "all" {
+ data.ExpectedPods[k] = v
+ }
+ }
+ }
+ }
+
+ // Create DB key using query filters
+ sandboxKey := ""
+ if querySandbox == "" {
+ sandboxKey = "default:"
+ } else if querySandbox == "all" {
+ sandboxKey = "*:"
+ } else {
+ sandboxKey = querySandbox + ":"
+ }
+
+ typeKey := ""
+ if queryType != "" {
+ typeKey = queryType + ":"
+ } else {
+ typeKey = "*"
+ }
+
+ keyName := baseKey + sandboxKey + typeKey + "*"
+
+ // Retrieve pod status information from DB
+ if queryLong == "true" {
+ err = rc.ForEachEntry(keyName, getPodDetails, &data)
+ } else {
+ err = rc.ForEachEntry(keyName, getPodStatesOnly, &data)
+ }
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ // Add missing pods status
+ for _, podStatus := range data.ExpectedPods {
+ data.AllPodsStatus.PodStatus = append(data.AllPodsStatus.PodStatus, *podStatus)
+ }
+
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+
+ // Format response
+ jsonResponse, err := json.Marshal(data.AllPodsStatus)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ // Send response
+ w.WriteHeader(http.StatusOK)
+ fmt.Fprint(w, string(jsonResponse))
+}
+
+func getPodDetails(key string, fields map[string]string, userData interface{}) error {
+ data := userData.(*UserData)
+
+ // Append pod status
+ var podStatus PodStatus
+ podStatus.PodType = fields["type"]
+ podStatus.Sandbox = fields["namespace"]
+ podStatus.Name = getPodName(fields["meepApp"], fields["name"])
+ podStatus.Namespace = fields["namespace"]
+ podStatus.MeepApp = fields["meepApp"]
+ podStatus.MeepOrigin = fields["meepOrigin"]
+ podStatus.MeepScenario = fields["meepScenario"]
+ podStatus.Phase = fields["phase"]
+ podStatus.PodInitialized = fields["initialised"]
+ podStatus.PodScheduled = fields["scheduled"]
+ podStatus.PodReady = fields["ready"]
+ podStatus.PodUnschedulable = fields["unschedulable"]
+ podStatus.PodConditionError = fields["condition-error"]
+ podStatus.NbOkContainers = fields["nbOkContainers"]
+ podStatus.NbTotalContainers = fields["nbTotalContainers"]
+ podStatus.NbPodRestart = fields["nbPodRestart"]
+ podStatus.LogicalState = fields["logicalState"]
+ podStatus.StartTime = fields["startTime"]
+ data.AllPodsStatus.PodStatus = append(data.AllPodsStatus.PodStatus, podStatus)
+
+ // Remove from expected pods
+ delete(data.ExpectedPods, fields["release"])
+
+ return nil
+}
+
+func getPodStatesOnly(key string, fields map[string]string, userData interface{}) error {
+ data := userData.(*UserData)
+
+ // Append pod status
+ var podStatus PodStatus
+ podStatus.PodType = fields["type"]
+ podStatus.Sandbox = fields["namespace"]
+ podStatus.Name = getPodName(fields["meepApp"], fields["name"])
+ podStatus.LogicalState = fields["logicalState"]
+ data.AllPodsStatus.PodStatus = append(data.AllPodsStatus.PodStatus, podStatus)
+
+ // Remove from expected pods
+ delete(data.ExpectedPods, fields["release"])
+
+ return nil
+}
+
+func getPodType(origin string, release string) string {
+ podType := notFoundStr
+ if origin == "core" || origin == "scenario" {
+ podType = origin
+ } else if release != notFoundStr {
+ if _, ok := expectedDepPods[release]; ok {
+ podType = "core"
+ } else if _, ok := expectedCorePods[release]; ok {
+ podType = "core"
+ }
+ }
+ return podType
+}
+
+func getPodName(app string, name string) string {
+ var podName string
+ if app != notFoundStr {
+ podName = app
+ } else {
+ podName = name
+ }
+ return podName
+}
+
+func addExpectedPods(sandboxName string) {
+ for _, pod := range sboxPodsList {
+ // Get sandbox-specific pod name
+ var podName string
+ prefix := "meep-"
+ sandboxPrefix := prefix + sandboxName + "-"
+ if strings.HasPrefix(pod, prefix) {
+ podName = sandboxPrefix + pod[len(prefix):]
+ } else {
+ podName = sandboxPrefix + pod
+ }
+
+ // Add to expected sandbox pods list
+ podStatus := new(PodStatus)
+ podStatus.PodType = "core"
+ podStatus.Sandbox = sandboxName
+ podStatus.Name = podName
+ podStatus.LogicalState = "NotAvailable"
+ expectedSboxPods[podName] = podStatus
+ }
+}
+
+func removeExpectedPods(sandboxName string) {
+ for _, pod := range sboxPodsList {
+ // Get sandbox-specific pod name
+ var podName string
+ prefix := "meep-"
+ sandboxPrefix := prefix + sandboxName + "-"
+ if strings.HasPrefix(pod, prefix) {
+ podName = sandboxPrefix + pod[len(prefix):]
+ } else {
+ podName = sandboxPrefix + pod
+ }
+
+ // Delete from expected list
+ delete(expectedSboxPods, podName)
+ }
+}
diff --git a/go-apps/meep-mon-engine/server/routers.go b/go-apps/meep-mon-engine/server/routers.go
new file mode 100644
index 0000000000000000000000000000000000000000..0cea20e0208d35083320ee13f005d564a7b6e4b0
--- /dev/null
+++ b/go-apps/meep-mon-engine/server/routers.go
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Monitoring Engine REST API
+ *
+ * This API provides AdvantEDGE microservice & scenario deployment status information collected in the Monitoring Engine.
**Micro-service**
[meep-mon-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mon-engine)
**Type & Usage**
Platform interface to retrieve AdvantEDGE microservice & scenario deployment status information
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+import (
+ "fmt"
+ "net/http"
+ "strings"
+
+ "github.com/gorilla/mux"
+)
+
+type Route struct {
+ Name string
+ Method string
+ Pattern string
+ HandlerFunc http.HandlerFunc
+}
+
+type Routes []Route
+
+func NewRouter() *mux.Router {
+ router := mux.NewRouter().StrictSlash(true)
+ for _, route := range routes {
+ var handler http.Handler = route.HandlerFunc
+ handler = Logger(handler, route.Name)
+
+ router.
+ Methods(route.Method).
+ Path(route.Pattern).
+ Name(route.Name).
+ Handler(handler)
+ }
+
+ return router
+}
+
+func Index(w http.ResponseWriter, r *http.Request) {
+ fmt.Fprintf(w, "Hello World!")
+}
+
+var routes = Routes{
+ Route{
+ "Index",
+ "GET",
+ "/mon-engine/v1/",
+ Index,
+ },
+
+ Route{
+ "GetStates",
+ strings.ToUpper("Get"),
+ "/mon-engine/v1/states",
+ GetStates,
+ },
+}
diff --git a/js-packages/meep-metrics-engine-client/.swagger-codegen-ignore b/go-apps/meep-platform-ctrl/.swagger-codegen-ignore
similarity index 100%
rename from js-packages/meep-metrics-engine-client/.swagger-codegen-ignore
rename to go-apps/meep-platform-ctrl/.swagger-codegen-ignore
diff --git a/js-packages/meep-metrics-engine-client/.swagger-codegen/VERSION b/go-apps/meep-platform-ctrl/.swagger-codegen/VERSION
similarity index 100%
rename from js-packages/meep-metrics-engine-client/.swagger-codegen/VERSION
rename to go-apps/meep-platform-ctrl/.swagger-codegen/VERSION
diff --git a/go-apps/meep-ctrl-engine/Dockerfile b/go-apps/meep-platform-ctrl/Dockerfile
similarity index 82%
rename from go-apps/meep-ctrl-engine/Dockerfile
rename to go-apps/meep-platform-ctrl/Dockerfile
index e004ef687f22f982bd46c34c7c6cb4a00b31e204..afa16c1a6899cb10dd629281b31cc2e73ec05ed8 100644
--- a/go-apps/meep-ctrl-engine/Dockerfile
+++ b/go-apps/meep-platform-ctrl/Dockerfile
@@ -13,7 +13,7 @@
# limitations under the License.
FROM debian:9.6-slim
-COPY ./meep-ctrl-engine /meep-ctrl-engine
-COPY ./static /static
-COPY ./api /static/api
-ENTRYPOINT ["/meep-ctrl-engine"]
+COPY ./meep-platform-ctrl /meep-platform-ctrl
+COPY ./frontend /frontend
+COPY ./swagger /swagger
+ENTRYPOINT ["/meep-platform-ctrl"]
diff --git a/go-apps/meep-platform-ctrl/api/swagger.yaml b/go-apps/meep-platform-ctrl/api/swagger.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..b084fb0fb40cdc957a287cc25f9265eeb6ccd5dd
--- /dev/null
+++ b/go-apps/meep-platform-ctrl/api/swagger.yaml
@@ -0,0 +1,961 @@
+---
+swagger: "2.0"
+info:
+ description: "This API is the main Platform Controller API for scenario configuration\
+ \ & sandbox management
**Micro-service**
[meep-pfm-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-platform-ctrl)\
+ \
**Type & Usage**
Platform main interface used by controller software to\
+ \ configure scenarios and manage sandboxes in the AdvantEDGE platform
**Details**
API\
+ \ details available at _your-AdvantEDGE-ip-address/api_"
+ version: "1.0.0"
+ title: "AdvantEDGE Platform Controller REST API"
+ contact:
+ name: "InterDigital AdvantEDGE Support"
+ email: "AdvantEDGE@InterDigital.com"
+ license:
+ name: "Apache 2.0"
+ url: "https://github.com/InterDigitalInc/AdvantEDGE/blob/master/LICENSE"
+basePath: "/platform-ctrl/v1"
+tags:
+- name: "Scenario Configuration"
+- name: "Sandbox Control"
+consumes:
+- "application/json"
+produces:
+- "application/json"
+paths:
+ /scenarios:
+ get:
+ tags:
+ - "Scenario Configuration"
+ summary: "Get all scenarios"
+ description: "Returns all scenarios from the platform scenario store"
+ operationId: "getScenarioList"
+ produces:
+ - "application/json"
+ parameters: []
+ responses:
+ 200:
+ description: "OK"
+ schema:
+ $ref: "#/definitions/ScenarioList"
+ 404:
+ description: "Not found"
+ delete:
+ tags:
+ - "Scenario Configuration"
+ summary: "Delete all scenarios"
+ description: "Delete all scenarios present in the platform scenario store"
+ operationId: "deleteScenarioList"
+ produces:
+ - "application/json"
+ parameters: []
+ responses:
+ 200:
+ description: "OK"
+ 404:
+ description: "Not found"
+ /scenarios/{name}:
+ get:
+ tags:
+ - "Scenario Configuration"
+ summary: "Get a specific scenario"
+ description: "Get a scenario by name from the platform scenario store"
+ operationId: "getScenario"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "name"
+ in: "path"
+ description: "Scenario name"
+ required: true
+ type: "string"
+ x-exportParamName: "Name"
+ responses:
+ 200:
+ description: "OK"
+ schema:
+ $ref: "#/definitions/Scenario"
+ 400:
+ description: "Bad request"
+ 404:
+ description: "Not found"
+ post:
+ tags:
+ - "Scenario Configuration"
+ summary: "Add a scenario"
+ description: "Add a scenario to the platform scenario store"
+ operationId: "createScenario"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "name"
+ in: "path"
+ description: "Scenario name"
+ required: true
+ type: "string"
+ x-exportParamName: "Name"
+ - in: "body"
+ name: "scenario"
+ description: "Scenario"
+ required: true
+ schema:
+ $ref: "#/definitions/Scenario"
+ x-exportParamName: "Scenario"
+ responses:
+ 200:
+ description: "OK"
+ 400:
+ description: "Bad request"
+ 404:
+ description: "Not found"
+ put:
+ tags:
+ - "Scenario Configuration"
+ summary: "Update a scenario"
+ description: "Update a scenario by name in the platform scenario store"
+ operationId: "setScenario"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "name"
+ in: "path"
+ description: "Scenario name"
+ required: true
+ type: "string"
+ x-exportParamName: "Name"
+ - in: "body"
+ name: "scenario"
+ description: "Scenario to add to MEEP store"
+ required: true
+ schema:
+ $ref: "#/definitions/Scenario"
+ x-exportParamName: "Scenario"
+ responses:
+ 200:
+ description: "OK"
+ 400:
+ description: "Bad request"
+ 404:
+ description: "Not found"
+ delete:
+ tags:
+ - "Scenario Configuration"
+ summary: "Delete a scenario"
+ description: "Delete a scenario by name from the platform scenario store"
+ operationId: "deleteScenario"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "name"
+ in: "path"
+ description: "Scenario name"
+ required: true
+ type: "string"
+ x-exportParamName: "Name"
+ responses:
+ 200:
+ description: "OK"
+ 400:
+ description: "Bad request"
+ 404:
+ description: "Not found"
+ /sandboxes:
+ get:
+ tags:
+ - "Sandbox Control"
+ summary: "Get all active sandboxes"
+ description: "Returns a list of all active sandboxes"
+ operationId: "getSandboxList"
+ produces:
+ - "application/json"
+ parameters: []
+ responses:
+ 200:
+ description: "OK"
+ schema:
+ $ref: "#/definitions/SandboxList"
+ 404:
+ description: "Not found"
+ post:
+ tags:
+ - "Sandbox Control"
+ summary: "Create a new sandbox"
+ description: "Create a new sandbox with a server-generated name"
+ operationId: "createSandbox"
+ produces:
+ - "application/json"
+ parameters:
+ - in: "body"
+ name: "config"
+ description: "Sandbox configuration information"
+ required: true
+ schema:
+ $ref: "#/definitions/SandboxConfig"
+ x-exportParamName: "Config"
+ responses:
+ 200:
+ description: "OK"
+ schema:
+ $ref: "#/definitions/Sandbox"
+ 400:
+ description: "Bad request"
+ 404:
+ description: "Not found"
+ delete:
+ tags:
+ - "Sandbox Control"
+ summary: "Delete all active sandboxes"
+ description: "Delete all active sandboxes"
+ operationId: "deleteSandboxList"
+ produces:
+ - "application/json"
+ parameters: []
+ responses:
+ 200:
+ description: "OK"
+ 404:
+ description: "Not found"
+ /sandboxes/{name}:
+ get:
+ tags:
+ - "Sandbox Control"
+ summary: "Get a specific sandbox"
+ description: "Get sandbox information for provided sandbox name"
+ operationId: "getSandbox"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "name"
+ in: "path"
+ description: "Sandbox name"
+ required: true
+ type: "string"
+ x-exportParamName: "Name"
+ responses:
+ 200:
+ description: "OK"
+ schema:
+ $ref: "#/definitions/Sandbox"
+ 400:
+ description: "Bad request"
+ 404:
+ description: "Not found"
+ post:
+ tags:
+ - "Sandbox Control"
+ summary: "Create a new sandbox"
+ description: "Create a new sandbox using provided name"
+ operationId: "createSandboxWithName"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "name"
+ in: "path"
+ description: "Sandbox name"
+ required: true
+ type: "string"
+ x-exportParamName: "Name"
+ - in: "body"
+ name: "config"
+ description: "Sandbox configuration information"
+ required: true
+ schema:
+ $ref: "#/definitions/SandboxConfig"
+ x-exportParamName: "Config"
+ responses:
+ 200:
+ description: "OK"
+ 400:
+ description: "Bad request"
+ 404:
+ description: "Already exists"
+ delete:
+ tags:
+ - "Sandbox Control"
+ summary: "Delete a specific sandbox"
+ description: "Delete the sandbox with the provided name"
+ operationId: "deleteSandbox"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "name"
+ in: "path"
+ description: "Sandbox name"
+ required: true
+ type: "string"
+ x-exportParamName: "Name"
+ responses:
+ 200:
+ description: "OK"
+ 400:
+ description: "Bad request"
+ 404:
+ description: "Not found"
+definitions:
+ ScenarioList:
+ type: "object"
+ properties:
+ scenarios:
+ type: "array"
+ items:
+ $ref: "#/definitions/Scenario"
+ description: "Scenario list"
+ example: {}
+ Scenario:
+ type: "object"
+ properties:
+ version:
+ type: "string"
+ description: "Scenario version"
+ id:
+ type: "string"
+ description: "Unique scenario ID"
+ name:
+ type: "string"
+ description: "Unique scenario name"
+ description:
+ type: "string"
+ description: "User description of the scenario."
+ config:
+ $ref: "#/definitions/ScenarioConfig"
+ deployment:
+ $ref: "#/definitions/Deployment"
+ description: "Scenario object"
+ example: {}
+ ScenarioConfig:
+ type: "object"
+ properties:
+ visualization:
+ type: "string"
+ description: "Visualization configuration"
+ other:
+ type: "string"
+ description: "Other scenario configuration"
+ description: "Scenario configuration"
+ example:
+ visualization: "visualization"
+ other: "other"
+ Deployment:
+ type: "object"
+ properties:
+ netChar:
+ $ref: "#/definitions/NetworkCharacteristics"
+ interDomainLatency:
+ type: "integer"
+ description: "**DEPRECATED** As of release 1.5.0, replaced by netChar latency"
+ interDomainLatencyVariation:
+ type: "integer"
+ description: "**DEPRECATED** As of release 1.5.0, replaced by netChar latencyVariation"
+ interDomainThroughput:
+ type: "integer"
+ description: "**DEPRECATED** As of release 1.5.0, replaced by netChar throughputUl\
+ \ and throughputDl"
+ interDomainPacketLoss:
+ type: "number"
+ format: "double"
+ description: "**DEPRECATED** As of release 1.5.0, replaced by netChar packetLoss"
+ meta:
+ type: "object"
+ description: "Key/Value Pair Map (string, string)"
+ additionalProperties:
+ type: "string"
+ userMeta:
+ type: "object"
+ description: "Key/Value Pair Map (string, string)"
+ additionalProperties:
+ type: "string"
+ domains:
+ type: "array"
+ items:
+ $ref: "#/definitions/Domain"
+ description: "Network deployment object"
+ example: {}
+ NetworkCharacteristics:
+ type: "object"
+ properties:
+ latency:
+ type: "integer"
+ description: "Latency in ms"
+ latencyVariation:
+ type: "integer"
+ description: "Latency variation in ms"
+ latencyDistribution:
+ type: "string"
+ description: "Latency distribution. Can only be set in the Scenario Deployment\
+ \ network characteristics, ignored otherwise. Latency distribution is set\
+ \ for the whole network and applied to every end-to-end traffic flows. Default\
+ \ value is 'Normal' distribution."
+ enum:
+ - "Normal"
+ - "Pareto"
+ - "Paretonormal"
+ - "Uniform"
+ throughput:
+ type: "integer"
+ description: "**DEPRECATED** As of release 1.5.0, replaced by throughputUl\
+ \ and throughputDl"
+ throughputDl:
+ type: "integer"
+ description: "Downlink throughput limit in Mbps"
+ throughputUl:
+ type: "integer"
+ description: "Uplink throughput limit in Mbps"
+ packetLoss:
+ type: "number"
+ format: "double"
+ description: "Packet loss percentage"
+ description: "Network characteristics object"
+ example: {}
+ Domain:
+ type: "object"
+ properties:
+ id:
+ type: "string"
+ description: "Unique domain ID"
+ name:
+ type: "string"
+ description: "Domain name"
+ type:
+ type: "string"
+ description: "Domain type"
+ enum:
+ - "OPERATOR"
+ - "OPERATOR-CELLULAR"
+ - "PUBLIC"
+ netChar:
+ $ref: "#/definitions/NetworkCharacteristics"
+ interZoneLatency:
+ type: "integer"
+ description: "**DEPRECATED** As of release 1.5.0, replaced by netChar latency"
+ interZoneLatencyVariation:
+ type: "integer"
+ description: "**DEPRECATED** As of release 1.5.0, replaced by netChar latencyVariation"
+ interZoneThroughput:
+ type: "integer"
+ description: "**DEPRECATED** As of release 1.5.0, replaced by netChar throughputUl\
+ \ and throughputDl"
+ interZonePacketLoss:
+ type: "number"
+ format: "double"
+ description: "**DEPRECATED** As of release 1.5.0, replaced by netChar packetLoss"
+ meta:
+ type: "object"
+ description: "Key/Value Pair Map (string, string)"
+ additionalProperties:
+ type: "string"
+ userMeta:
+ type: "object"
+ description: "Key/Value Pair Map (string, string)"
+ additionalProperties:
+ type: "string"
+ cellularDomainConfig:
+ $ref: "#/definitions/CellularDomainConfig"
+ zones:
+ type: "array"
+ items:
+ $ref: "#/definitions/Zone"
+ description: "Operator domain object"
+ example: {}
+ CellularDomainConfig:
+ type: "object"
+ properties:
+ mnc:
+ type: "string"
+ description: "Mobile Network Code part of PLMN identity as defined in ETSI\
+ \ TS 136 413"
+ mcc:
+ type: "string"
+ description: "Mobile Country Code part of PLMN identity as defined in ETSI\
+ \ TS 136 413"
+ defaultCellId:
+ type: "string"
+ description: "The E-UTRAN Cell Identity as defined in ETSI TS 136 413 if no\
+ \ cellId is defined for the cell or if not applicable"
+ description: "Cellular domain configuration information"
+ example: {}
+ Zone:
+ type: "object"
+ properties:
+ id:
+ type: "string"
+ description: "Unique zone ID"
+ name:
+ type: "string"
+ description: "Zone name"
+ type:
+ type: "string"
+ description: "Zone type"
+ enum:
+ - "ZONE"
+ - "COMMON"
+ netChar:
+ $ref: "#/definitions/NetworkCharacteristics"
+ interFogLatency:
+ type: "integer"
+ description: "**DEPRECATED** As of release 1.3.0, no longer supported"
+ interFogLatencyVariation:
+ type: "integer"
+ description: "**DEPRECATED** As of release 1.3.0, no longer supported"
+ interFogThroughput:
+ type: "integer"
+ description: "**DEPRECATED** As of release 1.3.0, no longer supported"
+ interFogPacketLoss:
+ type: "number"
+ format: "double"
+ description: "**DEPRECATED** As of release 1.3.0, no longer supported"
+ interEdgeLatency:
+ type: "integer"
+ description: "**DEPRECATED** As of release 1.3.0, no longer supported"
+ interEdgeLatencyVariation:
+ type: "integer"
+ description: "**DEPRECATED** As of release 1.3.0, no longer supported"
+ interEdgeThroughput:
+ type: "integer"
+ description: "**DEPRECATED** As of release 1.3.0, no longer supported"
+ interEdgePacketLoss:
+ type: "number"
+ format: "double"
+ description: "**DEPRECATED** As of release 1.3.0, no longer supported"
+ edgeFogLatency:
+ type: "integer"
+ description: "**DEPRECATED** As of release 1.3.0, replaced by netChar latency"
+ edgeFogLatencyVariation:
+ type: "integer"
+ description: "**DEPRECATED** As of release 1.3.0, replaced by netChar latencyVariation"
+ edgeFogThroughput:
+ type: "integer"
+ description: "**DEPRECATED** As of release 1.3.0, replaced by netChar throughput"
+ edgeFogPacketLoss:
+ type: "number"
+ format: "double"
+ description: "**DEPRECATED** As of release 1.3.0, replaced by netChar packetLoss"
+ meta:
+ type: "object"
+ description: "Key/Value Pair Map (string, string)"
+ additionalProperties:
+ type: "string"
+ userMeta:
+ type: "object"
+ description: "Key/Value Pair Map (string, string)"
+ additionalProperties:
+ type: "string"
+ networkLocations:
+ type: "array"
+ items:
+ $ref: "#/definitions/NetworkLocation"
+ description: "Logical zone (MEC network) object"
+ example: {}
+ NetworkLocation:
+ type: "object"
+ properties:
+ id:
+ type: "string"
+ description: "Unique network location ID"
+ name:
+ type: "string"
+ description: "Network location name"
+ type:
+ type: "string"
+ description: "Network location type"
+ enum:
+ - "POA"
+ - "POA-CELLULAR"
+ - "DEFAULT"
+ netChar:
+ $ref: "#/definitions/NetworkCharacteristics"
+ terminalLinkLatency:
+ type: "integer"
+ description: "**DEPRECATED** As of release 1.5.0, replaced by netChar latency"
+ terminalLinkLatencyVariation:
+ type: "integer"
+ description: "**DEPRECATED** As of release 1.5.0, replaced by netChar latencyVariation"
+ terminalLinkThroughput:
+ type: "integer"
+ description: "**DEPRECATED** As of release 1.5.0, replaced by netChar throughputUl\
+ \ and throughputDl"
+ terminalLinkPacketLoss:
+ type: "number"
+ format: "double"
+ description: "**DEPRECATED** As of release 1.5.0, replaced by netChar packetLoss"
+ meta:
+ type: "object"
+ description: "Key/Value Pair Map (string, string)"
+ additionalProperties:
+ type: "string"
+ userMeta:
+ type: "object"
+ description: "Key/Value Pair Map (string, string)"
+ additionalProperties:
+ type: "string"
+ cellularPoaConfig:
+ $ref: "#/definitions/CellularPoaConfig"
+ geoData:
+ $ref: "#/definitions/GeoData"
+ physicalLocations:
+ type: "array"
+ items:
+ $ref: "#/definitions/PhysicalLocation"
+ description: "Logical network location object"
+ example: {}
+ CellularPoaConfig:
+ type: "object"
+ properties:
+ cellId:
+ type: "string"
+ description: "The E-UTRAN Cell Identity as defined in ETSI TS 136 413 including\
+ \ the ID of the eNB serving the cell"
+ description: "Cellular POA configuration information"
+ GeoData:
+ type: "object"
+ properties:
+ location:
+ $ref: "#/definitions/Point"
+ radius:
+ type: "number"
+ description: "Optional - Radius (in meters) around the location"
+ path:
+ $ref: "#/definitions/LineString"
+ eopMode:
+ type: "string"
+ description: "End-of-Path mode:
**Micro-service**
[meep-pfm-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-platform-ctrl)
**Type & Usage**
Platform main interface used by controller software to configure scenarios and manage sandboxes in the AdvantEDGE platform
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+
+## Overview
+This server was generated by the [swagger-codegen]
+(https://github.com/swagger-api/swagger-codegen) project.
+By using the [OpenAPI-Spec](https://github.com/OAI/OpenAPI-Specification) from a remote server, you can easily generate a server stub.
+-
+
+To see how to make this your own, look here:
+
+[README](https://github.com/swagger-api/swagger-codegen/blob/master/README.md)
+
+- API version: 1.0.0
+- Build date: 2020-06-28T22:53:09.919-04:00
+
+
+### Running the server
+To run the server, follow these simple steps:
+
+```
+go run main.go
+```
+
diff --git a/go-apps/meep-platform-ctrl/server/api_sandbox_control.go b/go-apps/meep-platform-ctrl/server/api_sandbox_control.go
new file mode 100644
index 0000000000000000000000000000000000000000..6b6babd231fdf9712cd4535b0266a3e3442151d1
--- /dev/null
+++ b/go-apps/meep-platform-ctrl/server/api_sandbox_control.go
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Platform Controller REST API
+ *
+ * This API is the main Platform Controller API for scenario configuration & sandbox management
**Micro-service**
[meep-pfm-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-platform-ctrl)
**Type & Usage**
Platform main interface used by controller software to configure scenarios and manage sandboxes in the AdvantEDGE platform
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+import (
+ "net/http"
+)
+
+func CreateSandbox(w http.ResponseWriter, r *http.Request) {
+ pcCreateSandbox(w, r)
+}
+
+func CreateSandboxWithName(w http.ResponseWriter, r *http.Request) {
+ pcCreateSandboxWithName(w, r)
+}
+
+func DeleteSandbox(w http.ResponseWriter, r *http.Request) {
+ pcDeleteSandbox(w, r)
+}
+
+func DeleteSandboxList(w http.ResponseWriter, r *http.Request) {
+ pcDeleteSandboxList(w, r)
+}
+
+func GetSandbox(w http.ResponseWriter, r *http.Request) {
+ pcGetSandbox(w, r)
+}
+
+func GetSandboxList(w http.ResponseWriter, r *http.Request) {
+ pcGetSandboxList(w, r)
+}
diff --git a/go-apps/meep-ctrl-engine/server/api_scenario_configuration.go b/go-apps/meep-platform-ctrl/server/api_scenario_configuration.go
similarity index 69%
rename from go-apps/meep-ctrl-engine/server/api_scenario_configuration.go
rename to go-apps/meep-platform-ctrl/server/api_scenario_configuration.go
index c44ae0f155a3ac3c991366d1ed737948e205c9f6..6876db52ca5ba4a45224a992ed3fcdfaa9bfb35e 100644
--- a/go-apps/meep-ctrl-engine/server/api_scenario_configuration.go
+++ b/go-apps/meep-platform-ctrl/server/api_scenario_configuration.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Platform Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
**Micro-service**
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
**Type & Usage**
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
**Details**
API details available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30000`
+ * This API is the main Platform Controller API for scenario configuration & sandbox management
**Micro-service**
[meep-pfm-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-platform-ctrl)
**Type & Usage**
Platform main interface used by controller software to configure scenarios and manage sandboxes in the AdvantEDGE platform
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -30,30 +30,30 @@ import (
// CreateScenario - Add new scenario to MEEP store
func CreateScenario(w http.ResponseWriter, r *http.Request) {
- ceCreateScenario(w, r)
+ pcCreateScenario(w, r)
}
// DeleteScenario - Delete scenario from MEEP store
func DeleteScenario(w http.ResponseWriter, r *http.Request) {
- ceDeleteScenario(w, r)
+ pcDeleteScenario(w, r)
}
// DeleteScenarioList - Delete all scenarios in MEEP store
func DeleteScenarioList(w http.ResponseWriter, r *http.Request) {
- ceDeleteScenarioList(w, r)
+ pcDeleteScenarioList(w, r)
}
// GetScenario - Retrieve scenario from MEEP store
func GetScenario(w http.ResponseWriter, r *http.Request) {
- ceGetScenario(w, r)
+ pcGetScenario(w, r)
}
// GetScenarioList - Retrieve list of scenarios in MEEP store
func GetScenarioList(w http.ResponseWriter, r *http.Request) {
- ceGetScenarioList(w, r)
+ pcGetScenarioList(w, r)
}
// SetScenario - Update scenario in MEEP store
func SetScenario(w http.ResponseWriter, r *http.Request) {
- ceSetScenario(w, r)
+ pcSetScenario(w, r)
}
diff --git a/go-apps/meep-platform-ctrl/server/logger.go b/go-apps/meep-platform-ctrl/server/logger.go
new file mode 100644
index 0000000000000000000000000000000000000000..81cd5e49274dc762c5f690241fd65aa509f57578
--- /dev/null
+++ b/go-apps/meep-platform-ctrl/server/logger.go
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Platform Controller REST API
+ *
+ * This API is the main Platform Controller API for scenario configuration & sandbox management
**Micro-service**
[meep-pfm-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-platform-ctrl)
**Type & Usage**
Platform main interface used by controller software to configure scenarios and manage sandboxes in the AdvantEDGE platform
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+import (
+ "log"
+ "net/http"
+ "time"
+)
+
+func Logger(inner http.Handler, name string) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ start := time.Now()
+
+ inner.ServeHTTP(w, r)
+
+ log.Printf(
+ "%s %s %s %s",
+ r.Method,
+ r.RequestURI,
+ name,
+ time.Since(start),
+ )
+ })
+}
diff --git a/go-apps/meep-platform-ctrl/server/platform-ctrl.go b/go-apps/meep-platform-ctrl/server/platform-ctrl.go
new file mode 100644
index 0000000000000000000000000000000000000000..c70052ff795834c07a4641f435f871f8df238b99
--- /dev/null
+++ b/go-apps/meep-platform-ctrl/server/platform-ctrl.go
@@ -0,0 +1,633 @@
+/*
+ * Copyright (c) 2019 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package server
+
+import (
+ "encoding/json"
+ "errors"
+ "fmt"
+ "io/ioutil"
+ "math/rand"
+ "net/http"
+ "time"
+
+ "github.com/gorilla/mux"
+
+ couch "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-couch"
+ dataModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model"
+ log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
+ mod "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model"
+ mq "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq"
+ ss "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-sandbox-store"
+ wd "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog"
+)
+
+type Scenario struct {
+ Name string `json:"name,omitempty"`
+}
+
+type PlatformCtrl struct {
+ scenarioStore *couch.Connector
+ sandboxStore *ss.SandboxStore
+ veWatchdog *wd.Watchdog
+ mqGlobal *mq.MsgQueue
+}
+
+const scenarioDBName = "scenarios"
+const moduleName = "meep-platform-ctrl"
+const moduleNamespace = "default"
+const moduleVirtEngineName = "meep-virt-engine"
+const moduleVirtEngineNamespace = "default"
+
+// MQ payload fields
+const fieldSandboxName = "sandbox-name"
+const fieldScenarioName = "scenario-name"
+
+// Declare as variables to enable overwrite in test
+var couchDBAddr = "http://meep-couchdb-svc-couchdb:5984/"
+var redisDBAddr = "meep-redis-master:6379"
+
+// Platform Controller
+var pfmCtrl *PlatformCtrl
+
+// Init Initializes the Platform Controller
+func Init() (err error) {
+ log.Debug("Init")
+
+ // Seed rand
+ rand.Seed(time.Now().UnixNano())
+
+ // Create new Platform Controller
+ pfmCtrl = new(PlatformCtrl)
+
+ // Create message queue
+ pfmCtrl.mqGlobal, err = mq.NewMsgQueue(mq.GetGlobalName(), moduleName, moduleNamespace, redisDBAddr)
+ if err != nil {
+ log.Error("Failed to create Message Queue with error: ", err)
+ return err
+ }
+ log.Info("Message Queue created")
+
+ // Connect to Scenario Store
+ pfmCtrl.scenarioStore, err = couch.NewConnector(couchDBAddr, scenarioDBName)
+ if err != nil {
+ log.Error("Failed connection to Scenario Store. Error: ", err)
+ return err
+ }
+ log.Info("Connected to Scenario Store")
+
+ // Retrieve scenario list from DB
+ _, scenarioList, err := pfmCtrl.scenarioStore.GetDocList()
+ 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 := pfmCtrl.scenarioStore.UpdateDoc(s.Name, validScenario)
+ if err != nil {
+ return errors.New("Failed to update scenario with error: " + err.Error())
+ }
+ log.Debug("Scenario updated with rev: ", rev)
+ }
+ }
+
+ // Connect to Sandbox Store
+ pfmCtrl.sandboxStore, err = ss.NewSandboxStore(redisDBAddr)
+ if err != nil {
+ log.Error("Failed connection to Sandbox Store: ", err.Error())
+ return err
+ }
+ log.Info("Connected to Sandbox Store")
+
+ // Setup for virt-engine monitoring
+ pfmCtrl.veWatchdog, err = wd.NewWatchdog(moduleName, moduleNamespace, moduleVirtEngineName, moduleVirtEngineNamespace, "")
+ if err != nil {
+ log.Error("Failed to initialize virt-engine wd. Error: ", err)
+ return err
+ }
+
+ return nil
+}
+
+// Run Starts the Platform Controller
+func Run() (err error) {
+
+ // Start Virt Engine wd
+ err = pfmCtrl.veWatchdog.Start(time.Second, 3*time.Second)
+ if err != nil {
+ log.Error("Failed to start virt-engine wd. Error: ", err)
+ return err
+ }
+
+ return nil
+}
+
+// Create a new scenario in the scenario store
+// POST /scenario/{name}
+func pcCreateScenario(w http.ResponseWriter, r *http.Request) {
+ log.Debug("pcCreateScenario")
+
+ // Get scenario name from request parameters
+ vars := mux.Vars(r)
+ scenarioName := vars["name"]
+ log.Debug("Scenario name: ", scenarioName)
+
+ // Retrieve scenario from request body
+ if r.Body == nil {
+ err := errors.New("Request body is missing")
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusBadRequest)
+ return
+ }
+ b, err := ioutil.ReadAll(r.Body)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusBadRequest)
+ 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
+ rev, err := pfmCtrl.scenarioStore.AddDoc(scenarioName, validScenario)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusConflict)
+ return
+ }
+ log.Debug("Scenario added with rev: ", rev)
+
+ // OK
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ w.WriteHeader(http.StatusOK)
+}
+
+// Delete scenario from scenario store
+// DELETE /scenarios/{name}
+func pcDeleteScenario(w http.ResponseWriter, r *http.Request) {
+ log.Debug("pcDeleteScenario")
+
+ // Get scenario name from request parameters
+ vars := mux.Vars(r)
+ scenarioName := vars["name"]
+ log.Debug("Scenario name: ", scenarioName)
+
+ // Remove scenario from DB
+ err := pfmCtrl.scenarioStore.DeleteDoc(scenarioName)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusNotFound)
+ return
+ }
+
+ // OK
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ w.WriteHeader(http.StatusOK)
+}
+
+// Remove all scenarios from sceanrio store
+// DELETE /scenarios
+func pcDeleteScenarioList(w http.ResponseWriter, r *http.Request) {
+ log.Debug("pcDeleteScenarioList")
+
+ // Remove all scenario from DB
+ err := pfmCtrl.scenarioStore.DeleteAllDocs()
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusNotFound)
+ return
+ }
+
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ w.WriteHeader(http.StatusOK)
+}
+
+// Retrieve scenario from scenario store
+// GET /scenarios/{name}
+func pcGetScenario(w http.ResponseWriter, r *http.Request) {
+ log.Debug("pcGetScenario")
+
+ // Get scenario name from request parameters
+ vars := mux.Vars(r)
+ scenarioName := vars["name"]
+ log.Debug("Scenario name: ", scenarioName)
+
+ // Validate scenario name
+ if scenarioName == "" {
+ log.Debug("Invalid scenario name")
+ http.Error(w, "Invalid scenario name "+scenarioName, http.StatusBadRequest)
+ return
+ }
+
+ // Retrieve scenario from DB
+ var scenario []byte
+ scenario, err := pfmCtrl.scenarioStore.GetDoc(false, scenarioName)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusNotFound)
+ return
+ }
+
+ s, err := mod.JSONMarshallScenario(scenario)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ // Send response
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ w.WriteHeader(http.StatusOK)
+ fmt.Fprint(w, s)
+}
+
+// Retrieve all scenarios from scenario store
+// GET /scenarios
+func pcGetScenarioList(w http.ResponseWriter, r *http.Request) {
+ log.Debug("pcGetScenarioList")
+
+ // Retrieve scenario list from DB
+ _, scenarioList, err := pfmCtrl.scenarioStore.GetDocList()
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusNotFound)
+ return
+ }
+
+ sl, err := mod.JSONMarshallScenarioList(scenarioList)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ w.WriteHeader(http.StatusOK)
+ fmt.Fprint(w, sl)
+}
+
+// Update scenario in scenario store
+// PUT /scenarios/{name}
+func pcSetScenario(w http.ResponseWriter, r *http.Request) {
+ log.Debug("pcSetScenario")
+
+ // Get scenario name from request parameters
+ vars := mux.Vars(r)
+ scenarioName := vars["name"]
+ log.Debug("Scenario name: ", scenarioName)
+
+ // Retrieve scenario from request body
+ if r.Body == nil {
+ err := errors.New("Request body is missing")
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusBadRequest)
+ return
+ }
+ b, err := ioutil.ReadAll(r.Body)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusBadRequest)
+ 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
+ rev, err := pfmCtrl.scenarioStore.UpdateDoc(scenarioName, validScenario)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusNotFound)
+ return
+ }
+ log.Debug("Scenario updated with rev: ", rev)
+
+ // OK
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ w.WriteHeader(http.StatusOK)
+}
+
+// Create new Sandbox
+// POST /sandboxes
+func pcCreateSandbox(w http.ResponseWriter, r *http.Request) {
+ log.Debug("pcCreateSandbox")
+
+ // Retrieve sandbox config from request body
+ var sandboxConfig dataModel.SandboxConfig
+ decoder := json.NewDecoder(r.Body)
+ err := decoder.Decode(&sandboxConfig)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusBadRequest)
+ return
+ }
+
+ // Get unique sandbox name
+ var sandboxName string
+ uniqueNameFound := false
+ retryCount := 3
+ for i := 0; i < retryCount; i++ {
+ // sandboxName = "sbox-" + xid.New().String()
+ sandboxName = "sbox-" + randSeq(6)
+ if sbox, _ := pfmCtrl.sandboxStore.Get(sandboxName); sbox == nil {
+ uniqueNameFound = true
+ break
+ }
+ }
+ if !uniqueNameFound {
+ err = errors.New("Failed to generate a unique sandbox name")
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ // Create sandbox in DB
+ err = createSandbox(sandboxName, &sandboxConfig)
+ if err != nil {
+ log.Error("Failed to create sandbox with error: ", err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ // Prepare response
+ var sandbox dataModel.Sandbox
+ sandbox.Name = sandboxName
+
+ // Format response
+ jsonResponse, err := json.Marshal(sandbox)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ // Send response
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ w.WriteHeader(http.StatusOK)
+ fmt.Fprint(w, string(jsonResponse))
+}
+
+// Create new Sandbox with provided name
+// POST /sandboxes/{name}
+func pcCreateSandboxWithName(w http.ResponseWriter, r *http.Request) {
+ log.Debug("pcCreateSandboxWithName")
+
+ // Get sandbox name from request parameters
+ vars := mux.Vars(r)
+ sandboxName := vars["name"]
+ log.Debug("Sandbox to create: ", sandboxName)
+
+ // Retrieve sandbox config from request body
+ var sandboxConfig dataModel.SandboxConfig
+ decoder := json.NewDecoder(r.Body)
+ err := decoder.Decode(&sandboxConfig)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusBadRequest)
+ return
+ }
+
+ // Make sure sandbox does not already exist
+ if sbox, _ := pfmCtrl.sandboxStore.Get(sandboxName); sbox != nil {
+ err = errors.New("Sandbox already exists")
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusConflict)
+ return
+ }
+
+ // Create sandbox in DB
+ err = createSandbox(sandboxName, &sandboxConfig)
+ if err != nil {
+ log.Error("Failed to create sandbox with error: ", err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ // Prepare response
+ var sandbox dataModel.Sandbox
+ sandbox.Name = sandboxName
+
+ // Format response
+ jsonResponse, err := json.Marshal(sandbox)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ // Send response
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ w.WriteHeader(http.StatusOK)
+ fmt.Fprint(w, string(jsonResponse))
+}
+
+// Delete Sandbox with provided name
+// DELETE /sandboxes/{name}
+func pcDeleteSandbox(w http.ResponseWriter, r *http.Request) {
+ log.Debug("pcDeleteSandbox")
+
+ // Get sandbox name from request parameters
+ vars := mux.Vars(r)
+ sandboxName := vars["name"]
+ log.Debug("Sandbox to delete: ", sandboxName)
+
+ // Make sure sandbox exists
+ if sbox, _ := pfmCtrl.sandboxStore.Get(sandboxName); sbox == nil {
+ err := errors.New("Sandbox not found")
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusNotFound)
+ return
+ }
+
+ // Delete sandbox
+ deleteSandbox(sandboxName)
+
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ w.WriteHeader(http.StatusOK)
+}
+
+// Delete all Sandboxes
+// DELETE /sandboxes
+func pcDeleteSandboxList(w http.ResponseWriter, r *http.Request) {
+ log.Debug("pcDeleteSandboxList")
+
+ // Get all sandboxes
+ sboxMap, err := pfmCtrl.sandboxStore.GetAll()
+ if err != nil || sboxMap == nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ // Delete all sandboxes
+ for _, sbox := range sboxMap {
+ deleteSandbox(sbox.Name)
+ }
+
+ // Flush sandbox store
+ pfmCtrl.sandboxStore.Flush()
+
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ w.WriteHeader(http.StatusOK)
+}
+
+// Retrieve Sandbox with provided name
+// GET /sandboxes/{name}
+func pcGetSandbox(w http.ResponseWriter, r *http.Request) {
+ log.Debug("pcGetSandbox")
+
+ // Get sandbox name from request parameters
+ vars := mux.Vars(r)
+ sandboxName := vars["name"]
+ log.Debug("Sandbox to retrieve: ", sandboxName)
+
+ // Get sandbox
+ sbox, _ := pfmCtrl.sandboxStore.Get(sandboxName)
+ if sbox == nil {
+ err := errors.New("Sandbox not found")
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusNotFound)
+ return
+ }
+
+ // Prepare response
+ var sandbox dataModel.Sandbox
+ sandbox.Name = sbox.Name
+
+ // Format response
+ jsonResponse, err := json.Marshal(sandbox)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ // Send response
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ w.WriteHeader(http.StatusOK)
+ fmt.Fprint(w, string(jsonResponse))
+}
+
+// Retrieve all Sandboxes
+// GET /sandboxes
+func pcGetSandboxList(w http.ResponseWriter, r *http.Request) {
+ log.Debug("pcGetSandboxList")
+
+ // Get all sandboxes
+ sboxMap, err := pfmCtrl.sandboxStore.GetAll()
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ // Update sandbox list
+ var sandboxList dataModel.SandboxList
+ for _, sbox := range sboxMap {
+ var sandbox dataModel.Sandbox
+ sandbox.Name = sbox.Name
+ sandboxList.Sandboxes = append(sandboxList.Sandboxes, sandbox)
+ }
+
+ // Format response
+ jsonResponse, err := json.Marshal(sandboxList)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ // Send response
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ w.WriteHeader(http.StatusOK)
+ fmt.Fprint(w, string(jsonResponse))
+}
+
+// Create new sandbox in store and publish updagte
+func createSandbox(sandboxName string, sandboxConfig *dataModel.SandboxConfig) (err error) {
+
+ // Create sandbox in DB
+ sbox := new(ss.Sandbox)
+ sbox.Name = sandboxName
+ sbox.ScenarioName = sandboxConfig.ScenarioName
+ err = pfmCtrl.sandboxStore.Set(sbox)
+ if err != nil {
+ log.Error(err.Error())
+ return err
+ }
+
+ // Send message to create sandbox
+ msg := pfmCtrl.mqGlobal.CreateMsg(mq.MsgSandboxCreate, mq.TargetAll, mq.TargetAll)
+ msg.Payload[fieldSandboxName] = sandboxName
+ msg.Payload[fieldScenarioName] = sandboxConfig.ScenarioName
+ log.Debug("TX MSG: ", mq.PrintMsg(msg))
+ err = pfmCtrl.mqGlobal.SendMsg(msg)
+ if err != nil {
+ log.Error("Failed to send message. Error: ", err.Error())
+ return err
+ }
+
+ return nil
+}
+
+func deleteSandbox(sandboxName string) {
+
+ // Remove sandbox from store
+ pfmCtrl.sandboxStore.Del(sandboxName)
+
+ // Send message to destroy sandbox
+ msg := pfmCtrl.mqGlobal.CreateMsg(mq.MsgSandboxDestroy, mq.TargetAll, mq.TargetAll)
+ msg.Payload[fieldSandboxName] = sandboxName
+ log.Debug("TX MSG: ", mq.PrintMsg(msg))
+ err := pfmCtrl.mqGlobal.SendMsg(msg)
+ if err != nil {
+ log.Error("Failed to send message. Error: ", err.Error())
+ }
+}
+
+var charset = []rune("abcdefghijklmnopqrstuvwxyz0123456789")
+
+func randSeq(n int) string {
+ b := make([]rune, n)
+ for i := range b {
+ b[i] = charset[rand.Intn(len(charset))]
+ }
+ return string(b)
+}
diff --git a/go-apps/meep-platform-ctrl/server/platform-ctrl_test.go b/go-apps/meep-platform-ctrl/server/platform-ctrl_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..79eff22d0be5981d5db2a39e48724f02a9955ecf
--- /dev/null
+++ b/go-apps/meep-platform-ctrl/server/platform-ctrl_test.go
@@ -0,0 +1,224 @@
+/*
+ * Copyright (c) 2019 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package server
+
+import (
+ "bytes"
+ "errors"
+ "fmt"
+ "io"
+ "net/http"
+ "net/http/httptest"
+ "testing"
+ "time"
+
+ log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
+ mod "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model"
+ "github.com/gorilla/mux"
+)
+
+const scenario1Name string = "test-platform-ctrl-1"
+const testScenario1 string = `
+{"name":"test-platform-ctrl-1","deployment":{"interDomainLatency":50,"interDomainLatencyVariation":5,"interDomainThroughput":1000,"domains":[{"id":"PUBLIC","name":"PUBLIC","type":"PUBLIC","interZoneLatency":6,"interZoneLatencyVariation":2,"interZoneThroughput":1000000,"zones":[{"id":"PUBLIC-COMMON","name":"PUBLIC-COMMON","type":"COMMON","interFogLatency":2,"interFogLatencyVariation":1,"interFogThroughput":1000000,"interEdgeLatency":3,"interEdgeLatencyVariation":1,"interEdgeThroughput":1000000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000000,"networkLocations":[{"id":"PUBLIC-COMMON-DEFAULT","name":"PUBLIC-COMMON-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"cloud1","name":"cloud1","type":"DC","processes":[{"id":"cloud1-iperf","name":"cloud1-iperf","type":"CLOUD-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT","commandExe":"/bin/bash","serviceConfig":{"name":"cloud1-iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"cloud1-svc","name":"cloud1-svc","type":"CLOUD-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=cloud1-svc, MGM_APP_ID=cloud1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"cloud1-svc","ports":[{"protocol":"TCP","port":80}]}}]}]}]}]},{"id":"operator1","name":"operator1","type":"OPERATOR","interZoneLatency":15,"interZoneLatencyVariation":3,"interZoneThroughput":1000,"zones":[{"id":"operator1-COMMON","name":"operator1-COMMON","type":"COMMON","interFogLatency":2,"interFogLatencyVariation":1,"interFogThroughput":1000000,"interEdgeLatency":3,"interEdgeLatencyVariation":1,"interEdgeThroughput":1000000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000000,"networkLocations":[{"id":"operator1-COMMON-DEFAULT","name":"operator1-COMMON-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1}]},{"id":"zone1","name":"zone1","type":"ZONE","interFogLatency":10,"interFogLatencyVariation":2,"interFogThroughput":1000,"interEdgeLatency":12,"interEdgeLatencyVariation":2,"interEdgeThroughput":1000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000,"networkLocations":[{"id":"zone1-DEFAULT","name":"zone1-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"zone1-edge1","name":"zone1-edge1","type":"EDGE","processes":[{"id":"zone1-edge1-iperf","name":"zone1-edge1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT","commandExe":"/bin/bash","serviceConfig":{"name":"zone1-edge1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone1-edge1-svc","name":"zone1-edge1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-edge1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone1-edge1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]}]},{"id":"zone1-poa1","name":"zone1-poa1","type":"POA","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":1000,"physicalLocations":[{"id":"zone1-fog1","name":"zone1-fog1","type":"FOG","processes":[{"id":"zone1-fog1-iperf","name":"zone1-fog1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT;","commandExe":"/bin/bash","serviceConfig":{"name":"zone1-fog1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone1-fog1-svc","name":"zone1-fog1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-fog1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone1-fog1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]},{"id":"ue1","name":"ue1","type":"UE","processes":[{"id":"ue1-iperf","name":"ue1-iperf","type":"UE-APP","image":"gophernet/iperf-client","commandArguments":"-c, export; iperf -u -c $IPERF_SERVICE_HOST -p $IPERF_SERVICE_PORT -t 3600 -b 50M;","commandExe":"/bin/bash"}]},{"id":"ue2-ext","name":"ue2-ext","type":"UE","isExternal":true,"processes":[{"id":"ue2-svc","name":"ue2-svc","type":"UE-APP","isExternal":true,"externalConfig":{"ingressServiceMap":[{"name":"svc","port":80,"externalPort":31111,"protocol":"TCP"},{"name":"iperf","port":80,"externalPort":31222,"protocol":"UDP"},{"name":"cloud1-svc","port":80,"externalPort":31112,"protocol":"TCP"},{"name":"cloud1-iperf","port":80,"externalPort":31223,"protocol":"UDP"}]}}]}]},{"id":"zone1-poa2","name":"zone1-poa2","type":"POA","terminalLinkLatency":10,"terminalLinkLatencyVariation":2,"terminalLinkThroughput":50}]},{"id":"zone2","name":"zone2","type":"ZONE","interFogLatency":10,"interFogLatencyVariation":2,"interFogThroughput":1000,"interEdgeLatency":12,"interEdgeLatencyVariation":2,"interEdgeThroughput":1000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000,"networkLocations":[{"id":"zone2-DEFAULT","name":"zone2-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"zone2-edge1","name":"zone2-edge1","type":"EDGE","processes":[{"id":"zone2-edge1-iperf","name":"zone2-edge1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT;","commandExe":"/bin/bash","serviceConfig":{"name":"zone2-edge1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone2-edge1-svc","name":"zone2-edge1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone2-edge1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone2-edge1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]}]},{"id":"zone2-poa1","name":"zone2-poa1","type":"POA","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":20}]}]}]}}
+`
+
+const scenario2Name string = "test-platform-ctrl-2"
+const testScenario2 string = `
+{"name":"test-platform-ctrl-2","deployment":{"interDomainLatency":50,"interDomainLatencyVariation":5,"interDomainThroughput":1000,"domains":[{"id":"PUBLIC","name":"PUBLIC","type":"PUBLIC","interZoneLatency":6,"interZoneLatencyVariation":2,"interZoneThroughput":1000000,"zones":[{"id":"PUBLIC-COMMON","name":"PUBLIC-COMMON","type":"COMMON","interFogLatency":2,"interFogLatencyVariation":1,"interFogThroughput":1000000,"interEdgeLatency":3,"interEdgeLatencyVariation":1,"interEdgeThroughput":1000000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000000,"networkLocations":[{"id":"PUBLIC-COMMON-DEFAULT","name":"PUBLIC-COMMON-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"cloud1","name":"cloud1","type":"DC","processes":[{"id":"cloud1-iperf","name":"cloud1-iperf","type":"CLOUD-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT","commandExe":"/bin/bash","serviceConfig":{"name":"cloud1-iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"cloud1-svc","name":"cloud1-svc","type":"CLOUD-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=cloud1-svc, MGM_APP_ID=cloud1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"cloud1-svc","ports":[{"protocol":"TCP","port":80}]}}]}]}]}]},{"id":"operator1","name":"operator1","type":"OPERATOR","interZoneLatency":15,"interZoneLatencyVariation":3,"interZoneThroughput":1000,"zones":[{"id":"operator1-COMMON","name":"operator1-COMMON","type":"COMMON","interFogLatency":2,"interFogLatencyVariation":1,"interFogThroughput":1000000,"interEdgeLatency":3,"interEdgeLatencyVariation":1,"interEdgeThroughput":1000000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000000,"networkLocations":[{"id":"operator1-COMMON-DEFAULT","name":"operator1-COMMON-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1}]},{"id":"zone1","name":"zone1","type":"ZONE","interFogLatency":10,"interFogLatencyVariation":2,"interFogThroughput":1000,"interEdgeLatency":12,"interEdgeLatencyVariation":2,"interEdgeThroughput":1000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000,"networkLocations":[{"id":"zone1-DEFAULT","name":"zone1-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"zone1-edge1","name":"zone1-edge1","type":"EDGE","processes":[{"id":"zone1-edge1-iperf","name":"zone1-edge1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT","commandExe":"/bin/bash","serviceConfig":{"name":"zone1-edge1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone1-edge1-svc","name":"zone1-edge1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-edge1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone1-edge1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]}]},{"id":"zone1-poa1","name":"zone1-poa1","type":"POA","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":1000,"physicalLocations":[{"id":"zone1-fog1","name":"zone1-fog1","type":"FOG","processes":[{"id":"zone1-fog1-iperf","name":"zone1-fog1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT;","commandExe":"/bin/bash","serviceConfig":{"name":"zone1-fog1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone1-fog1-svc","name":"zone1-fog1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-fog1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone1-fog1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]},{"id":"ue1","name":"ue1","type":"UE","processes":[{"id":"ue1-iperf","name":"ue1-iperf","type":"UE-APP","image":"gophernet/iperf-client","commandArguments":"-c, export; iperf -u -c $IPERF_SERVICE_HOST -p $IPERF_SERVICE_PORT -t 3600 -b 50M;","commandExe":"/bin/bash"}]},{"id":"ue2-ext","name":"ue2-ext","type":"UE","isExternal":true,"processes":[{"id":"ue2-svc","name":"ue2-svc","type":"UE-APP","isExternal":true,"externalConfig":{"ingressServiceMap":[{"name":"svc","port":80,"externalPort":31111,"protocol":"TCP"},{"name":"iperf","port":80,"externalPort":31222,"protocol":"UDP"},{"name":"cloud1-svc","port":80,"externalPort":31112,"protocol":"TCP"},{"name":"cloud1-iperf","port":80,"externalPort":31223,"protocol":"UDP"}]}}]}]},{"id":"zone1-poa2","name":"zone1-poa2","type":"POA","terminalLinkLatency":10,"terminalLinkLatencyVariation":2,"terminalLinkThroughput":50}]},{"id":"zone2","name":"zone2","type":"ZONE","interFogLatency":10,"interFogLatencyVariation":2,"interFogThroughput":1000,"interEdgeLatency":12,"interEdgeLatencyVariation":2,"interEdgeThroughput":1000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000,"networkLocations":[{"id":"zone2-DEFAULT","name":"zone2-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"zone2-edge1","name":"zone2-edge1","type":"EDGE","processes":[{"id":"zone2-edge1-iperf","name":"zone2-edge1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT;","commandExe":"/bin/bash","serviceConfig":{"name":"zone2-edge1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone2-edge1-svc","name":"zone2-edge1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone2-edge1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone2-edge1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]}]},{"id":"zone2-poa1","name":"zone2-poa1","type":"POA","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":20}]}]}]}}
+`
+
+func TestPlatformCtrl(t *testing.T) {
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ fmt.Println("Init()")
+ couchDBAddr = "http://localhost:30985/"
+ redisDBAddr = "localhost:30380"
+ mod.DbAddress = redisDBAddr
+ err := Init()
+ if err != nil {
+ t.Errorf("Error initializing platform-ctrl")
+ }
+
+ fmt.Println("Test CreateScenario")
+ testCreateScenario(t)
+
+ fmt.Println("Test GetScenario")
+ testGetScenario(t)
+
+ fmt.Println("Test GetScenarioList")
+ testGetScenarioList(t)
+
+ fmt.Println("Test SetScenario")
+ testSetScenario(t)
+
+ fmt.Println("Test DeleteScenario")
+ testDeleteScenario(t)
+}
+
+func testGetScenarioList(t *testing.T) {
+ // get
+ err := sendRequest(http.MethodGet, "/scenarios", nil, nil, nil, http.StatusOK, pcGetScenarioList)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+}
+
+func testGetScenario(t *testing.T) {
+ vars := make(map[string]string)
+
+ // get scenario 1
+ vars["name"] = scenario1Name
+ err := sendRequest(http.MethodGet, "/scenarios", nil, vars, nil, http.StatusOK, pcGetScenario)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ // get scenario 2
+ vars["name"] = scenario2Name
+ err = sendRequest(http.MethodGet, "/scenarios", nil, vars, nil, http.StatusOK, pcGetScenario)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ //--- inexisting scenario
+ vars["name"] = "not-a-scenario"
+ err = sendRequest(http.MethodGet, "/scenarios", nil, vars, nil, http.StatusNotFound, pcGetScenario)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ //--- inexisting scenario
+ vars["name"] = ""
+ err = sendRequest(http.MethodGet, "/scenarios", nil, vars, nil, http.StatusBadRequest, pcGetScenario)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+}
+
+func testCreateScenario(t *testing.T) {
+ vars := make(map[string]string)
+
+ // create
+ vars["name"] = scenario1Name
+ err := sendRequest(http.MethodPost, "/scenarios", bytes.NewBuffer([]byte(testScenario1)), vars, nil, http.StatusOK, pcCreateScenario)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ // conflict
+ err = sendRequest(http.MethodPost, "/scenarios", bytes.NewBuffer([]byte(testScenario1)), vars, nil, http.StatusConflict, pcCreateScenario)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ // Create another scenario
+ vars["name"] = scenario2Name
+ err = sendRequest(http.MethodPost, "/scenarios", bytes.NewBuffer([]byte(testScenario2)), vars, nil, http.StatusOK, pcCreateScenario)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ // bad request
+ vars["name"] = "this-should-fail"
+ err = sendRequest(http.MethodPost, "/scenarios", nil, vars, nil, http.StatusBadRequest, pcCreateScenario)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+}
+
+func testDeleteScenario(t *testing.T) {
+ vars := make(map[string]string)
+
+ // delete scenario 1
+ vars["name"] = scenario1Name
+ err := sendRequest(http.MethodDelete, "/scenarios", nil, vars, nil, http.StatusOK, pcDeleteScenario)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+
+ // delete scenario 2
+ vars["name"] = scenario2Name
+ err = sendRequest(http.MethodDelete, "/scenarios", nil, vars, nil, http.StatusOK, pcDeleteScenario)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+
+ // delete invalid scenario
+ vars["name"] = "not-a-scenario"
+ err = sendRequest(http.MethodDelete, "/scenarios", nil, vars, nil, http.StatusNotFound, pcDeleteScenario)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+}
+
+func testSetScenario(t *testing.T) {
+ vars := make(map[string]string)
+
+ // set scenario 1
+ vars["name"] = scenario1Name
+ err := sendRequest(http.MethodPut, "/scenarios", bytes.NewBuffer([]byte(testScenario1)), vars, nil, http.StatusOK, pcSetScenario)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ // set scenario 2
+ vars["name"] = scenario2Name
+ err = sendRequest(http.MethodPut, "/scenarios", bytes.NewBuffer([]byte(testScenario2)), vars, nil, http.StatusOK, pcSetScenario)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ //---- inexistent
+ vars["name"] = "this-should-fail"
+ err = sendRequest(http.MethodPut, "/scenarios", bytes.NewBuffer([]byte(testScenario1)), vars, nil, http.StatusNotFound, pcSetScenario)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ //---- bad request
+ vars["name"] = "this-should-fail"
+ err = sendRequest(http.MethodPut, "/scenarios", nil, vars, nil, http.StatusBadRequest, pcSetScenario)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+}
+
+func sendRequest(method string, url string, body io.Reader, vars map[string]string, query map[string]string, code int, f http.HandlerFunc) error {
+ req, err := http.NewRequest(method, url, body)
+ if err != nil || req == nil {
+ return err
+ }
+ if vars != nil {
+ req = mux.SetURLVars(req, vars)
+ }
+ if query != nil {
+ q := req.URL.Query()
+ for k, v := range query {
+ q.Add(k, v)
+ }
+ req.URL.RawQuery = q.Encode()
+ }
+
+ // We create a ResponseRecorder (which satisfies http.ResponseWriter) to record the response.
+ rr := httptest.NewRecorder()
+ handler := http.HandlerFunc(f)
+
+ // Our handlers satisfy http.Handler, so we can call their ServeHTTP method
+ // directly and pass in our Request and ResponseRecorder.
+ handler.ServeHTTP(rr, req)
+
+ time.Sleep(50 * time.Millisecond)
+
+ // Check the status code is what we expect.
+ if status := rr.Code; status != code {
+ s := fmt.Sprintf("Wrong status code - got %v want %v", status, code)
+ return errors.New(s)
+ }
+ return nil
+}
diff --git a/go-apps/meep-platform-ctrl/server/routers.go b/go-apps/meep-platform-ctrl/server/routers.go
new file mode 100644
index 0000000000000000000000000000000000000000..774c111416a75bef40925ff80ba73fbb857a2262
--- /dev/null
+++ b/go-apps/meep-platform-ctrl/server/routers.go
@@ -0,0 +1,164 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Platform Controller REST API
+ *
+ * This API is the main Platform Controller API for scenario configuration & sandbox management
**Micro-service**
[meep-pfm-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-platform-ctrl)
**Type & Usage**
Platform main interface used by controller software to configure scenarios and manage sandboxes in the AdvantEDGE platform
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+import (
+ "fmt"
+ "net/http"
+ "strings"
+
+ "github.com/gorilla/mux"
+)
+
+type Route struct {
+ Name string
+ Method string
+ Pattern string
+ HandlerFunc http.HandlerFunc
+}
+
+type Routes []Route
+
+func NewRouter(feDir string, swDir string) *mux.Router {
+ router := mux.NewRouter().StrictSlash(true)
+
+ // subrouter := router.PathPrefix("/platform-ctrl/").Subrouter()
+ for _, route := range routes {
+ var handler http.Handler = Logger(route.HandlerFunc, route.Name)
+
+ router.
+ Methods(route.Method).
+ Path(route.Pattern).
+ Name(route.Name).
+ Handler(handler)
+ }
+
+ // Path prefix router order is important
+ if swDir != "" {
+ router.PathPrefix("/api/").Handler(http.StripPrefix("/api/", http.FileServer(http.Dir(swDir))))
+ }
+ if feDir != "" {
+ router.PathPrefix("/").Handler(http.StripPrefix("/", http.FileServer(http.Dir(feDir))))
+ }
+
+ return router
+}
+
+func Index(w http.ResponseWriter, r *http.Request) {
+ fmt.Fprintf(w, "Hello World!")
+}
+
+var routes = Routes{
+ Route{
+ "Index",
+ "GET",
+ "/platform-ctrl/v1/",
+ Index,
+ },
+
+ Route{
+ "CreateSandbox",
+ strings.ToUpper("Post"),
+ "/platform-ctrl/v1/sandboxes",
+ CreateSandbox,
+ },
+
+ Route{
+ "CreateSandboxWithName",
+ strings.ToUpper("Post"),
+ "/platform-ctrl/v1/sandboxes/{name}",
+ CreateSandboxWithName,
+ },
+
+ Route{
+ "DeleteSandbox",
+ strings.ToUpper("Delete"),
+ "/platform-ctrl/v1/sandboxes/{name}",
+ DeleteSandbox,
+ },
+
+ Route{
+ "DeleteSandboxList",
+ strings.ToUpper("Delete"),
+ "/platform-ctrl/v1/sandboxes",
+ DeleteSandboxList,
+ },
+
+ Route{
+ "GetSandbox",
+ strings.ToUpper("Get"),
+ "/platform-ctrl/v1/sandboxes/{name}",
+ GetSandbox,
+ },
+
+ Route{
+ "GetSandboxList",
+ strings.ToUpper("Get"),
+ "/platform-ctrl/v1/sandboxes",
+ GetSandboxList,
+ },
+
+ Route{
+ "CreateScenario",
+ strings.ToUpper("Post"),
+ "/platform-ctrl/v1/scenarios/{name}",
+ CreateScenario,
+ },
+
+ Route{
+ "DeleteScenario",
+ strings.ToUpper("Delete"),
+ "/platform-ctrl/v1/scenarios/{name}",
+ DeleteScenario,
+ },
+
+ Route{
+ "DeleteScenarioList",
+ strings.ToUpper("Delete"),
+ "/platform-ctrl/v1/scenarios",
+ DeleteScenarioList,
+ },
+
+ Route{
+ "GetScenario",
+ strings.ToUpper("Get"),
+ "/platform-ctrl/v1/scenarios/{name}",
+ GetScenario,
+ },
+
+ Route{
+ "GetScenarioList",
+ strings.ToUpper("Get"),
+ "/platform-ctrl/v1/scenarios",
+ GetScenarioList,
+ },
+
+ Route{
+ "SetScenario",
+ strings.ToUpper("Put"),
+ "/platform-ctrl/v1/scenarios/{name}",
+ SetScenario,
+ },
+}
diff --git a/go-apps/meep-rnis/Dockerfile b/go-apps/meep-rnis/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..5431c19b8d4d458333bbfa7d2954d674ebc198d5
--- /dev/null
+++ b/go-apps/meep-rnis/Dockerfile
@@ -0,0 +1,17 @@
+# Copyright (c) 2020 InterDigital Communications, Inc
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+FROM debian:9.6-slim
+COPY ./meep-rnis /meep-rnis
+ENTRYPOINT ["/meep-rnis"]
diff --git a/go-apps/meep-rnis/api/swagger.yaml b/go-apps/meep-rnis/api/swagger.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..3700c3445785e9763f8ae8309ac9d398b0649014
--- /dev/null
+++ b/go-apps/meep-rnis/api/swagger.yaml
@@ -0,0 +1,4173 @@
+---
+swagger: "2.0"
+info:
+ description: "Radio Network Information Service is AdvantEDGE's implementation of\
+ \ [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)\
+ \
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)\ + \
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)\
+ \
**Type & Usage**
Edge Service used by edge applications that want to get\
+ \ information about radio conditions in the network
**Details**
API details\
+ \ available at _your-AdvantEDGE-ip-address/api_"
+ version: "1.1.1"
+ title: "AdvantEDGE Radio Network Information Service REST API"
+ license:
+ name: "Apache 2.0"
+ url: "https://github.com/InterDigitalInc/AdvantEDGE/blob/master/LICENSE"
+basePath: "/rni/v1"
+schemes:
+- "http"
+- "https"
+consumes:
+- "application/json"
+produces:
+- "application/json"
+security:
+- OauthSecurity:
+ - "all"
+paths:
+ /queries/rab_info:
+ get:
+ description: "Gets information on existing E-RABs that are associated with a\
+ \ specific mobile edge application instance"
+ operationId: "rab_infoGET"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "app_ins_id"
+ in: "query"
+ description: "Application instance identifier"
+ required: false
+ type: "string"
+ x-exportParamName: "AppInsId"
+ x-optionalDataType: "String"
+ - name: "cell_id"
+ in: "query"
+ description: "E-UTRAN Cell Identity as a bit string (size (28)), as defined\
+ \ in ETSI TS 136 413"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "CellId"
+ - name: "ue_ipv4_address"
+ in: "query"
+ description: "Comma separated list of IE IPv4 addresses as defined for the\
+ \ type for AssociateId"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "UeIpv4Address"
+ - name: "ue_ipv6_address"
+ in: "query"
+ description: "Comma separated list of IE IPv6 addresses as defined for the\
+ \ type for AssociateId"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "UeIpv6Address"
+ - name: "nated_ip_address"
+ in: "query"
+ description: "Comma separated list of IE NATed IP addresses as defined for\
+ \ the type for AssociateId"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "NatedIpAddress"
+ - name: "gtp_teid"
+ in: "query"
+ description: "Comma separated list of GTP TEID addresses as defined for the\
+ \ type for AssociateId"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "GtpTeid"
+ - name: "erab_id"
+ in: "query"
+ description: "E-RAB identifier"
+ required: false
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "ErabId"
+ x-optionalDataType: "Int32"
+ - name: "qci"
+ in: "query"
+ description: "QoS Class Identifier as defined in ETSI TS 123 401"
+ required: false
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "Qci"
+ x-optionalDataType: "Int32"
+ - name: "erab_mbr_dl"
+ in: "query"
+ description: "Maximum downlink E-RAB Bit Rate as defined in ETSI TS 123 401"
+ required: false
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "ErabMbrDl"
+ x-optionalDataType: "Int32"
+ - name: "erab_mbr_ul"
+ in: "query"
+ description: "Maximum uplink E-RAB Bit Rate as defined in ETSI TS 123 401"
+ required: false
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "ErabMbrUl"
+ x-optionalDataType: "Int32"
+ - name: "erab_gbr_dl"
+ in: "query"
+ description: "Guaranteed downlink E-RAB Bit Rate as defined in ETSI TS 123\
+ \ 401"
+ required: false
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "ErabGbrDl"
+ x-optionalDataType: "Int32"
+ - name: "erab_gbr_ul"
+ in: "query"
+ description: "Guaranteed uplink E-RAB Bit Rate as defined in ETSI TS 123 401"
+ required: false
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "ErabGbrUl"
+ x-optionalDataType: "Int32"
+ responses:
+ 200:
+ description: "Successful response to rab_info request"
+ examples:
+ application/json:
+ RabInfo:
+ timeStamp:
+ seconds: 1577836800
+ nanoSeconds: 0
+ appInId: "01"
+ requestId: "01"
+ cellUserInfo:
+ ecgi:
+ plmn:
+ mcc: "001"
+ mnc: "01"
+ cellId: "0x800000A"
+ ueInfo:
+ type: "1"
+ value: "192.0.2.0"
+ erabInfo:
+ erabId: 10
+ erabQosParameters:
+ qci: 7
+ qosInformation:
+ erabMbrDl: 10
+ erabMbrUl: 10
+ erabGbrDl: 10
+ erabGbrUl: 10
+ schema:
+ $ref: "#/definitions/inline_response_200"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ /queries/plmn_info:
+ get:
+ description: "Gets the information on Mobile Network(s) that are associated\
+ \ with a specific mobile edge application instance"
+ operationId: "plmn_infoGET"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "app_ins_id"
+ in: "query"
+ description: "Application instance identifier"
+ required: true
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "AppInsId"
+ responses:
+ 200:
+ description: "Successful response to plmn_info request"
+ examples:
+ application/json:
+ PlmnInfo:
+ timeStamp:
+ seconds: 1577836800
+ nanoSeconds: 0
+ appInId: "01"
+ ecgi:
+ plmn:
+ mcc: "001"
+ mnc: "01"
+ cellId: "0x800000A"
+ schema:
+ $ref: "#/definitions/inline_response_200_1"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ /queries/s1_bearer_info:
+ get:
+ description: "Gets information on existing E-RABs that are associated with a\
+ \ specific mobile edge application instance"
+ operationId: "s1_bearer_infoGET"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "temp_ue_id"
+ in: "query"
+ description: "The temporary identifier allocated for the specific UE as defined\
+ \ in ETSI TS 136 413"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "TempUeId"
+ - name: "ue_ipv4_address"
+ in: "query"
+ description: "Comma separated list of IE IPv4 addresses as defined for the\
+ \ type for AssociateId"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "UeIpv4Address"
+ - name: "ue_ipv6_address"
+ in: "query"
+ description: "Comma separated list of IE IPv6 addresses as defined for the\
+ \ type for AssociateId"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "UeIpv6Address"
+ - name: "nated_ip_address"
+ in: "query"
+ description: "Comma separated list of IE NATed IP addresses as defined for\
+ \ the type for AssociateId"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "NatedIpAddress"
+ - name: "gtp_teid"
+ in: "query"
+ description: "Comma separated list of GTP TEID addresses as defined for the\
+ \ type for AssociateId"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "GtpTeid"
+ - name: "cell_id"
+ in: "query"
+ description: "E-UTRAN Cell Identity as a bit string (size (28)), as defined\
+ \ in ETSI TS 136 413"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "CellId"
+ - name: "erab_id"
+ in: "query"
+ description: "E-RAB identifier"
+ required: false
+ type: "array"
+ items:
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "ErabId"
+ responses:
+ 200:
+ description: "Successful response to s1_bearer_info request"
+ examples:
+ application/json:
+ S1BearerInfo:
+ timeStamp:
+ seconds: 1577836800
+ nanoSeconds: 0
+ s1UeInfo:
+ - tempUeId:
+ mmec: "0"
+ mtmsi: "1234"
+ associateId:
+ - type: "1"
+ value: "192.0.2.0"
+ - type: "3"
+ value: "198.51.100.0"
+ ecgi:
+ plmn:
+ mcc: "001"
+ mnc: "01"
+ cellId: "0x800000A"
+ s1BearerInfoDetailed:
+ - erabId: 1
+ s1EnbInfo:
+ ipAddress: "192.0.2.0"
+ tunnelId: "1111"
+ sGwInfo:
+ ipAddress: "192.0.2.1"
+ tunnelId: "2222"
+ - tempUeId:
+ mmec: "0"
+ mtmsi: "1234"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ ecgi:
+ plmn:
+ mcc: "001"
+ mnc: "01"
+ cellId: "0x800000B"
+ s1BearerInfoDetailed:
+ - erabId: 2
+ s1EnbInfo:
+ ipAddress: "192.0.2.0"
+ tunnelId: "3333"
+ sGwInfo:
+ ipAddress: "192.0.2.1"
+ tunnelId: "4444"
+ schema:
+ $ref: "#/definitions/inline_response_200_2"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ /subscriptions/:
+ get:
+ description: "The GET method can be used to request information about the subscriptions\
+ \ for this requestor"
+ operationId: "SubscriptionLinkList_subscriptionsGET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters: []
+ responses:
+ 200:
+ description: "Response body contains the list of links to requestors subscriptions."
+ examples:
+ application/json:
+ SubscriptionLinkList:
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions"
+ subscription:
+ - href: "http://meAppClient.example.com/rni/v1/notifications/cell_change/77777"
+ subscriptionType: "CELL_CHANGE"
+ - href: "http://meAppClient.example.com/rni/v1/notifications/MeasTa/77777"
+ subscriptionType: "MEAS_TIMING_ADVANCE"
+ schema:
+ $ref: "#/definitions/inline_response_200_3"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ /subscriptions/cell_change:
+ get:
+ description: "The GET method can be used to request information about the cell_change\
+ \ subscriptions for this requestor"
+ operationId: "SubscriptionLinkList_subscriptions_cc_GET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters: []
+ responses:
+ 200:
+ description: "Response body contains the list of links to requestors cell_change\
+ \ subscriptions."
+ examples:
+ application/json:
+ SubscriptionLinkList:
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/cell_change"
+ subscription:
+ - href: "http://meAppClient.example.com/rni/v1/notifications/cell_change/77777"
+ subscriptionType: "CELL_CHANGE"
+ - href: "http://meAppClient.example.com/rni/v1/notifications/cell_change/77778"
+ subscriptionType: "CELL_CHANGE"
+ schema:
+ $ref: "#/definitions/inline_response_200_3"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ post:
+ description: "Creates a subscription to cell change notifications from Radio\
+ \ Network Information Service"
+ operationId: "CellChange_subscriptionsPOST"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - in: "body"
+ name: "CellChangeSubscriptionPost"
+ description: "Use to creates a subscription to cell change notifications based\
+ \ on the\n filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/CellChangeSubscriptionPost_1"
+ x-exportParamName: "CellChangeSubscriptionPost"
+ responses:
+ 201:
+ description: "Successful subscription to response to UE cell change notifications"
+ examples:
+ application/json:
+ CellChangeSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/cell_change/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/cell_change/sub123"
+ filterCriteria:
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ appInsId: "01"
+ trigger: 6
+ cellId: "0x800000B"
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_201"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 415:
+ description: "Unsupported Media Type"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ /subscriptions/cell_change/{subscriptionId}:
+ get:
+ description: "Get cell change subscription information"
+ operationId: "CellChange_subscriptionsGET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 200:
+ description: "Subscription information regarding cell change notifications"
+ examples:
+ application/json:
+ CellChangeSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/cell_change/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/cell_change/sub123"
+ filterCriteria:
+ appInsId: "01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ hoStatus: 3
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_200_4"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ put:
+ description: "Updates a subscription to cell change notifications from Radio\
+ \ Network Information Service"
+ operationId: "CellChange_subscriptionsPUT"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - in: "body"
+ name: "CellChangeSubscription"
+ description: "Use to creates a subscription to cell change notifications based\
+ \ on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/CellChangeSubscription_1"
+ x-exportParamName: "CellChangeSubscription"
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 200:
+ description: "Successful subscription to response to cell change notifications"
+ examples:
+ application/json:
+ CellChangeSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/cell_change/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/cell_change/sub123"
+ filterCriteria:
+ appInsId: "01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ hoStatus: 3
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/CellChangeSubscription_1"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 412:
+ description: "Precondition failed"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ delete:
+ description: "Method to delete a subscription"
+ operationId: "CellChange_subscriptionsSubscrIdDELETE"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 204:
+ description: "No Content"
+ x-swagger-router-controller: "Default"
+ /subscriptions/s1_bearer:
+ get:
+ description: "The GET method can be used to request information about the s1_bearer\
+ \ subscriptions for this requestor"
+ operationId: "SubscriptionLinkList_subscriptions_s1_GET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters: []
+ responses:
+ 200:
+ description: "Response body contains the list of links to requestors s1_bearer\
+ \ subscriptions."
+ examples:
+ application/json:
+ SubscriptionLinkList:
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/s1_bearer"
+ subscription:
+ - href: "http://meAppClient.example.com/rni/v1/notifications/s1_bearer/77777"
+ subscriptionType: "S1_BEARER"
+ - href: "http://meAppClient.example.com/rni/v1/notifications/s1_bearer/77778"
+ subscriptionType: "S1_BEARER"
+ schema:
+ $ref: "#/definitions/inline_response_200_3"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ post:
+ description: "Creates a subscription to S1 bearer notifications from Radio Network\
+ \ Information Service"
+ operationId: "S1BearerSubscription_subscriptionsPOST"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - in: "body"
+ name: "S1BearerSubscriptionPost"
+ description: "Use to creates a subscription to S1 Bearer notifications based\
+ \ on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/S1BearerSubscriptionPost_1"
+ x-exportParamName: "S1BearerSubscriptionPost"
+ responses:
+ 201:
+ description: "Successful subscription to response to S1 Bearer notifications"
+ examples:
+ application/json:
+ S1BearerSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/s1_bearer/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/s1_bearer/sub123"
+ eventType: 1
+ s1BearerSubscriptionCriteria:
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ erabId: 1
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_201_1"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 415:
+ description: "Unsupported Media Type"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ /subscriptions/s1_bearer/{subscriptionId}:
+ get:
+ description: "Gets a subscription to S1 bearer notifications from Radio Network\
+ \ Information Service"
+ operationId: "S1BearerSubscription_subscriptionsGET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 200:
+ description: "Successful subscription to response to S1 Bearer notifications"
+ examples:
+ application/json:
+ S1BearerSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/s1_bearer/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/s1_bearer/sub123"
+ eventType: 1
+ s1BearerSubscriptionCriteria:
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ erabId: 1
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_201_1"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ put:
+ description: "Updates a subscription to S1 bearer notifications from Radio Network\
+ \ Information Service"
+ operationId: "S1BearerSubscription_subscriptionsPUT"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ - in: "body"
+ name: "S1BearerSubscription"
+ description: "Use to creates a subscription to S1 Bearer notifications based\
+ \ on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/S1BearerSubscription_1"
+ x-exportParamName: "S1BearerSubscription"
+ responses:
+ 200:
+ description: "Successful subscription update to response to S1 Bearer notifications"
+ examples:
+ application/json:
+ S1BearerSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/s1_bearer/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/s1_bearer/sub123"
+ eventType: 1
+ s1BearerSubscriptionCriteria:
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ erabId: 1
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/S1BearerSubscription_1"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 412:
+ description: "Precondition failed"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ delete:
+ description: "Method to delete a subscription"
+ operationId: "S1Bearer_subscriptionsSubscrIdDELETE"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 204:
+ description: "No Content"
+ x-swagger-router-controller: "Default"
+ /subscriptions/ta:
+ get:
+ description: "The GET method can be used to request information about the ta\
+ \ subscriptions for this requestor"
+ operationId: "SubscriptionLinkList_subscriptions_ta_GET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters: []
+ responses:
+ 200:
+ description: "Response body contains the list of links to requestors ta\
+ \ subscriptions."
+ examples:
+ application/json:
+ SubscriptionLinkList:
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/ta"
+ subscription:
+ - href: "http://meAppClient.example.com/rni/v1/notifications/ta/77777"
+ subscriptionType: "MEAS_REPORT_UE"
+ - href: "http://meAppClient.example.com/rni/v1/notifications/ta/77778"
+ subscriptionType: "MEAS_REPORT_UE"
+ schema:
+ $ref: "#/definitions/inline_response_200_3"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ post:
+ description: "Creates a subscription to UE Timing Advance notifications from\
+ \ Radio Network Information Service"
+ operationId: "MeasTa_subscriptionsPOST"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - in: "body"
+ name: "MeasTaSubscriptionPost"
+ description: "Use to creates a subscription to UE Timing Advance notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/MeasTaSubscriptionPost_1"
+ x-exportParamName: "MeasTaSubscriptionPost"
+ responses:
+ 201:
+ description: "Successful subscription to response to UE Timing Advance notifications"
+ examples:
+ application/json:
+ MeasTaSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/ta/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/ta/sub123"
+ filterCriteria:
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ appInsId: "01"
+ trigger: 6
+ cellId: "0x800000B"
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_201_2"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 415:
+ description: "Unsupported Media Type"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ /subscriptions/ta/{subscriptionId}:
+ get:
+ description: "Gets UE Timing Advance subscription information from Radio Network\
+ \ Information Service"
+ operationId: "MeasTa_subscriptionsGET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 200:
+ description: "Subscription information regarding UE Timing Advance notifications"
+ examples:
+ application/json:
+ MeasTaSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/ta/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/ta/sub123"
+ filterCriteria:
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ appInsId: "01"
+ trigger: 6
+ cellId: "0x800000B"
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_200_5"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ put:
+ description: "Updates a subscription to UE Timing Advance notifications from\
+ \ Radio Network Information Service"
+ operationId: "MeasTa_subscriptionsPUT"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ - in: "body"
+ name: "MeasTaSubscription"
+ description: "Use to creates a subscription to UE Timing Advance notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/MeasTaSubscription_1"
+ x-exportParamName: "MeasTaSubscription"
+ responses:
+ 200:
+ description: "Successful subscription to response to UE Timing Advance notifications"
+ examples:
+ application/json:
+ MeasTaSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/ta/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/ta/sub123"
+ filterCriteria:
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ appInsId: "01"
+ trigger: 6
+ cellId: "0x800000B"
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/MeasTaSubscription_1"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 412:
+ description: "Precondition failed"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ delete:
+ description: "Method to delete a subscription"
+ operationId: "MeasTa_subscriptionsSubscrIdDELETE"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 204:
+ description: "No Content"
+ x-swagger-router-controller: "Default"
+ /subscriptions/meas_rep_ue:
+ get:
+ description: "The GET method can be used to request information about the meas_rep_ue\
+ \ subscriptions for this requestor"
+ operationId: "SubscriptionLinkList_subscriptions_mr_GET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters: []
+ responses:
+ 200:
+ description: "Response body contains the list of links to requestors meas_rep_ue\
+ \ subscriptions."
+ examples:
+ application/json:
+ SubscriptionLinkList:
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/meas_rep_ue"
+ subscription:
+ - href: "http://meAppClient.example.com/rni/v1/notifications/meas_rep_ue/77777"
+ subscriptionType: "MEAS_REPORT_UE"
+ - href: "http://meAppClient.example.com/rni/v1/notifications/meas_rep_ue/77778"
+ subscriptionType: "MEAS_REPORT_UE"
+ schema:
+ $ref: "#/definitions/inline_response_200_3"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ post:
+ description: "Creates a subscription to UE measurement report notifications\
+ \ from Radio Network Information Service"
+ operationId: "MeasRepUe_subscriptionsPOST"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - in: "body"
+ name: "MeasRepUeSubscriptionPost"
+ description: "Use to creates a subscription to UE measurement report notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/MeasRepUeSubscriptionPost_1"
+ x-exportParamName: "MeasRepUeSubscriptionPost"
+ responses:
+ 201:
+ description: "Successful subscription to response to UE measurement report\
+ \ notifications"
+ examples:
+ application/json:
+ MeasRepUeSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/meas_rep_ue/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/meas_rep_ue/sub123"
+ filterCriteria:
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ appInsId: "01"
+ trigger: 6
+ cellId: "0x800000B"
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_201_3"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 415:
+ description: "Unsupported Media Type"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ /subscriptions/meas_rep_ue/{subscriptionId}:
+ get:
+ description: "Gets a subscription to UE measurement report notifications from\
+ \ Radio Network Information Service"
+ operationId: "MeasRepUe_subscriptionsGET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 200:
+ description: "Successful subscription to response to UE measurement report\
+ \ notifications"
+ examples:
+ application/json:
+ MeasRepUeSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/meas_rep_ue/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/meas_rep_ue/sub123"
+ filterCriteria:
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ appInsId: "01"
+ trigger: 6
+ cellId: "0x800000B"
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_200_6"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ put:
+ description: "Updates a subscription to UE measurement report notifications\
+ \ from Radio Network Information Service"
+ operationId: "MeasRepUeReport_subscriptionsPUT"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ - in: "body"
+ name: "MeasRepUeSubscription"
+ description: "Use to creates a subscription to UE measurement report notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/MeasRepUeSubscription_1"
+ x-exportParamName: "MeasRepUeSubscription"
+ responses:
+ 200:
+ description: "Successful update subscription to response to UE measurement\
+ \ report notifications"
+ examples:
+ application/json:
+ MeasRepUeSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/meas_rep_ue/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/meas_rep_ue/sub123"
+ filterCriteria:
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ appInsId: "01"
+ trigger: 6
+ cellId: "0x800000B"
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/MeasRepUeSubscription_1"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 412:
+ description: "Precondition failed"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ delete:
+ description: "Method to delete a subscription"
+ operationId: "MeasRepUe_subscriptionsSubscrIdDELETE"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 204:
+ description: "No Content. Successful deletion of UE Measurment Report subscription"
+ x-swagger-router-controller: "Default"
+ /subscriptions/rab_est:
+ get:
+ description: "The GET method can be used to request information about the rab_est\
+ \ subscriptions for this requestor"
+ operationId: "SubscriptionLinkList_subscriptions_re_GET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters: []
+ responses:
+ 200:
+ description: "Response body contains the list of links to requestors rab_est\
+ \ subscriptions."
+ examples:
+ application/json:
+ SubscriptionLinkList:
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/rab_est"
+ subscription:
+ - href: "http://meAppClient.example.com/rni/v1/notifications/rab_est/77777"
+ subscriptionType: "RAB_ESTABLISHMENT"
+ - href: "http://meAppClient.example.com/rni/v1/notifications/rab_est/77778"
+ subscriptionType: "RAB_ESTABLISHMENT"
+ schema:
+ $ref: "#/definitions/inline_response_200_3"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ post:
+ description: "Creates a subscription to RAB establishment notifications from\
+ \ Radio Network Information Service"
+ operationId: "RabEstSubscription_subscriptionsPOST"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - in: "body"
+ name: "RabEstSubscriptionPost"
+ description: "Use to creates a subscription to RAB establishment notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/RabEstSubscriptionPost_1"
+ x-exportParamName: "RabEstSubscriptionPost"
+ responses:
+ 201:
+ description: "Successful subscription to RAB establishment notifications"
+ examples:
+ application/json:
+ RabEstSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/rab_est/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/rab_est/sub123"
+ filterCriteriaAssocQci:
+ appInsId: "app01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ qci: 1
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_201_4"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 415:
+ description: "Unsupported Media Type"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ /subscriptions/rab_est/{subscriptionId}:
+ get:
+ description: "Gets a subscription to RAB establishment notifications from Radio\
+ \ Network Information Service"
+ operationId: "RabEstSubscription_subscriptionsGET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 200:
+ description: "Subscription information regarding RAB establishment notifications"
+ examples:
+ application/json:
+ RabEstSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/rab_est/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/rab_est/sub123"
+ filterCriteriaAssocQci:
+ appInsId: "app01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ qci: 1
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_200_7"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ put:
+ description: "Updates a subscription to RAB establishment notifications from\
+ \ Radio Network Information Service"
+ operationId: "RabEstSubscription_subscriptionsPUT"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ - in: "body"
+ name: "RabEstSubscription"
+ description: "Use to creates a subscription to RAB establishment notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/RabEstSubscription_1"
+ x-exportParamName: "RabEstSubscription"
+ responses:
+ 200:
+ description: "Successful subscription update to RAB establishment notifications"
+ examples:
+ application/json:
+ RabEstSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/rab_est/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/rab_est/sub123"
+ filterCriteriaAssocQci:
+ appInsId: "app01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ qci: 1
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/RabEstSubscription_1"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 412:
+ description: "Precondition failed"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ delete:
+ description: "Method to delete a subscription"
+ operationId: "RabEst_subscriptionsSubscrIdDELETE"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 204:
+ description: "No Content. Successful deletion of Rab Establishment subscription"
+ x-swagger-router-controller: "Default"
+ /subscriptions/rab_mod:
+ get:
+ description: "The GET method can be used to request information about the rab_mod\
+ \ subscriptions for this requestor"
+ operationId: "SubscriptionLinkList_subscriptions_rm_GET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters: []
+ responses:
+ 200:
+ description: "Response body contains the list of links to requestors rab_mod\
+ \ subscriptions."
+ examples:
+ application/json:
+ SubscriptionLinkList:
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/rab_mod"
+ subscription:
+ - href: "http://meAppClient.example.com/rni/v1/notifications/rab_mod/77777"
+ subscriptionType: "RAB_MODIFICATION"
+ - href: "http://meAppClient.example.com/rni/v1/notifications/rab_mod/77778"
+ subscriptionType: "RAB_MODIFICATION"
+ schema:
+ $ref: "#/definitions/inline_response_200_3"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ post:
+ description: "Creates a subscription to RAB Modification notifications from\
+ \ Radio Network Information Service"
+ operationId: "RabModSubscription_subscriptionsPOST"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - in: "body"
+ name: "RabModSubscriptionPost"
+ description: "Use to creates a subscription to RAB Modification notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/RabModSubscriptionPost_1"
+ x-exportParamName: "RabModSubscriptionPost"
+ responses:
+ 201:
+ description: "Successful subscription to RAB Modification notifications"
+ examples:
+ application/json:
+ RabModSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/rab_mod/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/rab_mod/sub123"
+ filterCriteriaAssocQci:
+ appInsId: "app01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ qci: 1
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_201_5"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 415:
+ description: "Unsupported Media Type"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ /subscriptions/rab_mod/{subscriptionId}:
+ get:
+ description: "Gets a subscription to RAB Modification notifications from Radio\
+ \ Network Information Service"
+ operationId: "RabModSubscription_subscriptionsGET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 200:
+ description: "Subscription information regarding RAB Modification notifications"
+ examples:
+ application/json:
+ RabModSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/rab_mod/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/rab_mod/sub123"
+ filterCriteriaAssocQci:
+ appInsId: "app01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ qci: 1
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_200_8"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ put:
+ description: "Updates a subscription to RAB Modification notifications from\
+ \ Radio Network Information Service"
+ operationId: "RabModSubscription_subscriptionsPUT"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ - in: "body"
+ name: "RabModSubscription"
+ description: "Use to creates a subscription to RAB Modification notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/RabModSubscription_1"
+ x-exportParamName: "RabModSubscription"
+ responses:
+ 200:
+ description: "Successful subscription update to RAB Modification notifications"
+ examples:
+ application/json:
+ RabModSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/rab_mod/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/rab_mod/sub123"
+ filterCriteriaAssocQci:
+ appInsId: "app01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ qci: 1
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/RabModSubscription_1"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 412:
+ description: "Precondition failed"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ delete:
+ description: "Method to delete a subscription"
+ operationId: "RabMod_subscriptionsSubscrIdDELETE"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 204:
+ description: "No Content. Successful deletion of Rab Modification subscription"
+ x-swagger-router-controller: "Default"
+ /subscriptions/rab_rel:
+ get:
+ description: "The GET method can be used to request information about the rab_rel\
+ \ subscriptions for this requestor"
+ operationId: "SubscriptionLinkList_subscriptions_rr_GET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters: []
+ responses:
+ 200:
+ description: "Response body contains the list of links to requestors rab_rel\
+ \ subscriptions."
+ examples:
+ application/json:
+ SubscriptionLinkList:
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/rab_rel"
+ subscription:
+ - href: "http://meAppClient.example.com/rni/v1/notifications/rab_rel/77777"
+ subscriptionType: "RAB_RELEASE"
+ - href: "http://meAppClient.example.com/rni/v1/notifications/rab_rel/77778"
+ subscriptionType: "RAB_RELEASE"
+ schema:
+ $ref: "#/definitions/inline_response_200_3"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ post:
+ description: "Creates a subscription to RAB Release notifications from Radio\
+ \ Network Information Service"
+ operationId: "RabRelSubscription_subscriptionsPOST"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - in: "body"
+ name: "RabRelSubscriptionPost"
+ description: "Use to creates a subscription to RAB Release notifications based\
+ \ on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/RabRelSubscriptionPost_1"
+ x-exportParamName: "RabRelSubscriptionPost"
+ responses:
+ 201:
+ description: "Successful subscription to RAB Release notifications"
+ examples:
+ application/json:
+ RabRelSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/rab_rel/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/rab_rel/sub123"
+ filterCriteriaAssocQci:
+ appInsId: "app01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ qci: 1
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_201_6"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 415:
+ description: "Unsupported Media Type"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ /subscriptions/rab_rel/{subscriptionId}:
+ get:
+ description: "Gets a subscription to RAB Release notifications from Radio Network\
+ \ Information Service"
+ operationId: "RabRelSubscription_subscriptionsGET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 200:
+ description: "Subscription information regarding RAB Release notifications"
+ examples:
+ application/json:
+ RabRelSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/rab_rel/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/rab_rel/sub123"
+ filterCriteriaAssocQci:
+ appInsId: "app01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ qci: 1
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_200_9"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ put:
+ description: "Updates a subscription to RAB Release notifications from Radio\
+ \ Network Information Service"
+ operationId: "RabRelSubscription_subscriptionsPUT"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ - in: "body"
+ name: "RabRelSubscription"
+ description: "Use to creates a subscription to RAB Release notifications based\
+ \ on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/RabRelSubscription_1"
+ x-exportParamName: "RabRelSubscription"
+ responses:
+ 200:
+ description: "Successful subscription update to RAB Release notifications"
+ examples:
+ application/json:
+ RabRelSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/rab_rel/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/rab_rel/sub123"
+ filterCriteriaAssocQci:
+ appInsId: "app01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ qci: 1
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/RabRelSubscription_1"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 412:
+ description: "Precondition failed"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ delete:
+ description: "Method to delete a subscription"
+ operationId: "RabRel_subscriptionsSubscrIdDELETE"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 204:
+ description: "No Content. Successful deletion of Rab Release subscription"
+ x-swagger-router-controller: "Default"
+ /subscriptions/ca_reconf:
+ get:
+ description: "The GET method can be used to request information about the ca_reconf\
+ \ subscriptions for this requestor"
+ operationId: "SubscriptionLinkList_subscriptions_cr_GET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters: []
+ responses:
+ 200:
+ description: "Response body contains the list of links to requestors ca_reconf\
+ \ subscriptions."
+ examples:
+ application/json:
+ SubscriptionLinkList:
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/ca_reconf"
+ subscription:
+ - href: "http://meAppClient.example.com/rni/v1/notifications/ca_reconf/77777"
+ subscriptionType: "CA_RECONF"
+ - href: "http://meAppClient.example.com/rni/v1/notifications/ca_reconf/77778"
+ subscriptionType: "CA_RECONF"
+ schema:
+ $ref: "#/definitions/inline_response_200_3"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ post:
+ description: "Creates a subscription to Carrier Aggregation Reconfiguration\
+ \ notifications from Radio Network Information Service"
+ operationId: "CaReConfSubscription_subscriptionsPOST"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - in: "body"
+ name: "CaReConfSubscriptionPost"
+ description: "Use to creates a subscription to Carrier Aggregation Reconfiguration\
+ \ notifications based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/CaReConfSubscriptionPost_1"
+ x-exportParamName: "CaReConfSubscriptionPost"
+ responses:
+ 201:
+ description: "Successful subscription to Carrier Aggregation Reconfiguration\
+ \ notifications"
+ examples:
+ application/json:
+ CaReConfSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/ca_reconf/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/ca_reconf/sub123"
+ filterCriteriaAssoc:
+ appInsId: "app01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_201_7"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 415:
+ description: "Unsupported Media Type"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ /subscriptions/ca_reconf/{subscriptionId}:
+ get:
+ description: "Gets a subscription to Carrier Aggregation Reconfiguration notifications\
+ \ from Radio Network Information Service"
+ operationId: "CaReConfSubscription_subscriptionsGET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 200:
+ description: "Subscription information regarding Carrier Aggregation Reconfiguration\
+ \ notifications"
+ examples:
+ application/json:
+ CaReConfSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/ca_reconf/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/ca_reconf/sub123"
+ filterCriteriaAssoc:
+ appInsId: "app01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_200_10"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ put:
+ description: "Updates a subscription to Carrier Aggregation Reconfiguration\
+ \ notifications from Radio Network Information Service"
+ operationId: "CaReConfSubscription_subscriptionsPUT"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ - in: "body"
+ name: "CaReConfSubscription"
+ description: "Use to creates a subscription to Carrier Aggregation Reconfiguration\
+ \ notifications based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/CaReConfSubscription_1"
+ x-exportParamName: "CaReConfSubscription"
+ responses:
+ 200:
+ description: "Successful subscription to Carrier Aggregation Reconfiguration\
+ \ notifications"
+ examples:
+ application/json:
+ CaReConfSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/ca_reconf/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/ca_reconf/sub123"
+ filterCriteriaAssoc:
+ appInsId: "app01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/CaReConfSubscription_1"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 412:
+ description: "Precondition failed"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ delete:
+ description: "Method to delete a subscription"
+ operationId: "CaReConf_subscriptionsSubscrIdDELETE"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 204:
+ description: "No Content"
+ x-swagger-router-controller: "Default"
+securityDefinitions:
+ OauthSecurity:
+ type: "oauth2"
+ tokenUrl: "https://oauth.exampleAPI/token"
+ flow: "application"
+ scopes:
+ all: "Single oauth2 scope for API"
+definitions:
+ ProblemDetails:
+ type: "object"
+ properties:
+ type:
+ type: "string"
+ format: "uri"
+ description: "A URI reference according to IETF RFC 3986 that identifies the\
+ \ problem type"
+ title:
+ type: "string"
+ description: "A short, human-readable summary of the problem type"
+ status:
+ type: "integer"
+ format: "uint32"
+ description: "The HTTP status code for this occurrence of the problem"
+ detail:
+ type: "string"
+ description: "A human-readable explanation specific to this occurrence of\
+ \ the problem"
+ instance:
+ type: "string"
+ format: "uri"
+ description: "A URI reference that identifies the specific occurrence of the\
+ \ problem"
+ PlmnInfo:
+ type: "object"
+ required:
+ - "appInsId"
+ - "ecgi"
+ properties:
+ timeStamp:
+ $ref: "#/definitions/TimeStamp"
+ appInsId:
+ type: "string"
+ format: "string"
+ example: "01"
+ description: "Unique identifier for the mobile edge application instance"
+ ecgi:
+ $ref: "#/definitions/Ecgi"
+ RabInfo:
+ type: "object"
+ required:
+ - "appInsId"
+ - "requestId"
+ properties:
+ timeStamp:
+ $ref: "#/definitions/TimeStamp"
+ appInsId:
+ type: "string"
+ format: "string"
+ example: "01"
+ description: "Unique identifier for the mobile edge application instance"
+ requestId:
+ type: "string"
+ format: "string"
+ example: "01"
+ description: "Unique identifier allocated by the Mobile Edge application for\
+ \ the Information request."
+ cellUserInfo:
+ type: "array"
+ items:
+ $ref: "#/definitions/CellUserInfo"
+ S1BearerInfo:
+ type: "object"
+ required:
+ - "s1UeInfo"
+ properties:
+ timeStamp:
+ $ref: "#/definitions/TimeStamp"
+ s1UeInfo:
+ type: "array"
+ items:
+ $ref: "#/definitions/S1UeInfo"
+ S1UeInfo:
+ type: "object"
+ required:
+ - "ecgi"
+ - "s1BearerInfoDetailed"
+ - "tempUeId"
+ properties:
+ tempUeId:
+ type: "array"
+ items:
+ $ref: "#/definitions/TempUeId"
+ associateId:
+ type: "array"
+ items:
+ $ref: "#/definitions/AssociateId"
+ ecgi:
+ type: "array"
+ items:
+ $ref: "#/definitions/Ecgi"
+ s1BearerInfoDetailed:
+ type: "array"
+ items:
+ $ref: "#/definitions/S1BearerInfoDetailed"
+ description: "The information on users per cell."
+ S1BearerInfoDetailed:
+ type: "object"
+ required:
+ - "erabId"
+ - "s1EnbInfo"
+ properties:
+ erabId:
+ type: "integer"
+ format: "int32"
+ example: 10
+ description: "The element that uniquely identifies a S1 bearer for a specific\
+ \ UE, as defined in ETSI TS 136 413"
+ s1EnbInfo:
+ $ref: "#/definitions/S1EnbInfo"
+ sGwInfo:
+ $ref: "#/definitions/SGwInfo"
+ description: "Information on UEs in the specific cell."
+ TempUeId:
+ type: "object"
+ required:
+ - "mmec"
+ - "mtmsi"
+ properties:
+ mmec:
+ type: "string"
+ example: "0"
+ description: "MMEC as defined in ETSI TS 136 413"
+ mtmsi:
+ type: "string"
+ example: "1234"
+ description: "M-TMSI as defined in ETSI TS 136 413"
+ S1EnbInfo:
+ type: "object"
+ required:
+ - "ipAddress"
+ - "tunnelId"
+ properties:
+ ipAddress:
+ type: "string"
+ example: "192.0.2.0"
+ description: "eNB transport layer address of this S1 bearer."
+ tunnelId:
+ type: "string"
+ example: "1111"
+ description: "eNB GTP-U TEID of this S1 bearer."
+ SGwInfo:
+ type: "object"
+ required:
+ - "ipAddress"
+ - "tunnelId"
+ properties:
+ ipAddress:
+ type: "string"
+ example: "192.0.2.1"
+ description: "SGW transport layer address of this S1 bearer."
+ tunnelId:
+ type: "string"
+ example: "2222"
+ description: "SGW GTP-U TEID of this S1 bearer."
+ TimeStamp:
+ type: "object"
+ required:
+ - "nanoSeconds"
+ - "seconds"
+ properties:
+ seconds:
+ type: "integer"
+ format: "uint32"
+ example: 1577836800
+ description: "The seconds part of the time. Time is defined as Unix-time since\
+ \ January 1, 1970, 00:00:00 UTC"
+ nanoSeconds:
+ type: "integer"
+ format: "uint32"
+ example: 0
+ description: "The nanoseconds part of the time. Time is defined as Unix-time\
+ \ since January 1, 1970, 00:00:00 UTC"
+ CellUserInfo:
+ type: "object"
+ required:
+ - "ecgi"
+ - "ueInfo"
+ properties:
+ ecgi:
+ $ref: "#/definitions/Ecgi"
+ ueInfo:
+ type: "array"
+ items:
+ $ref: "#/definitions/UeInfo"
+ description: "The information on users per cell."
+ Ecgi:
+ type: "object"
+ required:
+ - "cellId"
+ - "plmn"
+ properties:
+ plmn:
+ $ref: "#/definitions/Plmn"
+ cellId:
+ type: "array"
+ example: "0x800000A"
+ description: "The E-UTRAN Cell Identity as a bit string (size (28)), as defined\
+ \ in 3GPP TS 36.413"
+ items:
+ type: "string"
+ format: "binary"
+ description: "E-UTRAN CelI Global Identifier as defined in 3GPP TS 36.413"
+ Plmn:
+ type: "object"
+ required:
+ - "mcc"
+ - "mnc"
+ properties:
+ mcc:
+ type: "string"
+ format: "string"
+ example: "001"
+ description: "The Mobile Country Code part of PLMN Identity as defined in\
+ \ 3GPP TS 36.413"
+ mnc:
+ type: "string"
+ format: "string"
+ example: "01"
+ description: "The Mobile Network Code part of PLMN Identity as defined in\
+ \ 3GPP TS 36.413"
+ UeInfo:
+ type: "object"
+ required:
+ - "erabInfo"
+ properties:
+ associateId:
+ type: "array"
+ items:
+ $ref: "#/definitions/AssociateId"
+ erabInfo:
+ type: "array"
+ items:
+ $ref: "#/definitions/ErabQosParameters"
+ description: "Information on UEs in the specific cell."
+ AssociateId:
+ type: "object"
+ required:
+ - "type"
+ - "value"
+ properties:
+ type:
+ type: "string"
+ example: "UE_IPV4_ADDRESS"
+ description: "Numeric value (0-255) corresponding to specified type of identifier"
+ enum:
+ - "RESERVED_ASSOCIATED_ID_TYPE"
+ - "UE_IPV4_ADDRESS"
+ - "UE_IPV6_ADDRESS"
+ - "NATED_IP_ADDRESS"
+ - "GTP_TEID"
+ value:
+ type: "string"
+ example: "192.168.10.1"
+ description: "Value for the identifier"
+ ErabQosParameters:
+ type: "object"
+ properties:
+ qci:
+ type: "integer"
+ format: "int32"
+ example: 7
+ description: "QoS Class Identifier as defined in TS 23.401"
+ qos_information:
+ $ref: "#/definitions/QosInformation"
+ QosInformation:
+ type: "object"
+ required:
+ - "erabGbrDl"
+ - "erabGbrUl"
+ - "erabMbrDl"
+ - "erabMbrUl"
+ properties:
+ erabMbrDl:
+ type: "integer"
+ format: "int32"
+ example: 10
+ description: "This IE indicates the maximum downlink E-RAB Bit Rate as defined\
+ \ in TS 23.401 for this bearer."
+ erabMbrUl:
+ type: "integer"
+ format: "int32"
+ example: 10
+ description: "This IE indicates the maximum uplink E-RAB Bit Rate as defined\
+ \ in TS 23.401 for this bearer."
+ erabGbrDl:
+ type: "integer"
+ format: "int32"
+ example: 10
+ description: "This IE indicates the guaranteed downlink E-RAB Bit Rate as\
+ \ defined in TS 23.401 for this bearer."
+ erabGbrUl:
+ type: "integer"
+ format: "int32"
+ example: 10
+ description: "This IE indicates the guaranteed uplink E-RAB Bit Rate as defined\
+ \ in TS 23.401 for this bearer."
+ SubscriptionLinkList:
+ type: "object"
+ required:
+ - "_links"
+ properties:
+ _links:
+ $ref: "#/definitions/Link"
+ subscription:
+ type: "array"
+ items:
+ $ref: "#/definitions/Subscription"
+ MeasRepUeSubscriptionPost:
+ type: "object"
+ required:
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssocTri"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ MeasRepUeSubscription:
+ type: "object"
+ required:
+ - "_links"
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ _links:
+ $ref: "#/definitions/Link"
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssocTri"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ S1BearerSubscriptionPost:
+ type: "object"
+ required:
+ - "callbackReference"
+ - "s1BearerSubscriptionCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ eventType:
+ $ref: "#/definitions/EventType"
+ s1BearerSubscriptionCriteria:
+ $ref: "#/definitions/S1BearerSubscriptionCriteria"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ S1BearerSubscription:
+ type: "object"
+ required:
+ - "_links"
+ - "callbackReference"
+ - "s1BearerSubscriptionCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ _links:
+ $ref: "#/definitions/Link"
+ eventType:
+ $ref: "#/definitions/EventType"
+ s1BearerSubscriptionCriteria:
+ $ref: "#/definitions/S1BearerSubscriptionCriteria"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ RabEstSubscription:
+ type: "object"
+ required:
+ - "_links"
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ _links:
+ $ref: "#/definitions/Link"
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssocQci"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ RabEstSubscriptionPost:
+ type: "object"
+ required:
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssocQci"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ RabModSubscription:
+ type: "object"
+ required:
+ - "_links"
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ _links:
+ $ref: "#/definitions/Link"
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssocQci"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ RabModSubscriptionPost:
+ type: "object"
+ required:
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssocQci"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ RabRelSubscription:
+ type: "object"
+ required:
+ - "_links"
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ _links:
+ $ref: "#/definitions/Link"
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssocQci"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ RabRelSubscriptionPost:
+ type: "object"
+ required:
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssocQci"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ CaReConfSubscription:
+ type: "object"
+ required:
+ - "_links"
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ _links:
+ $ref: "#/definitions/Link"
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssoc"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ CaReConfSubscriptionPost:
+ type: "object"
+ required:
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssoc"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ CellChangeSubscriptionPost:
+ type: "object"
+ required:
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssocHo"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ CellChangeSubscription:
+ type: "object"
+ required:
+ - "_links"
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ _links:
+ $ref: "#/definitions/Link"
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssocHo"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ MeasTaSubscriptionPost:
+ type: "object"
+ required:
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssoc"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ MeasTaSubscription:
+ type: "object"
+ required:
+ - "_links"
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ _links:
+ $ref: "#/definitions/Link"
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssoc"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ Link:
+ type: "object"
+ properties:
+ self:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URI referring to a resource"
+ description: "List of hyperlinks related to the resource"
+ Subscription:
+ type: "object"
+ required:
+ - "href"
+ - "subscriptionType"
+ properties:
+ href:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URI referring to a resource"
+ subscriptionType:
+ $ref: "#/definitions/SubscriptionType"
+ description: "A link to a subscription."
+ SubscriptionType:
+ type: "string"
+ description: "Numeric value corresponding to specified type of subscription."
+ example: "CELL_CHANGE"
+ enum:
+ - "RESERVED_SUBSCRIPTION_TYPE"
+ - "CELL_CHANGE"
+ - "RAB_ESTABLISHMENT"
+ - "RAB_MODIFICATION"
+ - "RAB_RELEASE"
+ - "MEAS_REPORT_UE"
+ - "MEAS_TIMING_ADVANCE"
+ - "CA_RECONF"
+ - "S1_BEARE"
+ FilterCriteriaAssoc:
+ type: "object"
+ properties:
+ appInsId:
+ type: "string"
+ format: "string"
+ example: "01"
+ description: "Unique identifier for the mobile edge application instance"
+ associateId:
+ $ref: "#/definitions/AssociateId"
+ plmn:
+ $ref: "#/definitions/Plmn"
+ cellId:
+ type: "array"
+ example: "0x800000A"
+ description: "The E-UTRAN Cell Identity as a bit string (size (28)), as defined\
+ \ in 3GPP TS 36.413"
+ items:
+ type: "string"
+ format: "binary"
+ description: "List of filtering criteria for the subscription."
+ FilterCriteriaAssocQci:
+ type: "object"
+ properties:
+ appInsId:
+ type: "string"
+ format: "string"
+ example: "01"
+ description: "Unique identifier for the mobile edge application instance"
+ associateId:
+ $ref: "#/definitions/AssociateId"
+ plmn:
+ $ref: "#/definitions/Plmn"
+ cellId:
+ type: "array"
+ example: "0x800000A"
+ description: "The E-UTRAN Cell Identity as a bit string (size (28)), as defined\
+ \ in 3GPP TS 36.413"
+ items:
+ type: "string"
+ format: "binary"
+ qci:
+ type: "integer"
+ format: "int32"
+ example: 7
+ description: "QoS Class Identifier as defined in TS 23.401"
+ description: "List of filtering criteria for the subscription."
+ FilterCriteriaAssocHo:
+ type: "object"
+ properties:
+ appInsId:
+ type: "string"
+ format: "string"
+ example: "01"
+ description: "Unique identifier for the mobile edge application instance"
+ associateId:
+ $ref: "#/definitions/AssociateId"
+ plmn:
+ $ref: "#/definitions/Plmn"
+ cellId:
+ type: "array"
+ example: "0x800000A"
+ description: "The E-UTRAN Cell Identity as a bit string (size (28)), as defined\
+ \ in 3GPP TS 36.413"
+ items:
+ type: "string"
+ format: "binary"
+ hoStatus:
+ $ref: "#/definitions/HoStatus"
+ description: "List of filtering criteria for the subscription."
+ FilterCriteriaAssocTri:
+ type: "object"
+ properties:
+ appInsId:
+ type: "string"
+ format: "string"
+ example: "01"
+ description: "Unique identifier for the mobile edge application instance"
+ associateId:
+ $ref: "#/definitions/AssociateId"
+ plmn:
+ $ref: "#/definitions/Plmn"
+ cellId:
+ type: "array"
+ example: "0x800000A"
+ description: "The E-UTRAN Cell Identity as a bit string (size (28)), as defined\
+ \ in 3GPP TS 36.413"
+ items:
+ type: "string"
+ format: "binary"
+ trigger:
+ $ref: "#/definitions/Trigger"
+ description: "List of filtering criteria for the subscription."
+ S1BearerSubscriptionCriteria:
+ type: "object"
+ properties:
+ associateId:
+ $ref: "#/definitions/AssociateId"
+ plmn:
+ $ref: "#/definitions/Plmn"
+ cellId:
+ type: "array"
+ example: "0x800000A"
+ description: "The E-UTRAN Cell Identity as a bit string (size (28)), as defined\
+ \ in 3GPP TS 36.413"
+ items:
+ type: "string"
+ format: "binary"
+ erabId:
+ type: "integer"
+ format: "int32"
+ example: 10
+ description: "The element that uniquely identifies a S1 bearer for a specific\
+ \ UE, as defined in ETSI TS 136 413"
+ description: "List of filtering criteria for the subscription."
+ HoStatus:
+ type: "string"
+ description: "Description of the subscribed to event"
+ example: "COMPLETED"
+ enum:
+ - "RESERVED_HO_STATUS"
+ - "IN_PREPARATION"
+ - "IN_EXECUTION"
+ - "COMPLETED"
+ - "REJECTED"
+ - "CANCELLED"
+ EventType:
+ type: "string"
+ description: "Description of the subscribed event."
+ example: "S1_BEARER_ESTABLISH"
+ enum:
+ - "RESERVED_EVENT_TYPE"
+ - "S1_BEARER_ESTABLISH"
+ - "S1_BEARER_MODIFY"
+ - "S1_BEARER_RELEASE"
+ Trigger:
+ type: "string"
+ description: "Unique identifier for the mobile edge application instance"
+ example: "EVENT_A3"
+ enum:
+ - "NOT_AVAILABLE"
+ - "PERIODICAL_REPORT_STRONGEST_CELLS"
+ - "PERIODICAL_REPORT_STRONGEST_CELLS_FOR_SON"
+ - "PERIODICAL_REPORT_CGI"
+ - "EVENT_A1"
+ - "EVENT_A2"
+ - "EVENT_A3"
+ - "EVENT_A4"
+ - "EVENT_A5"
+ - "EVENT_A6"
+ - "EVENT_B1"
+ - "EVENT_B2"
+ - "EVENT_C1"
+ - "EVENT_C2"
+ - "EVENT_W1"
+ - "EVENT_W2"
+ - "EVENT_W3"
+ ErabQosParameters_qci:
+ type: "object"
+ properties:
+ qosInformation:
+ $ref: "#/definitions/QosInformation"
+ description: "QoS Class Identifier as defined in TS 23.401"
+ inline_response_200:
+ type: "object"
+ required:
+ - "RabInfo"
+ properties:
+ RabInfo:
+ $ref: "#/definitions/RabInfo"
+ inline_response_400:
+ type: "object"
+ properties:
+ ProblemDetails:
+ $ref: "#/definitions/ProblemDetails"
+ inline_response_403:
+ type: "object"
+ required:
+ - "ProblemDetails"
+ properties:
+ ProblemDetails:
+ $ref: "#/definitions/ProblemDetails"
+ inline_response_200_1:
+ type: "object"
+ properties:
+ PlmnInfo:
+ type: "array"
+ items:
+ $ref: "#/definitions/PlmnInfo"
+ inline_response_200_2:
+ type: "object"
+ required:
+ - "S1BearerInfo"
+ properties:
+ S1BearerInfo:
+ $ref: "#/definitions/S1BearerInfo"
+ inline_response_200_3:
+ type: "object"
+ required:
+ - "SubscriptionLinkList"
+ properties:
+ SubscriptionLinkList:
+ $ref: "#/definitions/SubscriptionLinkList"
+ CellChangeSubscriptionPost_1:
+ type: "object"
+ properties:
+ CellChangeSubscription:
+ $ref: "#/definitions/CellChangeSubscriptionPost"
+ inline_response_201:
+ type: "object"
+ properties:
+ CellChangeSubscription:
+ $ref: "#/definitions/CellChangeSubscription"
+ inline_response_200_4:
+ type: "object"
+ required:
+ - "CellChangeSubscription"
+ properties:
+ CellChangeSubscription:
+ $ref: "#/definitions/CellChangeSubscription"
+ CellChangeSubscription_1:
+ type: "object"
+ properties:
+ CellChangeSubscription:
+ $ref: "#/definitions/CellChangeSubscription"
+ S1BearerSubscriptionPost_1:
+ type: "object"
+ properties:
+ S1BearerSubscription:
+ $ref: "#/definitions/S1BearerSubscriptionPost"
+ inline_response_201_1:
+ type: "object"
+ properties:
+ S1BearerSubscription:
+ $ref: "#/definitions/S1BearerSubscription"
+ S1BearerSubscription_1:
+ type: "object"
+ properties:
+ S1BearerSubscription:
+ $ref: "#/definitions/S1BearerSubscription"
+ MeasTaSubscriptionPost_1:
+ type: "object"
+ properties:
+ MeasTaSubscription:
+ $ref: "#/definitions/MeasTaSubscriptionPost"
+ inline_response_201_2:
+ type: "object"
+ properties:
+ MeasTaSubscription:
+ $ref: "#/definitions/MeasTaSubscription"
+ inline_response_200_5:
+ type: "object"
+ required:
+ - "MeasTaSubscription"
+ properties:
+ MeasTaSubscription:
+ $ref: "#/definitions/MeasTaSubscription"
+ MeasTaSubscription_1:
+ type: "object"
+ properties:
+ MeasTaSubscription:
+ $ref: "#/definitions/MeasTaSubscription"
+ MeasRepUeSubscriptionPost_1:
+ type: "object"
+ properties:
+ MeasRepUeSubscription:
+ $ref: "#/definitions/MeasRepUeSubscriptionPost"
+ inline_response_201_3:
+ type: "object"
+ properties:
+ MeasRepUeSubscription:
+ $ref: "#/definitions/MeasRepUeSubscription"
+ inline_response_200_6:
+ type: "object"
+ required:
+ - "MeasRepUeSubscription"
+ properties:
+ MeasRepUeSubscription:
+ $ref: "#/definitions/MeasRepUeSubscription"
+ MeasRepUeSubscription_1:
+ type: "object"
+ properties:
+ MeasRepUeSubscription:
+ $ref: "#/definitions/MeasRepUeSubscription"
+ RabEstSubscriptionPost_1:
+ type: "object"
+ properties:
+ RabEstSubscription:
+ $ref: "#/definitions/RabEstSubscriptionPost"
+ inline_response_201_4:
+ type: "object"
+ properties:
+ RabEstSubscription:
+ $ref: "#/definitions/RabEstSubscription"
+ inline_response_200_7:
+ type: "object"
+ required:
+ - "RabEstSubscription"
+ properties:
+ RabEstSubscription:
+ $ref: "#/definitions/RabEstSubscription"
+ RabEstSubscription_1:
+ type: "object"
+ properties:
+ RabEstSubscription:
+ $ref: "#/definitions/RabEstSubscription"
+ RabModSubscriptionPost_1:
+ type: "object"
+ properties:
+ RabModSubscription:
+ $ref: "#/definitions/RabModSubscriptionPost"
+ inline_response_201_5:
+ type: "object"
+ properties:
+ RabModSubscription:
+ $ref: "#/definitions/RabModSubscription"
+ inline_response_200_8:
+ type: "object"
+ required:
+ - "RabModSubscription"
+ properties:
+ RabModSubscription:
+ $ref: "#/definitions/RabModSubscription"
+ RabModSubscription_1:
+ type: "object"
+ properties:
+ RabModSubscription:
+ $ref: "#/definitions/RabModSubscription"
+ RabRelSubscriptionPost_1:
+ type: "object"
+ properties:
+ RabRelSubscription:
+ $ref: "#/definitions/RabRelSubscriptionPost"
+ inline_response_201_6:
+ type: "object"
+ properties:
+ RabRelSubscription:
+ $ref: "#/definitions/RabRelSubscription"
+ inline_response_200_9:
+ type: "object"
+ required:
+ - "RabRelSubscription"
+ properties:
+ RabRelSubscription:
+ $ref: "#/definitions/RabRelSubscription"
+ RabRelSubscription_1:
+ type: "object"
+ properties:
+ RabRelSubscription:
+ $ref: "#/definitions/RabRelSubscription"
+ CaReConfSubscriptionPost_1:
+ type: "object"
+ properties:
+ CaReConfSubscription:
+ $ref: "#/definitions/CaReConfSubscriptionPost"
+ inline_response_201_7:
+ type: "object"
+ properties:
+ CaReConfSubscription:
+ $ref: "#/definitions/CaReConfSubscription"
+ inline_response_200_10:
+ type: "object"
+ required:
+ - "CaReConfSubscription"
+ properties:
+ CaReConfSubscription:
+ $ref: "#/definitions/CaReConfSubscription"
+ CaReConfSubscription_1:
+ type: "object"
+ properties:
+ CaReConfSubscription:
+ $ref: "#/definitions/CaReConfSubscription"
+parameters:
+ Body.CellChangeSubscriptionPost:
+ in: "body"
+ name: "CellChangeSubscriptionPost"
+ description: "Use to creates a subscription to cell change notifications based\
+ \ on the\n filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/CellChangeSubscriptionPost_1"
+ x-exportParamName: "CellChangeSubscriptionPost"
+ Body.CellChangeSubscription:
+ in: "body"
+ name: "CellChangeSubscription"
+ description: "Use to creates a subscription to cell change notifications based\
+ \ on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/CellChangeSubscription_1"
+ x-exportParamName: "CellChangeSubscription"
+ Body.S1BearerSubscriptionPost:
+ in: "body"
+ name: "S1BearerSubscriptionPost"
+ description: "Use to creates a subscription to S1 Bearer notifications based on\
+ \ the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/S1BearerSubscriptionPost_1"
+ x-exportParamName: "S1BearerSubscriptionPost"
+ Body.S1BearerSubscription:
+ in: "body"
+ name: "S1BearerSubscription"
+ description: "Use to creates a subscription to S1 Bearer notifications based on\
+ \ the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/S1BearerSubscription_1"
+ x-exportParamName: "S1BearerSubscription"
+ Body.MeasTaSubscriptionPost:
+ in: "body"
+ name: "MeasTaSubscriptionPost"
+ description: "Use to creates a subscription to UE Timing Advance notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/MeasTaSubscriptionPost_1"
+ x-exportParamName: "MeasTaSubscriptionPost"
+ Body.MeasTaSubscription:
+ in: "body"
+ name: "MeasTaSubscription"
+ description: "Use to creates a subscription to UE Timing Advance notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/MeasTaSubscription_1"
+ x-exportParamName: "MeasTaSubscription"
+ Body.MeasRepUeSubscriptionPost:
+ in: "body"
+ name: "MeasRepUeSubscriptionPost"
+ description: "Use to creates a subscription to UE measurement report notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/MeasRepUeSubscriptionPost_1"
+ x-exportParamName: "MeasRepUeSubscriptionPost"
+ Body.MeasRepUeSubscription:
+ in: "body"
+ name: "MeasRepUeSubscription"
+ description: "Use to creates a subscription to UE measurement report notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/MeasRepUeSubscription_1"
+ x-exportParamName: "MeasRepUeSubscription"
+ Body.RabEstSubscriptionPost:
+ in: "body"
+ name: "RabEstSubscriptionPost"
+ description: "Use to creates a subscription to RAB establishment notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/RabEstSubscriptionPost_1"
+ x-exportParamName: "RabEstSubscriptionPost"
+ Body.RabEstSubscription:
+ in: "body"
+ name: "RabEstSubscription"
+ description: "Use to creates a subscription to RAB establishment notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/RabEstSubscription_1"
+ x-exportParamName: "RabEstSubscription"
+ Body.RabModSubscriptionPost:
+ in: "body"
+ name: "RabModSubscriptionPost"
+ description: "Use to creates a subscription to RAB Modification notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/RabModSubscriptionPost_1"
+ x-exportParamName: "RabModSubscriptionPost"
+ Body.RabModSubscription:
+ in: "body"
+ name: "RabModSubscription"
+ description: "Use to creates a subscription to RAB Modification notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/RabModSubscription_1"
+ x-exportParamName: "RabModSubscription"
+ Body.RabRelSubscriptionPost:
+ in: "body"
+ name: "RabRelSubscriptionPost"
+ description: "Use to creates a subscription to RAB Release notifications based\
+ \ on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/RabRelSubscriptionPost_1"
+ x-exportParamName: "RabRelSubscriptionPost"
+ Body.RabRelSubscription:
+ in: "body"
+ name: "RabRelSubscription"
+ description: "Use to creates a subscription to RAB Release notifications based\
+ \ on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/RabRelSubscription_1"
+ x-exportParamName: "RabRelSubscription"
+ Body.CaReConfSubscriptionPost:
+ in: "body"
+ name: "CaReConfSubscriptionPost"
+ description: "Use to creates a subscription to Carrier Aggregation Reconfiguration\
+ \ notifications based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/CaReConfSubscriptionPost_1"
+ x-exportParamName: "CaReConfSubscriptionPost"
+ Body.CaReConfSubscription:
+ in: "body"
+ name: "CaReConfSubscription"
+ description: "Use to creates a subscription to Carrier Aggregation Reconfiguration\
+ \ notifications based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/CaReConfSubscription_1"
+ x-exportParamName: "CaReConfSubscription"
+ Path.subscrId:
+ name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ Query.AppInsId:
+ name: "app_ins_id"
+ in: "query"
+ description: "Application instance identifier"
+ required: false
+ type: "string"
+ x-exportParamName: "AppInsId"
+ x-optionalDataType: "String"
+ Query.AppInsIdArr:
+ name: "app_ins_id"
+ in: "query"
+ description: "Application instance identifier"
+ required: true
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "AppInsId"
+ Query.UeIpv4Address:
+ name: "ue_ipv4_address"
+ in: "query"
+ description: "Comma separated list of IE IPv4 addresses as defined for the type\
+ \ for AssociateId"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "UeIpv4Address"
+ Query.UeIpv6Address:
+ name: "ue_ipv6_address"
+ in: "query"
+ description: "Comma separated list of IE IPv6 addresses as defined for the type\
+ \ for AssociateId"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "UeIpv6Address"
+ Query.NatedIpAddress:
+ name: "nated_ip_address"
+ in: "query"
+ description: "Comma separated list of IE NATed IP addresses as defined for the\
+ \ type for AssociateId"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "NatedIpAddress"
+ Query.GtpTeId:
+ name: "gtp_teid"
+ in: "query"
+ description: "Comma separated list of GTP TEID addresses as defined for the type\
+ \ for AssociateId"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "GtpTeid"
+ Query.CellId:
+ name: "cell_id"
+ in: "query"
+ description: "E-UTRAN Cell Identity as a bit string (size (28)), as defined in\
+ \ ETSI TS 136 413"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "CellId"
+ Query.ErabGbrDl:
+ name: "erab_gbr_dl"
+ in: "query"
+ description: "Guaranteed downlink E-RAB Bit Rate as defined in ETSI TS 123 401"
+ required: false
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "ErabGbrDl"
+ x-optionalDataType: "Int32"
+ Query.ErabGbrUl:
+ name: "erab_gbr_ul"
+ in: "query"
+ description: "Guaranteed uplink E-RAB Bit Rate as defined in ETSI TS 123 401"
+ required: false
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "ErabGbrUl"
+ x-optionalDataType: "Int32"
+ Query.ErabId:
+ name: "erab_id"
+ in: "query"
+ description: "E-RAB identifier"
+ required: false
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "ErabId"
+ x-optionalDataType: "Int32"
+ Query.ErabIdArr:
+ name: "erab_id"
+ in: "query"
+ description: "E-RAB identifier"
+ required: false
+ type: "array"
+ items:
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "ErabId"
+ Query.ErabMbrDl:
+ name: "erab_mbr_dl"
+ in: "query"
+ description: "Maximum downlink E-RAB Bit Rate as defined in ETSI TS 123 401"
+ required: false
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "ErabMbrDl"
+ x-optionalDataType: "Int32"
+ Query.ErabMbrUl:
+ name: "erab_mbr_ul"
+ in: "query"
+ description: "Maximum uplink E-RAB Bit Rate as defined in ETSI TS 123 401"
+ required: false
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "ErabMbrUl"
+ x-optionalDataType: "Int32"
+ Query.Qci:
+ name: "qci"
+ in: "query"
+ description: "QoS Class Identifier as defined in ETSI TS 123 401"
+ required: false
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "Qci"
+ x-optionalDataType: "Int32"
+ Query.TempUeId:
+ name: "temp_ue_id"
+ in: "query"
+ description: "The temporary identifier allocated for the specific UE as defined\
+ \ in ETSI TS 136 413"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "TempUeId"
+externalDocs:
+ description: "ETSI MEC012 V1.1.1 Radio Network Information Service API"
+ url: "http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf"
diff --git a/go-apps/meep-rnis/go.mod b/go-apps/meep-rnis/go.mod
new file mode 100644
index 0000000000000000000000000000000000000000..9c118351ead85827ac930e33dfce0a774bdfb0cc
--- /dev/null
+++ b/go-apps/meep-rnis/go.mod
@@ -0,0 +1,37 @@
+module github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-rnis
+
+go 1.12
+
+require (
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-http-logger 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-mq v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-postgis v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-rnis-client v0.0.0 // indirect
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-rnis-notification-client v0.0.0
+ github.com/antihax/optional v1.0.0 // indirect
+ github.com/gorilla/handlers v1.4.0
+ github.com/gorilla/mux v1.7.3
+ golang.org/x/sys v0.0.0-20190412213103-97732733099d // indirect
+ gopkg.in/yaml.v2 v2.2.2 // indirect
+)
+
+replace (
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr => ../../go-packages/meep-data-key-mgr
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model => ../../go-packages/meep-data-model
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-http-logger => ../../go-packages/meep-http-logger
+ 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-mq => ../../go-packages/meep-mq
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-postgis => ../../go-packages/meep-postgis
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis => ../../go-packages/meep-redis
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-rnis-client => ../../go-packages/meep-rnis-client
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-rnis-notification-client => ../../go-packages/meep-rnis-notification-client
+
+)
diff --git a/go-apps/meep-rnis/go.sum b/go-apps/meep-rnis/go.sum
new file mode 100644
index 0000000000000000000000000000000000000000..89a4e0cf641e8ed0f3f5e5a45e84d2cec2084a25
--- /dev/null
+++ b/go-apps/meep-rnis/go.sum
@@ -0,0 +1,60 @@
+cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db/go.mod h1:RU+6d0CNIRSp6yo1mXLIIrnFa/3LHhvcDVLVJyovptM=
+github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351 h1:1u1XrfCBnY+GijnyU6O1k4odp5TnqZQTsp5v7+n/E4Y=
+github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351/go.mod h1:HxwfbuElTuGf+/uKZfjJrCnv0BmmpkPJDI7gBwj1KkM=
+github.com/RyanCarrier/dijkstra v0.0.0-20190726134004-b51cadb5ae52 h1:trnwuu/Q8T59kgRjXcSDBODnyZP9wes+bnLn0lx4PgM=
+github.com/RyanCarrier/dijkstra v0.0.0-20190726134004-b51cadb5ae52/go.mod h1:DdR6ymcLl8+sN/XOVNjnYO1NDYfgHskGjreZUDuQCTY=
+github.com/RyanCarrier/dijkstra-1 v0.0.0-20170512020943-0e5801a26345/go.mod h1:OK4EvWJ441LQqGzed5NGB6vKBAE34n3z7iayPcEwr30=
+github.com/albertorestifo/dijkstra v0.0.0-20160910063646-aba76f725f72/go.mod h1:o+JdB7VetTHjLhU0N57x18B9voDBQe0paApdEAEoEfw=
+github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
+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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/go-redis/redis v6.15.2+incompatible h1:9SpNVG76gr6InJGxoZ6IuuxaCOQwDAhzyXg+Bs+0Sb4=
+github.com/go-redis/redis v6.15.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
+github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/gorilla/handlers v1.4.0 h1:XulKRWSQK5uChr4pEgSE4Tc/OcmnU9GJuSwdog/tZsA=
+github.com/gorilla/handlers v1.4.0/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
+github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw=
+github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+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/lib/pq v1.5.2 h1:yTSXVswvWUOQ3k1sd7vJfDrbSl8lKuscqFJRqjC0ifw=
+github.com/lib/pq v1.5.2/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
+github.com/mattomatic/dijkstra v0.0.0-20130617153013-6f6d134eb237/go.mod h1:UOnLAUmVG5paym8pD3C4B9BQylUDC2vXFJJpT7JrlEA=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k=
+github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
+github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a h1:tImsplftrFpALCYumobsd0K86vlAs/eXGFms2txfJfA=
+golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/go-apps/meep-rnis/main.go b/go-apps/meep-rnis/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..3b33e5f388d85c93206cb2a811f6af253f7e946b
--- /dev/null
+++ b/go-apps/meep-rnis/main.go
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package main
+
+import (
+ "net/http"
+ "os"
+ "os/signal"
+ "syscall"
+ "time"
+
+ server "github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-rnis/server"
+ log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
+
+ "github.com/gorilla/handlers"
+)
+
+func init() {
+ // Log as JSON instead of the default ASCII formatter.
+ log.MeepJSONLogInit("meep-rnis")
+}
+
+func main() {
+ log.Info(os.Args)
+
+ log.Info("Starting RNI Service")
+
+ run := true
+ go func() {
+ sigchan := make(chan os.Signal, 10)
+ signal.Notify(sigchan, syscall.SIGINT, syscall.SIGTERM)
+ <-sigchan
+ log.Info("Program killed !")
+ // do last actions and wait for all write operations to end
+ run = false
+ }()
+
+ go func() {
+ // Initialize RNIS
+ err := server.Init()
+ if err != nil {
+ log.Error("Failed to initialize RNI Service")
+ run = false
+ return
+ }
+
+ // Start RNIS Event Handler thread
+ err = server.Run()
+ if err != nil {
+ log.Error("Failed to start RNI Service")
+ run = false
+ return
+ }
+
+ // Start RNIS REST API Server
+ router := server.NewRouter()
+ methods := handlers.AllowedMethods([]string{"OPTIONS", "DELETE", "GET", "HEAD", "POST", "PUT"})
+ header := handlers.AllowedHeaders([]string{"content-type"})
+ log.Fatal(http.ListenAndServe(":80", handlers.CORS(methods, header)(router)))
+ run = false
+ }()
+
+ count := 0
+ for {
+ if !run {
+ log.Info("Ran for ", count, " seconds")
+ break
+ }
+ time.Sleep(time.Second)
+ count++
+ }
+
+}
diff --git a/go-apps/meep-rnis/sbi/rnis-sbi.go b/go-apps/meep-rnis/sbi/rnis-sbi.go
new file mode 100755
index 0000000000000000000000000000000000000000..14d75b6db60302b402861fc699cab495f7c72238
--- /dev/null
+++ b/go-apps/meep-rnis/sbi/rnis-sbi.go
@@ -0,0 +1,280 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package sbi
+
+import (
+ dataModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model"
+ log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
+ mod "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model"
+ mq "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq"
+ postgis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-postgis"
+)
+
+const moduleName string = "meep-rnis-sbi"
+const geModuleName string = "meep-gis-engine"
+const postgisUser string = "postgres"
+const postgisPwd string = "pwd"
+
+type SbiCfg struct {
+ SandboxName string
+ RedisAddr string
+ PostgisHost string
+ PostgisPort string
+ UeEcgiInfoCb func(string, string, string, string)
+ AppEcgiInfoCb func(string, string, string, string)
+ ScenarioNameCb func(string)
+ CleanUpCb func()
+}
+
+type RnisSbi struct {
+ sandboxName string
+ mqLocal *mq.MsgQueue
+ handlerId int
+ activeModel *mod.Model
+ pc *postgis.Connector
+ updateUeEcgiInfoCB func(string, string, string, string)
+ updateAppEcgiInfoCB func(string, string, string, string)
+ updateScenarioNameCB func(string)
+ cleanUpCB func()
+}
+
+var sbi *RnisSbi
+
+// Init - RNI Service SBI initialization
+func Init(cfg SbiCfg) (err error) {
+
+ // Create new SBI instance
+ if sbi != nil {
+ sbi = nil
+ }
+ sbi = new(RnisSbi)
+ sbi.sandboxName = cfg.SandboxName
+ sbi.updateUeEcgiInfoCB = cfg.UeEcgiInfoCb
+ sbi.updateAppEcgiInfoCB = cfg.AppEcgiInfoCb
+ sbi.updateScenarioNameCB = cfg.ScenarioNameCb
+ sbi.cleanUpCB = cfg.CleanUpCb
+
+ // Create message queue
+ sbi.mqLocal, err = mq.NewMsgQueue(mq.GetLocalName(sbi.sandboxName), moduleName, sbi.sandboxName, cfg.RedisAddr)
+ if err != nil {
+ log.Error("Failed to create Message Queue with error: ", err)
+ return err
+ }
+ log.Info("Message Queue created")
+
+ // Create new active scenario model
+ modelCfg := mod.ModelCfg{
+ Name: "activeScenario",
+ Namespace: sbi.sandboxName,
+ Module: moduleName,
+ UpdateCb: nil,
+ DbAddr: cfg.RedisAddr,
+ }
+ sbi.activeModel, err = mod.NewModel(modelCfg)
+ if err != nil {
+ log.Error("Failed to create model: ", err.Error())
+ return err
+ }
+
+ // Connect to Postgis DB
+ sbi.pc, err = postgis.NewConnector(geModuleName, sbi.sandboxName, postgisUser, postgisPwd, cfg.PostgisHost, cfg.PostgisPort)
+ if err != nil {
+ log.Error("Failed to create postgis connector with error: ", err.Error())
+ return err
+ }
+ log.Info("Postgis Connector created")
+
+ // Initialize service
+ processActiveScenarioUpdate()
+
+ return nil
+}
+
+// Run - MEEP RNIS execution
+func Run() (err error) {
+
+ // Register Message Queue handler
+ handler := mq.MsgHandler{Handler: msgHandler, UserData: nil}
+ sbi.handlerId, err = sbi.mqLocal.RegisterHandler(handler)
+ if err != nil {
+ log.Error("Failed to register message queue handler: ", err.Error())
+ return err
+ }
+
+ return nil
+}
+
+func Stop() (err error) {
+ sbi.mqLocal.UnregisterHandler(sbi.handlerId)
+ return nil
+}
+
+// Message Queue handler
+func msgHandler(msg *mq.Msg, userData interface{}) {
+ switch msg.Message {
+ case mq.MsgScenarioActivate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ processActiveScenarioUpdate()
+ case mq.MsgScenarioUpdate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ processActiveScenarioUpdate()
+ case mq.MsgScenarioTerminate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ processActiveScenarioTerminate()
+ case mq.MsgGeUpdate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ processGisEngineUpdate(msg.Payload)
+ default:
+ log.Trace("Ignoring unsupported message: ", mq.PrintMsg(msg))
+ }
+}
+
+func processActiveScenarioTerminate() {
+ log.Debug("processActiveScenarioTerminate")
+
+ // Sync with active scenario store
+ sbi.activeModel.UpdateScenario()
+
+ sbi.cleanUpCB()
+}
+
+func processActiveScenarioUpdate() {
+
+ log.Debug("processActiveScenarioUpdate")
+
+ formerUeNameList := sbi.activeModel.GetNodeNames("UE")
+
+ sbi.activeModel.UpdateScenario()
+
+ scenarioName := sbi.activeModel.GetScenarioName()
+ sbi.updateScenarioNameCB(scenarioName)
+
+ // Update UE info
+ ueNameList := sbi.activeModel.GetNodeNames("UE")
+ for _, name := range ueNameList {
+
+ ueParent := sbi.activeModel.GetNodeParent(name)
+ if poa, ok := ueParent.(*dataModel.NetworkLocation); ok {
+ poaParent := sbi.activeModel.GetNodeParent(poa.Name)
+ if zone, ok := poaParent.(*dataModel.Zone); ok {
+ zoneParent := sbi.activeModel.GetNodeParent(zone.Name)
+ if domain, ok := zoneParent.(*dataModel.Domain); ok {
+ mnc := ""
+ mcc := ""
+ cellId := ""
+ if domain.CellularDomainConfig != nil {
+ mnc = domain.CellularDomainConfig.Mnc
+ mcc = domain.CellularDomainConfig.Mcc
+ }
+ if poa.CellularPoaConfig != nil {
+ if poa.CellularPoaConfig.CellId != "" {
+ cellId = poa.CellularPoaConfig.CellId
+ } else {
+ cellId = domain.CellularDomainConfig.DefaultCellId
+ }
+ } else {
+ if domain.CellularDomainConfig != nil {
+ cellId = domain.CellularDomainConfig.DefaultCellId
+ }
+ }
+ sbi.updateUeEcgiInfoCB(name, mnc, mcc, cellId)
+ }
+ }
+ }
+ }
+
+ //only find UEs that were removed, check that former UEs are in new UE list
+ for _, oldUe := range formerUeNameList {
+ found := false
+ for _, newUe := range ueNameList {
+ if newUe == oldUe {
+ found = true
+ break
+ }
+ }
+ if !found {
+ sbi.updateUeEcgiInfoCB(oldUe, "", "", "")
+ log.Info("Ue removed : ", oldUe)
+ }
+ }
+
+ // Update Edge App info
+ meAppNameList := sbi.activeModel.GetNodeNames("EDGE-APP")
+ ueAppNameList := sbi.activeModel.GetNodeNames("UE-APP")
+ var appNameList []string
+ appNameList = append(appNameList, meAppNameList...)
+ appNameList = append(appNameList, ueAppNameList...)
+
+ for _, meAppName := range appNameList {
+ meAppParent := sbi.activeModel.GetNodeParent(meAppName)
+ if pl, ok := meAppParent.(*dataModel.PhysicalLocation); ok {
+ plParent := sbi.activeModel.GetNodeParent(pl.Name)
+ if nl, ok := plParent.(*dataModel.NetworkLocation); ok {
+ //nl can be either POA for {FOG or UE} or Zone Default for {Edge
+ nlParent := sbi.activeModel.GetNodeParent(nl.Name)
+ if zone, ok := nlParent.(*dataModel.Zone); ok {
+ zoneParent := sbi.activeModel.GetNodeParent(zone.Name)
+ if domain, ok := zoneParent.(*dataModel.Domain); ok {
+ mnc := ""
+ mcc := ""
+ cellId := ""
+ if domain.CellularDomainConfig != nil {
+ mnc = domain.CellularDomainConfig.Mnc
+ mcc = domain.CellularDomainConfig.Mcc
+ }
+ if nl.CellularPoaConfig != nil {
+ if nl.CellularPoaConfig.CellId != "" {
+ cellId = nl.CellularPoaConfig.CellId
+ } else {
+ cellId = domain.CellularDomainConfig.DefaultCellId
+ }
+ } else {
+ if domain.CellularDomainConfig != nil {
+ cellId = domain.CellularDomainConfig.DefaultCellId
+ }
+ }
+
+ sbi.updateAppEcgiInfoCB(meAppName, mnc, mcc, cellId)
+ }
+ }
+ }
+ }
+ }
+}
+
+func processGisEngineUpdate(assetMap map[string]string) {
+ for assetName, assetType := range assetMap {
+ // Only process UE updates
+ // NOTE: RNIS requires distance measurements to calculate Timing Advance. Because timing advance
+ // is not yet implemented, the distance measurements are simply logged here for now.
+ if assetType == postgis.TypeUe {
+ if assetName == postgis.AllAssets {
+ ueMap, err := sbi.pc.GetAllUe()
+ if err == nil {
+ for _, ue := range ueMap {
+ log.Trace("UE[", ue.Name, "] POA [", ue.Poa, "] distance[", ue.PoaDistance, "]")
+ }
+ }
+ } else {
+ ue, err := sbi.pc.GetUe(assetName)
+ if err == nil {
+ log.Trace("UE[", ue.Name, "] POA [", ue.Poa, "] distance[", ue.PoaDistance, "]")
+ }
+ }
+ }
+ }
+}
diff --git a/go-apps/meep-rnis/server/README.md b/go-apps/meep-rnis/server/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..cd282e279c2e8df5bc0bbceda4adf0502ed91340
--- /dev/null
+++ b/go-apps/meep-rnis/server/README.md
@@ -0,0 +1,25 @@
+# Go API Server for server
+
+Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+
+## Overview
+This server was generated by the [swagger-codegen]
+(https://github.com/swagger-api/swagger-codegen) project.
+By using the [OpenAPI-Spec](https://github.com/OAI/OpenAPI-Specification) from a remote server, you can easily generate a server stub.
+-
+
+To see how to make this your own, look here:
+
+[README](https://github.com/swagger-api/swagger-codegen/blob/master/README.md)
+
+- API version: 1.1.1
+- Build date: 2020-06-28T22:53:41.074-04:00
+
+
+### Running the server
+To run the server, follow these simple steps:
+
+```
+go run main.go
+```
+
diff --git a/go-apps/meep-rnis/server/api_default.go b/go-apps/meep-rnis/server/api_default.go
new file mode 100644
index 0000000000000000000000000000000000000000..04de5b7b699927f86fba7d8acf5a9df1cc7ca70f
--- /dev/null
+++ b/go-apps/meep-rnis/server/api_default.go
@@ -0,0 +1,204 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+import (
+ "net/http"
+)
+
+func CaReConfSubscriptionSubscriptionsGET(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func CaReConfSubscriptionSubscriptionsPOST(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func CaReConfSubscriptionSubscriptionsPUT(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func CaReConfSubscriptionsSubscrIdDELETE(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func CellChangeSubscriptionsGET(w http.ResponseWriter, r *http.Request) {
+ cellChangeSubscriptionsGET(w, r)
+}
+
+func CellChangeSubscriptionsPOST(w http.ResponseWriter, r *http.Request) {
+ cellChangeSubscriptionsPOST(w, r)
+}
+
+func CellChangeSubscriptionsPUT(w http.ResponseWriter, r *http.Request) {
+ cellChangeSubscriptionsPUT(w, r)
+}
+
+func CellChangeSubscriptionsSubscrIdDELETE(w http.ResponseWriter, r *http.Request) {
+ cellChangeSubscriptionsDELETE(w, r)
+}
+
+func MeasRepUeReportSubscriptionsPUT(w http.ResponseWriter, r *http.Request) {
+ measRepUeReportSubscriptionsPUT(w, r)
+}
+
+func MeasRepUeSubscriptionsGET(w http.ResponseWriter, r *http.Request) {
+ measRepUeReportSubscriptionsGET(w, r)
+}
+
+func MeasRepUeSubscriptionsPOST(w http.ResponseWriter, r *http.Request) {
+ measRepUeReportSubscriptionsPOST(w, r)
+}
+
+func MeasRepUeSubscriptionsSubscrIdDELETE(w http.ResponseWriter, r *http.Request) {
+ measRepUeReportSubscriptionsDELETE(w, r)
+}
+
+func MeasTaSubscriptionsGET(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func MeasTaSubscriptionsPOST(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func MeasTaSubscriptionsPUT(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func MeasTaSubscriptionsSubscrIdDELETE(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func PlmnInfoGET(w http.ResponseWriter, r *http.Request) {
+ plmnInfoGET(w, r)
+}
+
+func RabEstSubscriptionSubscriptionsGET(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func RabEstSubscriptionSubscriptionsPOST(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func RabEstSubscriptionSubscriptionsPUT(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func RabEstSubscriptionsSubscrIdDELETE(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func RabInfoGET(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func RabModSubscriptionSubscriptionsGET(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func RabModSubscriptionSubscriptionsPOST(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func RabModSubscriptionSubscriptionsPUT(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func RabModSubscriptionsSubscrIdDELETE(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func RabRelSubscriptionSubscriptionsGET(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func RabRelSubscriptionSubscriptionsPOST(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func RabRelSubscriptionSubscriptionsPUT(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func RabRelSubscriptionsSubscrIdDELETE(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func S1BearerInfoGET(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func S1BearerSubscriptionSubscriptionsGET(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func S1BearerSubscriptionSubscriptionsPOST(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func S1BearerSubscriptionSubscriptionsPUT(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func S1BearerSubscriptionsSubscrIdDELETE(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func SubscriptionLinkListSubscriptionsCcGET(w http.ResponseWriter, r *http.Request) {
+ subscriptionLinkListSubscriptionsCcGET(w, r)
+}
+
+func SubscriptionLinkListSubscriptionsCrGET(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func SubscriptionLinkListSubscriptionsGET(w http.ResponseWriter, r *http.Request) {
+ subscriptionLinkListSubscriptionsGET(w, r)
+}
+
+func SubscriptionLinkListSubscriptionsMrGET(w http.ResponseWriter, r *http.Request) {
+ subscriptionLinkListSubscriptionsMrGET(w, r)
+}
+
+func SubscriptionLinkListSubscriptionsReGET(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func SubscriptionLinkListSubscriptionsRmGET(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func SubscriptionLinkListSubscriptionsRrGET(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func SubscriptionLinkListSubscriptionsS1GET(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func SubscriptionLinkListSubscriptionsTaGET(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
diff --git a/go-apps/meep-rnis/server/convert.go b/go-apps/meep-rnis/server/convert.go
new file mode 100755
index 0000000000000000000000000000000000000000..26680a20849b21e9b2654c92f8b86eb2d77a41be
--- /dev/null
+++ b/go-apps/meep-rnis/server/convert.go
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package server
+
+import (
+ "encoding/json"
+
+ log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
+)
+
+func convertJsonToEcgi(jsonInfo string) *Ecgi {
+
+ var obj Ecgi
+ err := json.Unmarshal([]byte(jsonInfo), &obj)
+ if err != nil {
+ log.Error(err.Error())
+ return nil
+ }
+ return &obj
+}
+
+func convertEcgiToJson(obj *Ecgi) string {
+
+ jsonInfo, err := json.Marshal(*obj)
+ if err != nil {
+ log.Error(err.Error())
+ return ""
+ }
+
+ return string(jsonInfo)
+}
+
+func convertJsonToCellChangeSubscription(jsonInfo string) *CellChangeSubscription {
+
+ var obj CellChangeSubscription
+ err := json.Unmarshal([]byte(jsonInfo), &obj)
+ if err != nil {
+ log.Error(err.Error())
+ return nil
+ }
+ return &obj
+}
+
+func convertCellChangeSubscriptionToJson(obj *CellChangeSubscription) string {
+
+ jsonInfo, err := json.Marshal(*obj)
+ if err != nil {
+ log.Error(err.Error())
+ return ""
+ }
+
+ return string(jsonInfo)
+}
diff --git a/go-apps/meep-rnis/server/logger.go b/go-apps/meep-rnis/server/logger.go
new file mode 100644
index 0000000000000000000000000000000000000000..79fc60bd46ddae224fe20640913f6a3cef4fe761
--- /dev/null
+++ b/go-apps/meep-rnis/server/logger.go
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2019 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+import (
+ "net/http"
+ "time"
+
+ log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
+)
+
+func Logger(inner http.Handler, name string) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ start := time.Now()
+
+ inner.ServeHTTP(w, r)
+
+ log.Debug(
+ r.Method, " ",
+ r.RequestURI, " ",
+ name, " ",
+ time.Since(start),
+ )
+ })
+}
diff --git a/go-apps/meep-rnis/server/model_associate_id.go b/go-apps/meep-rnis/server/model_associate_id.go
new file mode 100644
index 0000000000000000000000000000000000000000..5a4cbb3aa83d3fdab528e185c09909c79753baa5
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_associate_id.go
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type AssociateId struct {
+
+ // Numeric value (0-255) corresponding to specified type of identifier
+ Type_ string `json:"type"`
+
+ // Value for the identifier
+ Value string `json:"value"`
+}
diff --git a/go-apps/meep-rnis/server/model_ca_re_conf_subscription.go b/go-apps/meep-rnis/server/model_ca_re_conf_subscription.go
new file mode 100644
index 0000000000000000000000000000000000000000..b39faabea0e23bf324d8c1a5624d9276effdd33a
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_ca_re_conf_subscription.go
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type CaReConfSubscription struct {
+
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+
+ Links *Link `json:"_links"`
+
+ FilterCriteria *FilterCriteriaAssoc `json:"filterCriteria"`
+
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_ca_re_conf_subscription_1.go b/go-apps/meep-rnis/server/model_ca_re_conf_subscription_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..206fca3a2a9a2b6834f05325462ae92c68f5845f
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_ca_re_conf_subscription_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type CaReConfSubscription1 struct {
+ CaReConfSubscription *CaReConfSubscription `json:"CaReConfSubscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_ca_re_conf_subscription_post.go b/go-apps/meep-rnis/server/model_ca_re_conf_subscription_post.go
new file mode 100644
index 0000000000000000000000000000000000000000..6b1345872d5e8e80d018d81ab7adf93daefcdb89
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_ca_re_conf_subscription_post.go
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type CaReConfSubscriptionPost struct {
+
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+
+ FilterCriteria *FilterCriteriaAssoc `json:"filterCriteria"`
+
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_ca_re_conf_subscription_post_1.go b/go-apps/meep-rnis/server/model_ca_re_conf_subscription_post_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..b4ccdba325b2b8d60172a471d60a88ee434e656f
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_ca_re_conf_subscription_post_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type CaReConfSubscriptionPost1 struct {
+ CaReConfSubscription *CaReConfSubscriptionPost `json:"CaReConfSubscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_cell_change_subscription.go b/go-apps/meep-rnis/server/model_cell_change_subscription.go
new file mode 100644
index 0000000000000000000000000000000000000000..917c68eaa2a07b078cd642bac90fdeb269790924
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_cell_change_subscription.go
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type CellChangeSubscription struct {
+
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+
+ Links *Link `json:"_links"`
+
+ FilterCriteria *FilterCriteriaAssocHo `json:"filterCriteria"`
+
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_cell_change_subscription_1.go b/go-apps/meep-rnis/server/model_cell_change_subscription_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..93d81f8838da6d5ddb39b5335bc058f627111fa8
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_cell_change_subscription_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type CellChangeSubscription1 struct {
+ CellChangeSubscription *CellChangeSubscription `json:"CellChangeSubscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_cell_change_subscription_post.go b/go-apps/meep-rnis/server/model_cell_change_subscription_post.go
new file mode 100644
index 0000000000000000000000000000000000000000..ef32f258b84ffe306a18b13972dd702fea660219
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_cell_change_subscription_post.go
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type CellChangeSubscriptionPost struct {
+
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+
+ FilterCriteria *FilterCriteriaAssocHo `json:"filterCriteria"`
+
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_cell_change_subscription_post_1.go b/go-apps/meep-rnis/server/model_cell_change_subscription_post_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..95a570641ee0668f6537bbabd3d6725830c86dcb
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_cell_change_subscription_post_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type CellChangeSubscriptionPost1 struct {
+ CellChangeSubscription *CellChangeSubscriptionPost `json:"CellChangeSubscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_cell_user_info.go b/go-apps/meep-rnis/server/model_cell_user_info.go
new file mode 100644
index 0000000000000000000000000000000000000000..9f66fbd3ea2c18b01fa0417f6f9da60886ff41e2
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_cell_user_info.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// The information on users per cell.
+type CellUserInfo struct {
+ Ecgi *Ecgi `json:"ecgi"`
+
+ UeInfo []UeInfo `json:"ueInfo"`
+}
diff --git a/go-apps/meep-rnis/server/model_ecgi.go b/go-apps/meep-rnis/server/model_ecgi.go
new file mode 100644
index 0000000000000000000000000000000000000000..81de4084c6afaf21ecf801669a05e650a26f748f
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_ecgi.go
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// E-UTRAN CelI Global Identifier as defined in 3GPP TS 36.413
+type Ecgi struct {
+ Plmn *Plmn `json:"plmn"`
+
+ // The E-UTRAN Cell Identity as a bit string (size (28)), as defined in 3GPP TS 36.413
+ CellId []string `json:"cellId"`
+}
diff --git a/go-apps/meep-rnis/server/model_erab_qos_parameters.go b/go-apps/meep-rnis/server/model_erab_qos_parameters.go
new file mode 100644
index 0000000000000000000000000000000000000000..840fdd66e6a5970b7db66bafaf3f4d1c930edc19
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_erab_qos_parameters.go
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type ErabQosParameters struct {
+
+ // QoS Class Identifier as defined in TS 23.401
+ Qci int32 `json:"qci,omitempty"`
+
+ QosInformation *QosInformation `json:"qos_information,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_erab_qos_parameters_qci.go b/go-apps/meep-rnis/server/model_erab_qos_parameters_qci.go
new file mode 100644
index 0000000000000000000000000000000000000000..45518eacb7f634bbb78e382d091b277b449990a6
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_erab_qos_parameters_qci.go
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// QoS Class Identifier as defined in TS 23.401
+type ErabQosParametersQci struct {
+ QosInformation *QosInformation `json:"qosInformation,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_event_type.go b/go-apps/meep-rnis/server/model_event_type.go
new file mode 100644
index 0000000000000000000000000000000000000000..669d3c17e726135606f7a55f4b1bc9907011684f
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_event_type.go
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// EventType : Description of the subscribed event.
+type EventType string
+
+// List of EventType
+const (
+ RESERVED_EVENT_TYPE EventType = "RESERVED_EVENT_TYPE"
+ S1_BEARER_ESTABLISH EventType = "S1_BEARER_ESTABLISH"
+ S1_BEARER_MODIFY EventType = "S1_BEARER_MODIFY"
+ S1_BEARER_RELEASE EventType = "S1_BEARER_RELEASE"
+)
diff --git a/go-apps/meep-rnis/server/model_filter_criteria_assoc.go b/go-apps/meep-rnis/server/model_filter_criteria_assoc.go
new file mode 100644
index 0000000000000000000000000000000000000000..18483db6c90db6fbdc1970ce5eeb5a09a79fcd66
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_filter_criteria_assoc.go
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// List of filtering criteria for the subscription.
+type FilterCriteriaAssoc struct {
+
+ // Unique identifier for the mobile edge application instance
+ AppInsId string `json:"appInsId,omitempty"`
+
+ AssociateId *AssociateId `json:"associateId,omitempty"`
+
+ Plmn *Plmn `json:"plmn,omitempty"`
+
+ // The E-UTRAN Cell Identity as a bit string (size (28)), as defined in 3GPP TS 36.413
+ CellId []string `json:"cellId,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_filter_criteria_assoc_ho.go b/go-apps/meep-rnis/server/model_filter_criteria_assoc_ho.go
new file mode 100644
index 0000000000000000000000000000000000000000..e38c643df221fef96b2f97b8ff8bd05573cc8d95
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_filter_criteria_assoc_ho.go
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// List of filtering criteria for the subscription.
+type FilterCriteriaAssocHo struct {
+
+ // Unique identifier for the mobile edge application instance
+ AppInsId string `json:"appInsId,omitempty"`
+
+ AssociateId *AssociateId `json:"associateId,omitempty"`
+
+ Plmn *Plmn `json:"plmn,omitempty"`
+
+ // The E-UTRAN Cell Identity as a bit string (size (28)), as defined in 3GPP TS 36.413
+ CellId []string `json:"cellId,omitempty"`
+
+ HoStatus *HoStatus `json:"hoStatus,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_filter_criteria_assoc_qci.go b/go-apps/meep-rnis/server/model_filter_criteria_assoc_qci.go
new file mode 100644
index 0000000000000000000000000000000000000000..97c4fcb39f288b2ca46c3e693c7a3478d9efb679
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_filter_criteria_assoc_qci.go
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// List of filtering criteria for the subscription.
+type FilterCriteriaAssocQci struct {
+
+ // Unique identifier for the mobile edge application instance
+ AppInsId string `json:"appInsId,omitempty"`
+
+ AssociateId *AssociateId `json:"associateId,omitempty"`
+
+ Plmn *Plmn `json:"plmn,omitempty"`
+
+ // The E-UTRAN Cell Identity as a bit string (size (28)), as defined in 3GPP TS 36.413
+ CellId []string `json:"cellId,omitempty"`
+
+ // QoS Class Identifier as defined in TS 23.401
+ Qci int32 `json:"qci,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_filter_criteria_assoc_tri.go b/go-apps/meep-rnis/server/model_filter_criteria_assoc_tri.go
new file mode 100644
index 0000000000000000000000000000000000000000..8439346e1725878f760224fdfa3f188e94d979fb
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_filter_criteria_assoc_tri.go
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// List of filtering criteria for the subscription.
+type FilterCriteriaAssocTri struct {
+
+ // Unique identifier for the mobile edge application instance
+ AppInsId string `json:"appInsId,omitempty"`
+
+ AssociateId *AssociateId `json:"associateId,omitempty"`
+
+ Plmn *Plmn `json:"plmn,omitempty"`
+
+ // The E-UTRAN Cell Identity as a bit string (size (28)), as defined in 3GPP TS 36.413
+ CellId []string `json:"cellId,omitempty"`
+
+ Trigger *Trigger `json:"trigger,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_ho_status.go b/go-apps/meep-rnis/server/model_ho_status.go
new file mode 100644
index 0000000000000000000000000000000000000000..0bba0099ea34255d5133de690b6f147346c40e54
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_ho_status.go
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// HoStatus : Description of the subscribed to event
+type HoStatus string
+
+// List of HoStatus
+const (
+ RESERVED_HO_STATUS HoStatus = "RESERVED_HO_STATUS"
+ IN_PREPARATION HoStatus = "IN_PREPARATION"
+ IN_EXECUTION HoStatus = "IN_EXECUTION"
+ COMPLETED HoStatus = "COMPLETED"
+ REJECTED HoStatus = "REJECTED"
+ CANCELLED HoStatus = "CANCELLED"
+)
diff --git a/go-apps/meep-rnis/server/model_inline_response_200.go b/go-apps/meep-rnis/server/model_inline_response_200.go
new file mode 100644
index 0000000000000000000000000000000000000000..ce323f8ab380c6e168e66f7dab714470320a2a3d
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_inline_response_200.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type InlineResponse200 struct {
+ RabInfo *RabInfo `json:"RabInfo"`
+}
diff --git a/go-apps/meep-rnis/server/model_inline_response_200_1.go b/go-apps/meep-rnis/server/model_inline_response_200_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..e3fec27998287f199f5c43fc49d56a477df44816
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_inline_response_200_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type InlineResponse2001 struct {
+ PlmnInfo []PlmnInfo `json:"PlmnInfo,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_inline_response_200_10.go b/go-apps/meep-rnis/server/model_inline_response_200_10.go
new file mode 100644
index 0000000000000000000000000000000000000000..484aeee4bab0f68cc075d3c251ec0059b3336758
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_inline_response_200_10.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type InlineResponse20010 struct {
+ CaReConfSubscription *CaReConfSubscription `json:"CaReConfSubscription"`
+}
diff --git a/go-apps/meep-rnis/server/model_inline_response_200_2.go b/go-apps/meep-rnis/server/model_inline_response_200_2.go
new file mode 100644
index 0000000000000000000000000000000000000000..95e90ca772494c0fda6536ac63838854212837de
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_inline_response_200_2.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type InlineResponse2002 struct {
+ S1BearerInfo *S1BearerInfo `json:"S1BearerInfo"`
+}
diff --git a/go-apps/meep-rnis/server/model_inline_response_200_3.go b/go-apps/meep-rnis/server/model_inline_response_200_3.go
new file mode 100644
index 0000000000000000000000000000000000000000..2b14e98f2ecaa5092ade621a102ed9ef3a12de64
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_inline_response_200_3.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type InlineResponse2003 struct {
+ SubscriptionLinkList *SubscriptionLinkList `json:"SubscriptionLinkList"`
+}
diff --git a/go-apps/meep-rnis/server/model_inline_response_200_4.go b/go-apps/meep-rnis/server/model_inline_response_200_4.go
new file mode 100644
index 0000000000000000000000000000000000000000..4104a086aaa02f19971814a8aa441f1bdea32de3
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_inline_response_200_4.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type InlineResponse2004 struct {
+ CellChangeSubscription *CellChangeSubscription `json:"CellChangeSubscription"`
+}
diff --git a/go-apps/meep-rnis/server/model_inline_response_200_5.go b/go-apps/meep-rnis/server/model_inline_response_200_5.go
new file mode 100644
index 0000000000000000000000000000000000000000..74e4f7b24da2609582672a5dccc4db26a15fca8d
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_inline_response_200_5.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type InlineResponse2005 struct {
+ MeasTaSubscription *MeasTaSubscription `json:"MeasTaSubscription"`
+}
diff --git a/go-apps/meep-rnis/server/model_inline_response_200_6.go b/go-apps/meep-rnis/server/model_inline_response_200_6.go
new file mode 100644
index 0000000000000000000000000000000000000000..5a93ecad8e990444293787bd85449ed6277c7088
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_inline_response_200_6.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type InlineResponse2006 struct {
+ MeasRepUeSubscription *MeasRepUeSubscription `json:"MeasRepUeSubscription"`
+}
diff --git a/go-apps/meep-rnis/server/model_inline_response_200_7.go b/go-apps/meep-rnis/server/model_inline_response_200_7.go
new file mode 100644
index 0000000000000000000000000000000000000000..155ad5f11a66d0ad1dcbcea4e5df18b7818a52c4
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_inline_response_200_7.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type InlineResponse2007 struct {
+ RabEstSubscription *RabEstSubscription `json:"RabEstSubscription"`
+}
diff --git a/go-apps/meep-rnis/server/model_inline_response_200_8.go b/go-apps/meep-rnis/server/model_inline_response_200_8.go
new file mode 100644
index 0000000000000000000000000000000000000000..145f4a0b3e4763aa8c09597c5e29218a45c18b07
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_inline_response_200_8.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type InlineResponse2008 struct {
+ RabModSubscription *RabModSubscription `json:"RabModSubscription"`
+}
diff --git a/go-apps/meep-rnis/server/model_inline_response_200_9.go b/go-apps/meep-rnis/server/model_inline_response_200_9.go
new file mode 100644
index 0000000000000000000000000000000000000000..fb07e179ae81445f19fbb9a3c4fee966d32b392f
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_inline_response_200_9.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type InlineResponse2009 struct {
+ RabRelSubscription *RabRelSubscription `json:"RabRelSubscription"`
+}
diff --git a/go-apps/meep-rnis/server/model_inline_response_201.go b/go-apps/meep-rnis/server/model_inline_response_201.go
new file mode 100644
index 0000000000000000000000000000000000000000..504fe4238c99978f9df3baa170c861e7e9f37c4e
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_inline_response_201.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type InlineResponse201 struct {
+ CellChangeSubscription *CellChangeSubscription `json:"CellChangeSubscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_inline_response_201_1.go b/go-apps/meep-rnis/server/model_inline_response_201_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..693e92e5eeba0cc1cb488e65f7db8f28ce33ac70
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_inline_response_201_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type InlineResponse2011 struct {
+ S1BearerSubscription *S1BearerSubscription `json:"S1BearerSubscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_inline_response_201_2.go b/go-apps/meep-rnis/server/model_inline_response_201_2.go
new file mode 100644
index 0000000000000000000000000000000000000000..a126c0cc3bd03ab712b49cc122ea763b9f328f21
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_inline_response_201_2.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type InlineResponse2012 struct {
+ MeasTaSubscription *MeasTaSubscription `json:"MeasTaSubscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_inline_response_201_3.go b/go-apps/meep-rnis/server/model_inline_response_201_3.go
new file mode 100644
index 0000000000000000000000000000000000000000..f7a77492a3f9dfcf1bad2623ad27195d0dd5bae8
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_inline_response_201_3.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type InlineResponse2013 struct {
+ MeasRepUeSubscription *MeasRepUeSubscription `json:"MeasRepUeSubscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_inline_response_201_4.go b/go-apps/meep-rnis/server/model_inline_response_201_4.go
new file mode 100644
index 0000000000000000000000000000000000000000..85488aa033baa1d692cfe06c7a0eddfa175af1b9
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_inline_response_201_4.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type InlineResponse2014 struct {
+ RabEstSubscription *RabEstSubscription `json:"RabEstSubscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_inline_response_201_5.go b/go-apps/meep-rnis/server/model_inline_response_201_5.go
new file mode 100644
index 0000000000000000000000000000000000000000..319d49e30b08876fd5fe57c1a258b1726d198a03
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_inline_response_201_5.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type InlineResponse2015 struct {
+ RabModSubscription *RabModSubscription `json:"RabModSubscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_inline_response_201_6.go b/go-apps/meep-rnis/server/model_inline_response_201_6.go
new file mode 100644
index 0000000000000000000000000000000000000000..8910fc2ddf12c9b5d897102ce5c01cb2262132f0
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_inline_response_201_6.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type InlineResponse2016 struct {
+ RabRelSubscription *RabRelSubscription `json:"RabRelSubscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_inline_response_201_7.go b/go-apps/meep-rnis/server/model_inline_response_201_7.go
new file mode 100644
index 0000000000000000000000000000000000000000..813359ccd23222ef21427ee2d12ab9573471530c
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_inline_response_201_7.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type InlineResponse2017 struct {
+ CaReConfSubscription *CaReConfSubscription `json:"CaReConfSubscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_inline_response_400.go b/go-apps/meep-rnis/server/model_inline_response_400.go
new file mode 100644
index 0000000000000000000000000000000000000000..ef58ba3f3c93ffda64dfb9808ad5fa57fc4d1cc3
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_inline_response_400.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type InlineResponse400 struct {
+ ProblemDetails *ProblemDetails `json:"ProblemDetails,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_inline_response_403.go b/go-apps/meep-rnis/server/model_inline_response_403.go
new file mode 100644
index 0000000000000000000000000000000000000000..daad0a038014344582d1a184ee7bfb01c3de09fc
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_inline_response_403.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type InlineResponse403 struct {
+ ProblemDetails *ProblemDetails `json:"ProblemDetails"`
+}
diff --git a/go-apps/meep-rnis/server/model_link.go b/go-apps/meep-rnis/server/model_link.go
new file mode 100644
index 0000000000000000000000000000000000000000..6aa99deb08722084f2d9dde482d62aff0c88c025
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_link.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// List of hyperlinks related to the resource
+type Link struct {
+
+ // URI referring to a resource
+ Self string `json:"self,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_meas_rep_ue_subscription.go b/go-apps/meep-rnis/server/model_meas_rep_ue_subscription.go
new file mode 100644
index 0000000000000000000000000000000000000000..0e1549f3436c1f088bd00cac27a8e3e52380d56c
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_meas_rep_ue_subscription.go
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type MeasRepUeSubscription struct {
+
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+
+ Links *Link `json:"_links"`
+
+ FilterCriteria *FilterCriteriaAssocTri `json:"filterCriteria"`
+
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_meas_rep_ue_subscription_1.go b/go-apps/meep-rnis/server/model_meas_rep_ue_subscription_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..044f7cb594e531af0c26fc7742aa45292d11051c
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_meas_rep_ue_subscription_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type MeasRepUeSubscription1 struct {
+ MeasRepUeSubscription *MeasRepUeSubscription `json:"MeasRepUeSubscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_meas_rep_ue_subscription_post.go b/go-apps/meep-rnis/server/model_meas_rep_ue_subscription_post.go
new file mode 100644
index 0000000000000000000000000000000000000000..9430e4fe6ed5af049121b42194963fbd51ba25ce
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_meas_rep_ue_subscription_post.go
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type MeasRepUeSubscriptionPost struct {
+
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+
+ FilterCriteria *FilterCriteriaAssocTri `json:"filterCriteria"`
+
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_meas_rep_ue_subscription_post_1.go b/go-apps/meep-rnis/server/model_meas_rep_ue_subscription_post_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..f26d897af9dd662a93f79798f2d7386ec816de40
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_meas_rep_ue_subscription_post_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type MeasRepUeSubscriptionPost1 struct {
+ MeasRepUeSubscription *MeasRepUeSubscriptionPost `json:"MeasRepUeSubscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_meas_ta_subscription.go b/go-apps/meep-rnis/server/model_meas_ta_subscription.go
new file mode 100644
index 0000000000000000000000000000000000000000..db7b3a83b6c4766bd5bf4790ae212290ac14623e
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_meas_ta_subscription.go
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type MeasTaSubscription struct {
+
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+
+ Links *Link `json:"_links"`
+
+ FilterCriteria *FilterCriteriaAssoc `json:"filterCriteria"`
+
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_meas_ta_subscription_1.go b/go-apps/meep-rnis/server/model_meas_ta_subscription_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..950ac755e8807f9810e3dbd860a0b5b611e08384
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_meas_ta_subscription_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type MeasTaSubscription1 struct {
+ MeasTaSubscription *MeasTaSubscription `json:"MeasTaSubscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_meas_ta_subscription_post.go b/go-apps/meep-rnis/server/model_meas_ta_subscription_post.go
new file mode 100644
index 0000000000000000000000000000000000000000..057ad1dc1ea2a41cec9f29a5c4e5b388bdde0701
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_meas_ta_subscription_post.go
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type MeasTaSubscriptionPost struct {
+
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+
+ FilterCriteria *FilterCriteriaAssoc `json:"filterCriteria"`
+
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_meas_ta_subscription_post_1.go b/go-apps/meep-rnis/server/model_meas_ta_subscription_post_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..b08f86c5c3272221bedee2d339a4aa41010b7dd8
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_meas_ta_subscription_post_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type MeasTaSubscriptionPost1 struct {
+ MeasTaSubscription *MeasTaSubscriptionPost `json:"MeasTaSubscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_plmn.go b/go-apps/meep-rnis/server/model_plmn.go
new file mode 100644
index 0000000000000000000000000000000000000000..7d9407fe51a2d01756ad62f2c89ed5f0083dd7e0
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_plmn.go
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type Plmn struct {
+
+ // The Mobile Country Code part of PLMN Identity as defined in 3GPP TS 36.413
+ Mcc string `json:"mcc"`
+
+ // The Mobile Network Code part of PLMN Identity as defined in 3GPP TS 36.413
+ Mnc string `json:"mnc"`
+}
diff --git a/go-apps/meep-rnis/server/model_plmn_info.go b/go-apps/meep-rnis/server/model_plmn_info.go
new file mode 100644
index 0000000000000000000000000000000000000000..b61dd3d241f8ec1ebc77130d98b24977a5429349
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_plmn_info.go
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type PlmnInfo struct {
+ TimeStamp *TimeStamp `json:"timeStamp,omitempty"`
+
+ // Unique identifier for the mobile edge application instance
+ AppInsId string `json:"appInsId"`
+
+ Ecgi *Ecgi `json:"ecgi"`
+}
diff --git a/go-apps/meep-rnis/server/model_problem_details.go b/go-apps/meep-rnis/server/model_problem_details.go
new file mode 100644
index 0000000000000000000000000000000000000000..8a81897afdcb73524e74c1285e65794cf7d7dc41
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_problem_details.go
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type ProblemDetails struct {
+
+ // A URI reference according to IETF RFC 3986 that identifies the problem type
+ Type_ string `json:"type,omitempty"`
+
+ // A short, human-readable summary of the problem type
+ Title string `json:"title,omitempty"`
+
+ // The HTTP status code for this occurrence of the problem
+ Status int32 `json:"status,omitempty"`
+
+ // A human-readable explanation specific to this occurrence of the problem
+ Detail string `json:"detail,omitempty"`
+
+ // A URI reference that identifies the specific occurrence of the problem
+ Instance string `json:"instance,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_qos_information.go b/go-apps/meep-rnis/server/model_qos_information.go
new file mode 100644
index 0000000000000000000000000000000000000000..8cca58ccaa223af1709b7f6c290a481030936169
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_qos_information.go
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type QosInformation struct {
+
+ // This IE indicates the maximum downlink E-RAB Bit Rate as defined in TS 23.401 for this bearer.
+ ErabMbrDl int32 `json:"erabMbrDl"`
+
+ // This IE indicates the maximum uplink E-RAB Bit Rate as defined in TS 23.401 for this bearer.
+ ErabMbrUl int32 `json:"erabMbrUl"`
+
+ // This IE indicates the guaranteed downlink E-RAB Bit Rate as defined in TS 23.401 for this bearer.
+ ErabGbrDl int32 `json:"erabGbrDl"`
+
+ // This IE indicates the guaranteed uplink E-RAB Bit Rate as defined in TS 23.401 for this bearer.
+ ErabGbrUl int32 `json:"erabGbrUl"`
+}
diff --git a/go-apps/meep-rnis/server/model_rab_est_subscription.go b/go-apps/meep-rnis/server/model_rab_est_subscription.go
new file mode 100644
index 0000000000000000000000000000000000000000..68debcdccde58aeda1033977d80d75cf5b35726d
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_rab_est_subscription.go
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type RabEstSubscription struct {
+
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+
+ Links *Link `json:"_links"`
+
+ FilterCriteria *FilterCriteriaAssocQci `json:"filterCriteria"`
+
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_rab_est_subscription_1.go b/go-apps/meep-rnis/server/model_rab_est_subscription_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..e74dceb852a70aea77e141c38d090960cd508e0d
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_rab_est_subscription_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type RabEstSubscription1 struct {
+ RabEstSubscription *RabEstSubscription `json:"RabEstSubscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_rab_est_subscription_post.go b/go-apps/meep-rnis/server/model_rab_est_subscription_post.go
new file mode 100644
index 0000000000000000000000000000000000000000..9f5c3189b9271d553d3ceb0b348126cd5dfe9f37
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_rab_est_subscription_post.go
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type RabEstSubscriptionPost struct {
+
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+
+ FilterCriteria *FilterCriteriaAssocQci `json:"filterCriteria"`
+
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_rab_est_subscription_post_1.go b/go-apps/meep-rnis/server/model_rab_est_subscription_post_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..0f43fe8aa2d88feab93dd1d3d734b2b81d633c48
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_rab_est_subscription_post_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type RabEstSubscriptionPost1 struct {
+ RabEstSubscription *RabEstSubscriptionPost `json:"RabEstSubscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_rab_info.go b/go-apps/meep-rnis/server/model_rab_info.go
new file mode 100644
index 0000000000000000000000000000000000000000..f05ad869b573259d51c26108e573d7405da0714f
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_rab_info.go
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type RabInfo struct {
+ TimeStamp *TimeStamp `json:"timeStamp,omitempty"`
+
+ // Unique identifier for the mobile edge application instance
+ AppInsId string `json:"appInsId"`
+
+ // Unique identifier allocated by the Mobile Edge application for the Information request.
+ RequestId string `json:"requestId"`
+
+ CellUserInfo []CellUserInfo `json:"cellUserInfo,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_rab_mod_subscription.go b/go-apps/meep-rnis/server/model_rab_mod_subscription.go
new file mode 100644
index 0000000000000000000000000000000000000000..adf4a3f782fa404ccd90e0d12de7b84f9cd5de37
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_rab_mod_subscription.go
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type RabModSubscription struct {
+
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+
+ Links *Link `json:"_links"`
+
+ FilterCriteria *FilterCriteriaAssocQci `json:"filterCriteria"`
+
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_rab_mod_subscription_1.go b/go-apps/meep-rnis/server/model_rab_mod_subscription_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..5335acdf0a68dcbdf733a277c2c1d0f35e5d9b6e
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_rab_mod_subscription_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type RabModSubscription1 struct {
+ RabModSubscription *RabModSubscription `json:"RabModSubscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_rab_mod_subscription_post.go b/go-apps/meep-rnis/server/model_rab_mod_subscription_post.go
new file mode 100644
index 0000000000000000000000000000000000000000..f6654fd2277a4af5ab62a53953102230ae32289b
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_rab_mod_subscription_post.go
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type RabModSubscriptionPost struct {
+
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+
+ FilterCriteria *FilterCriteriaAssocQci `json:"filterCriteria"`
+
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_rab_mod_subscription_post_1.go b/go-apps/meep-rnis/server/model_rab_mod_subscription_post_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..83ffcc14512e05e2d12625940e1ea6d9fd5aabf2
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_rab_mod_subscription_post_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type RabModSubscriptionPost1 struct {
+ RabModSubscription *RabModSubscriptionPost `json:"RabModSubscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_rab_rel_subscription.go b/go-apps/meep-rnis/server/model_rab_rel_subscription.go
new file mode 100644
index 0000000000000000000000000000000000000000..c57bccbbb21a753180831e64b42bc774a595bb9c
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_rab_rel_subscription.go
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type RabRelSubscription struct {
+
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+
+ Links *Link `json:"_links"`
+
+ FilterCriteria *FilterCriteriaAssocQci `json:"filterCriteria"`
+
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_rab_rel_subscription_1.go b/go-apps/meep-rnis/server/model_rab_rel_subscription_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..d3394cb018015570b8bc503b5270fabf1726678d
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_rab_rel_subscription_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type RabRelSubscription1 struct {
+ RabRelSubscription *RabRelSubscription `json:"RabRelSubscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_rab_rel_subscription_post.go b/go-apps/meep-rnis/server/model_rab_rel_subscription_post.go
new file mode 100644
index 0000000000000000000000000000000000000000..da17a777689584048fd9840c429e36bf12991749
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_rab_rel_subscription_post.go
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type RabRelSubscriptionPost struct {
+
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+
+ FilterCriteria *FilterCriteriaAssocQci `json:"filterCriteria"`
+
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_rab_rel_subscription_post_1.go b/go-apps/meep-rnis/server/model_rab_rel_subscription_post_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..c4532b45adbd5318841d577cb4a43e3aca8c9aba
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_rab_rel_subscription_post_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type RabRelSubscriptionPost1 struct {
+ RabRelSubscription *RabRelSubscriptionPost `json:"RabRelSubscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_s1_bearer_info.go b/go-apps/meep-rnis/server/model_s1_bearer_info.go
new file mode 100644
index 0000000000000000000000000000000000000000..93ee105e16d4788189e59d99056dda14e2677865
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_s1_bearer_info.go
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type S1BearerInfo struct {
+ TimeStamp *TimeStamp `json:"timeStamp,omitempty"`
+
+ S1UeInfo []S1UeInfo `json:"s1UeInfo"`
+}
diff --git a/go-apps/meep-rnis/server/model_s1_bearer_info_detailed.go b/go-apps/meep-rnis/server/model_s1_bearer_info_detailed.go
new file mode 100644
index 0000000000000000000000000000000000000000..7ea480f018df50d4404e519db2b138d82301d59b
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_s1_bearer_info_detailed.go
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// Information on UEs in the specific cell.
+type S1BearerInfoDetailed struct {
+
+ // The element that uniquely identifies a S1 bearer for a specific UE, as defined in ETSI TS 136 413
+ ErabId int32 `json:"erabId"`
+
+ S1EnbInfo *S1EnbInfo `json:"s1EnbInfo"`
+
+ SGwInfo *SGwInfo `json:"sGwInfo,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_s1_bearer_subscription.go b/go-apps/meep-rnis/server/model_s1_bearer_subscription.go
new file mode 100644
index 0000000000000000000000000000000000000000..b5ad491241a0d657a5acf82beaac217ac2fa5df0
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_s1_bearer_subscription.go
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type S1BearerSubscription struct {
+
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+
+ Links *Link `json:"_links"`
+
+ EventType *EventType `json:"eventType,omitempty"`
+
+ S1BearerSubscriptionCriteria *S1BearerSubscriptionCriteria `json:"s1BearerSubscriptionCriteria"`
+
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_s1_bearer_subscription_1.go b/go-apps/meep-rnis/server/model_s1_bearer_subscription_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..6c3ea030eb17be67684a8e515accf8e9648eea88
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_s1_bearer_subscription_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type S1BearerSubscription1 struct {
+ S1BearerSubscription *S1BearerSubscription `json:"S1BearerSubscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_s1_bearer_subscription_criteria.go b/go-apps/meep-rnis/server/model_s1_bearer_subscription_criteria.go
new file mode 100644
index 0000000000000000000000000000000000000000..f4a0f70dc8e165321e8b6d6d504be9cac715cb0e
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_s1_bearer_subscription_criteria.go
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// List of filtering criteria for the subscription.
+type S1BearerSubscriptionCriteria struct {
+ AssociateId *AssociateId `json:"associateId,omitempty"`
+
+ Plmn *Plmn `json:"plmn,omitempty"`
+
+ // The E-UTRAN Cell Identity as a bit string (size (28)), as defined in 3GPP TS 36.413
+ CellId []string `json:"cellId,omitempty"`
+
+ // The element that uniquely identifies a S1 bearer for a specific UE, as defined in ETSI TS 136 413
+ ErabId int32 `json:"erabId,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_s1_bearer_subscription_post.go b/go-apps/meep-rnis/server/model_s1_bearer_subscription_post.go
new file mode 100644
index 0000000000000000000000000000000000000000..6b026b79906e13b89e828de6faf7644432fe84bf
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_s1_bearer_subscription_post.go
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type S1BearerSubscriptionPost struct {
+
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+
+ EventType *EventType `json:"eventType,omitempty"`
+
+ S1BearerSubscriptionCriteria *S1BearerSubscriptionCriteria `json:"s1BearerSubscriptionCriteria"`
+
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_s1_bearer_subscription_post_1.go b/go-apps/meep-rnis/server/model_s1_bearer_subscription_post_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..9b34786b30dc9fcff0248b62e880e025c08ac731
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_s1_bearer_subscription_post_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type S1BearerSubscriptionPost1 struct {
+ S1BearerSubscription *S1BearerSubscriptionPost `json:"S1BearerSubscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_s1_enb_info.go b/go-apps/meep-rnis/server/model_s1_enb_info.go
new file mode 100644
index 0000000000000000000000000000000000000000..02b62de6f9015d25be4665d86917d8940698d86f
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_s1_enb_info.go
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type S1EnbInfo struct {
+
+ // eNB transport layer address of this S1 bearer.
+ IpAddress string `json:"ipAddress"`
+
+ // eNB GTP-U TEID of this S1 bearer.
+ TunnelId string `json:"tunnelId"`
+}
diff --git a/go-apps/meep-rnis/server/model_s1_ue_info.go b/go-apps/meep-rnis/server/model_s1_ue_info.go
new file mode 100644
index 0000000000000000000000000000000000000000..ce5543df45b53c9fe2e6477acfd6fabac75922a9
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_s1_ue_info.go
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// The information on users per cell.
+type S1UeInfo struct {
+ TempUeId []TempUeId `json:"tempUeId"`
+
+ AssociateId []AssociateId `json:"associateId,omitempty"`
+
+ Ecgi []Ecgi `json:"ecgi"`
+
+ S1BearerInfoDetailed []S1BearerInfoDetailed `json:"s1BearerInfoDetailed"`
+}
diff --git a/go-apps/meep-rnis/server/model_s_gw_info.go b/go-apps/meep-rnis/server/model_s_gw_info.go
new file mode 100644
index 0000000000000000000000000000000000000000..965705fc5c2c72356060aa74403fb98df2defdac
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_s_gw_info.go
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type SGwInfo struct {
+
+ // SGW transport layer address of this S1 bearer.
+ IpAddress string `json:"ipAddress"`
+
+ // SGW GTP-U TEID of this S1 bearer.
+ TunnelId string `json:"tunnelId"`
+}
diff --git a/go-apps/meep-rnis/server/model_subscription.go b/go-apps/meep-rnis/server/model_subscription.go
new file mode 100644
index 0000000000000000000000000000000000000000..6948f6643cf2f215acb8bc162cf5f6d64457258a
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_subscription.go
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// A link to a subscription.
+type Subscription struct {
+
+ // URI referring to a resource
+ Href string `json:"href"`
+
+ SubscriptionType *SubscriptionType `json:"subscriptionType"`
+}
diff --git a/go-apps/meep-rnis/server/model_subscription_link_list.go b/go-apps/meep-rnis/server/model_subscription_link_list.go
new file mode 100644
index 0000000000000000000000000000000000000000..60b7c9d7a78b88667746c63b4154f9801fcb7b5f
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_subscription_link_list.go
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type SubscriptionLinkList struct {
+ Links *Link `json:"_links"`
+
+ Subscription []Subscription `json:"subscription,omitempty"`
+}
diff --git a/go-apps/meep-rnis/server/model_subscription_type.go b/go-apps/meep-rnis/server/model_subscription_type.go
new file mode 100644
index 0000000000000000000000000000000000000000..56bd875bff35a3ca5b81113ceb585ae699993687
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_subscription_type.go
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// SubscriptionType : Numeric value corresponding to specified type of subscription.
+type SubscriptionType string
+
+// List of SubscriptionType
+const (
+ RESERVED_SUBSCRIPTION_TYPE SubscriptionType = "RESERVED_SUBSCRIPTION_TYPE"
+ CELL_CHANGE SubscriptionType = "CELL_CHANGE"
+ RAB_ESTABLISHMENT SubscriptionType = "RAB_ESTABLISHMENT"
+ RAB_MODIFICATION SubscriptionType = "RAB_MODIFICATION"
+ RAB_RELEASE SubscriptionType = "RAB_RELEASE"
+ MEAS_REPORT_UE SubscriptionType = "MEAS_REPORT_UE"
+ MEAS_TIMING_ADVANCE SubscriptionType = "MEAS_TIMING_ADVANCE"
+ CA_RECONF SubscriptionType = "CA_RECONF"
+ S1_BEARE SubscriptionType = "S1_BEARE"
+)
diff --git a/go-apps/meep-rnis/server/model_temp_ue_id.go b/go-apps/meep-rnis/server/model_temp_ue_id.go
new file mode 100644
index 0000000000000000000000000000000000000000..8185d77d6a4843da0630e037e2dc77e3eb36e38e
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_temp_ue_id.go
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type TempUeId struct {
+
+ // MMEC as defined in ETSI TS 136 413
+ Mmec string `json:"mmec"`
+
+ // M-TMSI as defined in ETSI TS 136 413
+ Mtmsi string `json:"mtmsi"`
+}
diff --git a/go-apps/meep-rnis/server/model_time_stamp.go b/go-apps/meep-rnis/server/model_time_stamp.go
new file mode 100644
index 0000000000000000000000000000000000000000..2543fafb90971467f6d044409d3b3e326cb00faf
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_time_stamp.go
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+type TimeStamp struct {
+
+ // The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC
+ Seconds int32 `json:"seconds"`
+
+ // The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC
+ NanoSeconds int32 `json:"nanoSeconds"`
+}
diff --git a/go-apps/meep-rnis/server/model_trigger.go b/go-apps/meep-rnis/server/model_trigger.go
new file mode 100644
index 0000000000000000000000000000000000000000..55b9d8668b3c333af29a615e470f6f09ec7a9ae5
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_trigger.go
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// Trigger : Unique identifier for the mobile edge application instance
+type Trigger string
+
+// List of Trigger
+const (
+ NOT_AVAILABLE Trigger = "NOT_AVAILABLE"
+ PERIODICAL_REPORT_STRONGEST_CELLS Trigger = "PERIODICAL_REPORT_STRONGEST_CELLS"
+ PERIODICAL_REPORT_STRONGEST_CELLS_FOR_SON Trigger = "PERIODICAL_REPORT_STRONGEST_CELLS_FOR_SON"
+ PERIODICAL_REPORT_CGI Trigger = "PERIODICAL_REPORT_CGI"
+ EVENT_A1 Trigger = "EVENT_A1"
+ EVENT_A2 Trigger = "EVENT_A2"
+ EVENT_A3 Trigger = "EVENT_A3"
+ EVENT_A4 Trigger = "EVENT_A4"
+ EVENT_A5 Trigger = "EVENT_A5"
+ EVENT_A6 Trigger = "EVENT_A6"
+ EVENT_B1 Trigger = "EVENT_B1"
+ EVENT_B2 Trigger = "EVENT_B2"
+ EVENT_C1 Trigger = "EVENT_C1"
+ EVENT_C2 Trigger = "EVENT_C2"
+ EVENT_W1 Trigger = "EVENT_W1"
+ EVENT_W2 Trigger = "EVENT_W2"
+ EVENT_W3 Trigger = "EVENT_W3"
+)
diff --git a/go-apps/meep-rnis/server/model_ue_info.go b/go-apps/meep-rnis/server/model_ue_info.go
new file mode 100644
index 0000000000000000000000000000000000000000..3728296b6f897d66cb9ff5e0cb336ab5f917b93e
--- /dev/null
+++ b/go-apps/meep-rnis/server/model_ue_info.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+// Information on UEs in the specific cell.
+type UeInfo struct {
+ AssociateId []AssociateId `json:"associateId,omitempty"`
+
+ ErabInfo []ErabQosParameters `json:"erabInfo"`
+}
diff --git a/go-apps/meep-rnis/server/package-lock.json b/go-apps/meep-rnis/server/package-lock.json
new file mode 100644
index 0000000000000000000000000000000000000000..2885e4cc83328140ac8369874e943cce9f2da1e9
--- /dev/null
+++ b/go-apps/meep-rnis/server/package-lock.json
@@ -0,0 +1,19 @@
+{
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "get-port": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz",
+ "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw=="
+ },
+ "http-echo-server": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/http-echo-server/-/http-echo-server-2.1.1.tgz",
+ "integrity": "sha512-ybEQrtw0fGmSHZHa8W0tjHFz+m9ZBxWT2aYGWTaAlU2fldrxbjOsgs8qfbXBLwJMsToQIg89mTS9kbw44ZRr8A==",
+ "requires": {
+ "get-port": "^4.0.0"
+ }
+ }
+ }
+}
diff --git a/go-apps/meep-rnis/server/rnis.go b/go-apps/meep-rnis/server/rnis.go
new file mode 100644
index 0000000000000000000000000000000000000000..4b92910174f62cac2fb3b32c935f02acc91065bc
--- /dev/null
+++ b/go-apps/meep-rnis/server/rnis.go
@@ -0,0 +1,792 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package server
+
+import (
+ "context"
+ "encoding/json"
+ "errors"
+ "fmt"
+ "net/http"
+ "net/url"
+ "os"
+ "strconv"
+ "strings"
+ "time"
+
+ sbi "github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-rnis/sbi"
+ dkm "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr"
+ httpLog "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-http-logger"
+ log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
+ redis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis"
+ clientNotif "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-rnis-notification-client"
+ "github.com/gorilla/mux"
+)
+
+const rnisBasePath = "/rni/v1/"
+const rnisKey string = "rnis:"
+const logModuleRNIS string = "meep-rnis"
+
+//const module string = "rnis"
+var redisAddr string = "meep-redis-master.default.svc.cluster.local:6379"
+var influxAddr string = "http://meep-influxdb.default.svc.cluster.local:8086"
+var postgisHost string = "meep-postgis.default.svc.cluster.local"
+var postgisPort string = "5432"
+
+const cellChangeSubscriptionType = "cell_change"
+
+var ccSubscriptionMap = map[int]*CellChangeSubscription{}
+var subscriptionExpiryMap = map[int][]int{}
+var currentStoreName = ""
+
+var RNIS_DB = 5
+
+var rc *redis.Connector
+var hostUrl *url.URL
+var sandboxName string
+var basePath string
+var baseKey string
+
+var expiryTicker *time.Ticker
+
+var nextSubscriptionIdAvailable int
+
+func notImplemented(w http.ResponseWriter, r *http.Request) {
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ w.WriteHeader(http.StatusNotImplemented)
+}
+
+// Init - RNI Service initialization
+func Init() (err error) {
+
+ // Retrieve Sandbox name from environment variable
+ sandboxNameEnv := strings.TrimSpace(os.Getenv("MEEP_SANDBOX_NAME"))
+ if sandboxNameEnv != "" {
+ sandboxName = sandboxNameEnv
+ }
+ if sandboxName == "" {
+ err = errors.New("MEEP_SANDBOX_NAME env variable not set")
+ log.Error(err.Error())
+ return err
+ }
+ log.Info("MEEP_SANDBOX_NAME: ", sandboxName)
+
+ // Retrieve Host URL from environment variable
+ hostUrl, err = url.Parse(strings.TrimSpace(os.Getenv("MEEP_HOST_URL")))
+ if err != nil {
+ hostUrl = new(url.URL)
+ }
+ log.Info("MEEP_HOST_URL: ", hostUrl)
+
+ // Set base path
+ basePath = "/" + sandboxName + rnisBasePath
+
+ // Get base store key
+ baseKey = dkm.GetKeyRoot(sandboxName) + rnisKey
+
+ // Connect to Redis DB
+ rc, err = redis.NewConnector(redisAddr, RNIS_DB)
+ if err != nil {
+ log.Error("Failed connection to Redis DB. Error: ", err)
+ return err
+ }
+ log.Info("Connected to Redis DB, RNI service table")
+
+ reInit()
+
+ expiryTicker = time.NewTicker(time.Second)
+ go func() {
+ for range expiryTicker.C {
+ checkForExpiredSubscriptions()
+ }
+ }()
+
+ // Initialize SBI
+ sbiCfg := sbi.SbiCfg{
+ SandboxName: sandboxName,
+ RedisAddr: redisAddr,
+ PostgisHost: postgisHost,
+ PostgisPort: postgisPort,
+ UeEcgiInfoCb: updateUeEcgiInfo,
+ AppEcgiInfoCb: updateAppEcgiInfo,
+ ScenarioNameCb: updateStoreName,
+ CleanUpCb: cleanUp,
+ }
+ err = sbi.Init(sbiCfg)
+ if err != nil {
+ log.Error("Failed initialize SBI. Error: ", err)
+ return err
+ }
+ log.Info("SBI Initialized")
+
+ return nil
+}
+
+// reInit - finds the value already in the DB to repopulate local stored info
+func reInit() {
+ keyName := baseKey + cellChangeSubscriptionType + "*"
+ _ = rc.ForEachJSONEntry(keyName, repopulateCcSubscriptionMap, nil)
+}
+
+// Run - Start RNIS
+func Run() (err error) {
+ return sbi.Run()
+}
+
+// Stop - Stop RNIS
+func Stop() (err error) {
+ return sbi.Stop()
+}
+
+func updateUeEcgiInfo(name string, mnc string, mcc string, cellId string) {
+
+ var plmn Plmn
+ var newEcgi Ecgi
+ plmn.Mnc = mnc
+ plmn.Mcc = mcc
+ newEcgi.CellId = []string{cellId}
+ newEcgi.Plmn = &plmn
+
+ //get from DB
+ jsonUeEcgiInfo, _ := rc.JSONGetEntry(baseKey+"UE:"+name, ".")
+
+ ecgiInfo := new(Ecgi)
+ oldPlmnMnc := ""
+ oldPlmnMcc := ""
+ oldCellId := ""
+
+ if jsonUeEcgiInfo != "" {
+
+ ecgiInfo = convertJsonToEcgi(jsonUeEcgiInfo)
+
+ oldPlmnMnc = ecgiInfo.Plmn.Mnc
+ oldPlmnMcc = ecgiInfo.Plmn.Mcc
+ oldCellId = ecgiInfo.CellId[0]
+ }
+ //updateDB if changes occur
+ if newEcgi.Plmn.Mnc != oldPlmnMnc || newEcgi.Plmn.Mcc != oldPlmnMcc || newEcgi.CellId[0] != oldCellId {
+ //updateDB
+ _ = rc.JSONSetEntry(baseKey+"UE:"+name, ".", convertEcgiToJson(&newEcgi))
+ assocId := new(AssociateId)
+ assocId.Type_ = "UE_IPv4_ADDRESS"
+ assocId.Value = name
+
+ //log to model for all apps on that UE
+ checkNotificationRegisteredSubscriptions("", assocId, &plmn, ecgiInfo.Plmn, "", cellId, oldCellId)
+ }
+}
+
+func updateAppEcgiInfo(name string, mnc string, mcc string, cellId string) {
+
+ var plmn Plmn
+ var newEcgi Ecgi
+ plmn.Mnc = mnc
+ plmn.Mcc = mcc
+ newEcgi.CellId = []string{cellId}
+ newEcgi.Plmn = &plmn
+
+ //get from DB
+ jsonAppEcgiInfo, _ := rc.JSONGetEntry(baseKey+"APP:"+name, ".")
+
+ oldPlmnMnc := ""
+ oldPlmnMcc := ""
+ oldCellId := ""
+
+ if jsonAppEcgiInfo != "" {
+
+ ecgiInfo := convertJsonToEcgi(jsonAppEcgiInfo)
+
+ oldPlmnMnc = ecgiInfo.Plmn.Mnc
+ oldPlmnMcc = ecgiInfo.Plmn.Mcc
+ oldCellId = ecgiInfo.CellId[0]
+ }
+
+ //updateDB if changes occur
+ if newEcgi.Plmn.Mnc != oldPlmnMnc || newEcgi.Plmn.Mcc != oldPlmnMcc || newEcgi.CellId[0] != oldCellId {
+ //updateDB
+ _ = rc.JSONSetEntry(baseKey+"APP:"+name, ".", convertEcgiToJson(&newEcgi))
+ }
+}
+
+func createClient(notifyPath string) (*clientNotif.APIClient, error) {
+ // Create & store client for App REST API
+ subsAppClientCfg := clientNotif.NewConfiguration()
+ subsAppClientCfg.BasePath = notifyPath
+ subsAppClient := clientNotif.NewAPIClient(subsAppClientCfg)
+ if subsAppClient == nil {
+ log.Error("Failed to create Subscription App REST API client: ", subsAppClientCfg.BasePath)
+ err := errors.New("Failed to create Subscription App REST API client")
+ return nil, err
+ }
+ return subsAppClient, nil
+}
+
+func checkForExpiredSubscriptions() {
+
+ nowTime := int(time.Now().Unix())
+ for expiryTime, subsIndexList := range subscriptionExpiryMap {
+ if expiryTime <= nowTime {
+ subscriptionExpiryMap[expiryTime] = nil
+ for _, subsId := range subsIndexList {
+ if ccSubscriptionMap[subsId] != nil {
+
+ subsIdStr := strconv.Itoa(subsId)
+
+ var notif clientNotif.ExpiryNotification
+
+ seconds := time.Now().Unix()
+ var timeStamp clientNotif.TimeStamp
+ timeStamp.Seconds = int32(seconds)
+
+ var expiryTimeStamp clientNotif.TimeStamp
+ expiryTimeStamp.Seconds = int32(expiryTime)
+
+ link := new(clientNotif.Link)
+ link.Self = ccSubscriptionMap[subsId].CallbackReference
+ notif.Links = link
+
+ notif.Timestamp = &timeStamp
+ notif.ExpiryDeadline = &expiryTimeStamp
+
+ go sendExpiryNotification(link.Self, context.TODO(), subsIdStr, notif)
+ _ = delSubscription(baseKey+cellChangeSubscriptionType, subsIdStr)
+ }
+ }
+ }
+ }
+
+}
+
+func repopulateCcSubscriptionMap(key string, jsonInfo string, userData interface{}) error {
+
+ var subscription CellChangeSubscription
+
+ // Format response
+ err := json.Unmarshal([]byte(jsonInfo), &subscription)
+ if err != nil {
+ return err
+ }
+
+ selfUrl := strings.Split(subscription.Links.Self, "/")
+ subsIdStr := selfUrl[len(selfUrl)-1]
+ subsId, _ := strconv.Atoi(subsIdStr)
+
+ ccSubscriptionMap[subsId] = &subscription
+ if subscription.ExpiryDeadline != nil {
+ intList := subscriptionExpiryMap[int(subscription.ExpiryDeadline.Seconds)]
+ intList = append(intList, subsId)
+ subscriptionExpiryMap[int(subscription.ExpiryDeadline.Seconds)] = intList
+ }
+
+ //reinitialisation of next available Id for future subscription request
+ if subsId >= nextSubscriptionIdAvailable {
+ nextSubscriptionIdAvailable = subsId + 1
+ }
+
+ return nil
+}
+
+func checkNotificationRegisteredSubscriptions(appId string, assocId *AssociateId, newPlmn *Plmn, oldPlmn *Plmn, hoStatus string, newCellId string, oldCellId string) {
+
+ //check all that applies
+ for subsId, sub := range ccSubscriptionMap {
+
+ match := false
+
+ if sub != nil {
+ if (sub.FilterCriteria.AppInsId == "") || (sub.FilterCriteria.AppInsId != "" && appId == sub.FilterCriteria.AppInsId) {
+ match = true
+ } else {
+ match = false
+ }
+
+ if match && ((sub.FilterCriteria.AssociateId == nil) || (sub.FilterCriteria.AssociateId != nil && assocId != nil && assocId.Value == sub.FilterCriteria.AssociateId.Value)) {
+ match = true
+ } else {
+ match = false
+ }
+
+ if match && ((sub.FilterCriteria.Plmn == nil) || (sub.FilterCriteria.Plmn != nil && ((newPlmn != nil && newPlmn.Mnc == sub.FilterCriteria.Plmn.Mnc && newPlmn.Mcc == sub.FilterCriteria.Plmn.Mcc) || (oldPlmn != nil && oldPlmn.Mnc == sub.FilterCriteria.Plmn.Mnc && oldPlmn.Mcc == sub.FilterCriteria.Plmn.Mcc)))) {
+ match = true
+ } else {
+ match = false
+ }
+
+ //loop through all cellIds
+ if match {
+ if sub.FilterCriteria.CellId != nil {
+ matchOne := false
+
+ for _, cellId := range sub.FilterCriteria.CellId {
+ if newCellId != oldCellId {
+ if newCellId != "" && newCellId == cellId {
+ matchOne = true
+ break
+ } else {
+ if oldCellId != "" && oldCellId == cellId {
+ matchOne = true
+ break
+ }
+ }
+ }
+ }
+ if matchOne {
+ match = true
+ } else {
+ match = false
+ }
+ }
+ }
+
+ //we ignore hoStatus
+
+ if match {
+ subsIdStr := strconv.Itoa(subsId)
+ jsonInfo, _ := rc.JSONGetEntry(baseKey+cellChangeSubscriptionType+":"+subsIdStr, ".")
+ if jsonInfo == "" {
+ return
+ }
+
+ subscription := convertJsonToCellChangeSubscription(jsonInfo)
+ log.Info("Sending RNIS notification ", subscription.CallbackReference)
+
+ var notif clientNotif.CellChangeNotification
+
+ var newEcgi clientNotif.Ecgi
+ var notifNewPlmn clientNotif.Plmn
+ if newPlmn != nil {
+ notifNewPlmn.Mnc = newPlmn.Mnc
+ notifNewPlmn.Mcc = newPlmn.Mcc
+ } else {
+ notifNewPlmn.Mnc = ""
+ notifNewPlmn.Mcc = ""
+ }
+ newEcgi.Plmn = ¬ifNewPlmn
+ newEcgi.CellId = []string{newCellId}
+ var oldEcgi clientNotif.Ecgi
+ var notifOldPlmn clientNotif.Plmn
+ if oldPlmn != nil {
+ notifOldPlmn.Mnc = oldPlmn.Mnc
+ notifOldPlmn.Mcc = oldPlmn.Mcc
+ } else {
+ notifOldPlmn.Mnc = ""
+ notifOldPlmn.Mcc = ""
+ }
+ oldEcgi.Plmn = ¬ifOldPlmn
+ oldEcgi.CellId = []string{oldCellId}
+
+ seconds := time.Now().Unix()
+ var timeStamp clientNotif.TimeStamp
+ timeStamp.Seconds = int32(seconds)
+
+ notif.Timestamp = &timeStamp
+ notifHoStatus := clientNotif.COMPLETED_HoStatus
+ notif.HoStatus = ¬ifHoStatus
+ notif.SrcEcgi = &oldEcgi
+ notif.TrgEcgi = []clientNotif.Ecgi{newEcgi}
+
+ go sendCcNotification(subscription.CallbackReference, context.TODO(), subsIdStr, notif)
+ log.Info("Cell_change Notification" + "(" + subsIdStr + ")")
+ }
+ }
+ }
+}
+
+func sendCcNotification(notifyUrl string, ctx context.Context, subscriptionId string, notification clientNotif.CellChangeNotification) {
+
+ startTime := time.Now()
+
+ client, err := createClient(notifyUrl)
+ if err != nil {
+ log.Error(err)
+ return
+ }
+
+ jsonNotif, err := json.Marshal(notification)
+ if err != nil {
+ log.Error(err.Error())
+ }
+
+ resp, err := client.NotificationsApi.PostCellChangeNotification(ctx, subscriptionId, notification)
+ _ = httpLog.LogTx(notifyUrl, "POST", string(jsonNotif), resp, startTime)
+ if err != nil {
+ log.Error(err)
+ return
+ }
+ defer resp.Body.Close()
+}
+
+func sendExpiryNotification(notifyUrl string, ctx context.Context, subscriptionId string, notification clientNotif.ExpiryNotification) {
+
+ startTime := time.Now()
+
+ client, err := createClient(notifyUrl)
+ if err != nil {
+ log.Error(err)
+ return
+ }
+
+ jsonNotif, err := json.Marshal(notification)
+ if err != nil {
+ log.Error(err.Error())
+ }
+
+ resp, err := client.NotificationsApi.PostExpiryNotification(ctx, subscriptionId, notification)
+ _ = httpLog.LogTx(notifyUrl, "POST", string(jsonNotif), resp, startTime)
+ if err != nil {
+ log.Error(err)
+ return
+ }
+ defer resp.Body.Close()
+}
+
+func cellChangeSubscriptionsGET(w http.ResponseWriter, r *http.Request) {
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ vars := mux.Vars(r)
+ subIdParamStr := vars["subscriptionId"]
+
+ var response InlineResponse2004
+ var cellChangeSubscription CellChangeSubscription
+ response.CellChangeSubscription = &cellChangeSubscription
+
+ jsonRespDB, _ := rc.JSONGetEntry(baseKey+cellChangeSubscriptionType+":"+subIdParamStr, ".")
+
+ if jsonRespDB == "" {
+ w.WriteHeader(http.StatusNotFound)
+ return
+ }
+
+ err := json.Unmarshal([]byte(jsonRespDB), &cellChangeSubscription)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ jsonResponse, err := json.Marshal(response)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ w.WriteHeader(http.StatusOK)
+ fmt.Fprintf(w, string(jsonResponse))
+
+}
+
+func isSubscriptionIdRegisteredCc(subsIdStr string) bool {
+ subsId, _ := strconv.Atoi(subsIdStr)
+ if ccSubscriptionMap[subsId] != nil {
+ return true
+ } else {
+ return false
+ }
+}
+
+func registerCc(cellChangeSubscription *CellChangeSubscription, subsIdStr string) {
+ subsId, _ := strconv.Atoi(subsIdStr)
+ ccSubscriptionMap[subsId] = cellChangeSubscription
+ if cellChangeSubscription.ExpiryDeadline != nil {
+ //get current list of subscription meant to expire at this time
+ intList := subscriptionExpiryMap[int(cellChangeSubscription.ExpiryDeadline.Seconds)]
+ intList = append(intList, subsId)
+ subscriptionExpiryMap[int(cellChangeSubscription.ExpiryDeadline.Seconds)] = intList
+ }
+
+ log.Info("New registration: ", subsId, " type: ", cellChangeSubscriptionType)
+}
+
+func deregisterCc(subsIdStr string) {
+ subsId, _ := strconv.Atoi(subsIdStr)
+ ccSubscriptionMap[subsId] = nil
+ log.Info("Deregistration: ", subsId, " type: ", cellChangeSubscriptionType)
+}
+
+func cellChangeSubscriptionsPOST(w http.ResponseWriter, r *http.Request) {
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+
+ var response InlineResponse201
+ cellChangeSubscription := new(CellChangeSubscription)
+ response.CellChangeSubscription = cellChangeSubscription
+
+ cellChangeSubscriptionPost1 := new(CellChangeSubscriptionPost1)
+
+ decoder := json.NewDecoder(r.Body)
+ err := decoder.Decode(&cellChangeSubscriptionPost1)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ cellChangeSubscriptionPost := cellChangeSubscriptionPost1.CellChangeSubscription
+ newSubsId := nextSubscriptionIdAvailable
+ nextSubscriptionIdAvailable++
+ subsIdStr := strconv.Itoa(newSubsId)
+
+ cellChangeSubscription.CallbackReference = cellChangeSubscriptionPost.CallbackReference
+ cellChangeSubscription.FilterCriteria = cellChangeSubscriptionPost.FilterCriteria
+ if cellChangeSubscription.FilterCriteria.HoStatus == nil {
+ hoStatus := COMPLETED
+ cellChangeSubscription.FilterCriteria.HoStatus = &hoStatus
+ }
+
+ cellChangeSubscription.ExpiryDeadline = cellChangeSubscriptionPost.ExpiryDeadline
+ link := new(Link)
+ link.Self = hostUrl.String() + basePath + "subscriptions/" + cellChangeSubscriptionType + "/" + subsIdStr
+ cellChangeSubscription.Links = link
+
+ _ = rc.JSONSetEntry(baseKey+cellChangeSubscriptionType+":"+subsIdStr, ".", convertCellChangeSubscriptionToJson(cellChangeSubscription))
+ registerCc(cellChangeSubscription, subsIdStr)
+
+ jsonResponse, err := json.Marshal(response)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ w.WriteHeader(http.StatusCreated)
+ fmt.Fprintf(w, string(jsonResponse))
+
+}
+
+func cellChangeSubscriptionsPUT(w http.ResponseWriter, r *http.Request) {
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+
+ vars := mux.Vars(r)
+ subIdParamStr := vars["subscriptionId"]
+ var response InlineResponse2004
+ //cellChangeSubscription := new(CellChangeSubscription)
+ cellChangeSubscription1 := new(CellChangeSubscription1)
+
+ decoder := json.NewDecoder(r.Body)
+ err := decoder.Decode(&cellChangeSubscription1)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ cellChangeSubscription := cellChangeSubscription1.CellChangeSubscription
+
+ selfUrl := strings.Split(cellChangeSubscription.Links.Self, "/")
+ subsIdStr := selfUrl[len(selfUrl)-1]
+
+ if subsIdStr != subIdParamStr {
+ http.Error(w, "Body content not matching parameter", http.StatusInternalServerError)
+ return
+ }
+
+ if isSubscriptionIdRegisteredCc(subsIdStr) {
+ registerCc(cellChangeSubscription, subsIdStr)
+
+ _ = rc.JSONSetEntry(baseKey+cellChangeSubscriptionType+":"+subsIdStr, ".", convertCellChangeSubscriptionToJson(cellChangeSubscription))
+
+ response.CellChangeSubscription = cellChangeSubscription
+ jsonResponse, err := json.Marshal(response)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ w.WriteHeader(http.StatusOK)
+ fmt.Fprintf(w, string(jsonResponse))
+ } else {
+ w.WriteHeader(http.StatusNotFound)
+ }
+}
+
+func delSubscription(keyPrefix string, subsId string) error {
+
+ err := rc.JSONDelEntry(keyPrefix+":"+subsId, ".")
+ deregisterCc(subsId)
+ return err
+}
+
+func cellChangeSubscriptionsDELETE(w http.ResponseWriter, r *http.Request) {
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ vars := mux.Vars(r)
+
+ err := delSubscription(baseKey+cellChangeSubscriptionType, vars["subscriptionId"])
+ if err != nil {
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ w.WriteHeader(http.StatusNoContent)
+}
+
+func measRepUeReportSubscriptionsPUT(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func measRepUeReportSubscriptionsPOST(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func measRepUeReportSubscriptionsGET(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func measRepUeReportSubscriptionsDELETE(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func plmnInfoGET(w http.ResponseWriter, r *http.Request) {
+
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+
+ u, _ := url.Parse(r.URL.String())
+ log.Info("url: ", u.RequestURI())
+ q := u.Query()
+ appInsId := q.Get("app_ins_id")
+ appInsIdArray := strings.Split(appInsId, ",")
+
+ var response InlineResponse2001
+ atLeastOne := false
+
+ //same for all plmnInfo
+ seconds := time.Now().Unix()
+ var timeStamp TimeStamp
+ timeStamp.Seconds = int32(seconds)
+
+ for _, meAppName := range appInsIdArray {
+ meAppName = strings.TrimSpace(meAppName)
+
+ //get from DB
+ jsonAppEcgiInfo, _ := rc.JSONGetEntry(baseKey+"APP:"+meAppName, ".")
+
+ if jsonAppEcgiInfo != "" {
+
+ ecgi := convertJsonToEcgi(jsonAppEcgiInfo)
+ if ecgi != nil {
+ if ecgi.Plmn.Mnc != "" && ecgi.Plmn.Mcc != "" && ecgi.CellId[0] != "" {
+ var plmnInfo PlmnInfo
+ plmnInfo.Ecgi = ecgi
+ plmnInfo.AppInsId = meAppName
+ plmnInfo.TimeStamp = &timeStamp
+ response.PlmnInfo = append(response.PlmnInfo, plmnInfo)
+ atLeastOne = true
+ }
+ }
+ }
+ }
+
+ if atLeastOne {
+ jsonResponse, err := json.Marshal(response)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+
+ return
+ }
+ w.WriteHeader(http.StatusOK)
+ fmt.Fprintf(w, string(jsonResponse))
+ } else {
+ w.WriteHeader(http.StatusNotFound)
+ }
+}
+
+func createSubscriptionLinkList(subType string) *SubscriptionLinkList {
+
+ subscriptionLinkList := new(SubscriptionLinkList)
+
+ link := new(Link)
+ link.Self = hostUrl.String() + basePath + "subscriptions"
+
+ if subType != "" {
+ link.Self = link.Self + "/" + subType
+ }
+
+ subscriptionLinkList.Links = link
+
+ //loop through all different types of subscription
+
+ if subType == "" || subType == cellChangeSubscriptionType {
+ //loop through cell_change map
+ for _, ccSubscription := range ccSubscriptionMap {
+ if ccSubscription != nil {
+ var subscription Subscription
+ subscription.Href = ccSubscription.Links.Self
+ subscriptionTypeStr := CELL_CHANGE
+ subscription.SubscriptionType = &subscriptionTypeStr
+ subscriptionLinkList.Subscription = append(subscriptionLinkList.Subscription, subscription)
+ }
+ }
+ }
+
+ //no other maps to go through
+
+ return subscriptionLinkList
+}
+
+func subscriptionLinkListSubscriptionsGET(w http.ResponseWriter, r *http.Request) {
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+
+ var response InlineResponse2003
+
+ subscriptionLinkList := createSubscriptionLinkList("")
+
+ response.SubscriptionLinkList = subscriptionLinkList
+ jsonResponse, err := json.Marshal(response)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ w.WriteHeader(http.StatusOK)
+ fmt.Fprintf(w, string(jsonResponse))
+}
+
+func subscriptionLinkListSubscriptionsCcGET(w http.ResponseWriter, r *http.Request) {
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+
+ var response InlineResponse2003
+
+ subscriptionLinkList := createSubscriptionLinkList(cellChangeSubscriptionType)
+
+ response.SubscriptionLinkList = subscriptionLinkList
+ jsonResponse, err := json.Marshal(response)
+ if err != nil {
+ log.Error(err.Error())
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ w.WriteHeader(http.StatusOK)
+ fmt.Fprintf(w, string(jsonResponse))
+}
+
+func subscriptionLinkListSubscriptionsMrGET(w http.ResponseWriter, r *http.Request) {
+ notImplemented(w, r)
+}
+
+func cleanUp() {
+ log.Info("Terminate all")
+ rc.DBFlush(baseKey)
+ nextSubscriptionIdAvailable = 1
+
+ ccSubscriptionMap = map[int]*CellChangeSubscription{}
+ subscriptionExpiryMap = map[int][]int{}
+ updateStoreName("")
+}
+
+func updateStoreName(storeName string) {
+ if currentStoreName != storeName {
+ currentStoreName = storeName
+ _ = httpLog.ReInit(logModuleRNIS, sandboxName, storeName, redisAddr, influxAddr)
+ }
+}
diff --git a/go-apps/meep-rnis/server/rnis_test.go b/go-apps/meep-rnis/server/rnis_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..60389358aaa75322cf4f48bdf2a30549844b86d6
--- /dev/null
+++ b/go-apps/meep-rnis/server/rnis_test.go
@@ -0,0 +1,1614 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on ance "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package server
+
+import (
+ "bytes"
+ "encoding/json"
+ "errors"
+ "fmt"
+ "io"
+ "net/http"
+ "net/http/httptest"
+ "strconv"
+ "testing"
+ "time"
+
+ ms "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-metric-store"
+
+ log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
+ mod "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model"
+ mq "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq"
+ rnisNotif "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-rnis-notification-client"
+
+ "github.com/gorilla/mux"
+)
+
+const INITIAL = 0
+const UPDATED = 1
+
+//json format using spacing to facilitate reading
+const testScenario string = `
+{
+ "version": "1.4.0",
+ "name": "test-scenario",
+ "deployment": {
+ "interDomainLatency": 50,
+ "interDomainLatencyVariation": 5,
+ "interDomainThroughput": 1000,
+ "domains": [
+ {
+ "id": "PUBLIC",
+ "name": "PUBLIC",
+ "type": "PUBLIC",
+ "interZoneLatency": 6,
+ "interZoneLatencyVariation": 2,
+ "interZoneThroughput": 1000000,
+ "zones": [
+ {
+ "id": "PUBLIC-COMMON",
+ "name": "PUBLIC-COMMON",
+ "type": "COMMON",
+ "netChar": {
+ "latency": 5,
+ "latencyVariation": 1,
+ "throughput": 1000000
+ },
+ "networkLocations": [
+ {
+ "id": "PUBLIC-COMMON-DEFAULT",
+ "name": "PUBLIC-COMMON-DEFAULT",
+ "type": "DEFAULT",
+ "terminalLinkLatency": 1,
+ "terminalLinkLatencyVariation": 1,
+ "terminalLinkThroughput": 50000,
+ "terminalLinkPacketLoss": 1,
+ "physicalLocations": []
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "4da82f2d-1f44-4945-8fe7-00c0431ef8c7",
+ "name": "operator-cell1",
+ "type": "OPERATOR-CELL",
+ "interZoneLatency": 6,
+ "interZoneLatencyVariation": 2,
+ "interZoneThroughput": 1000,
+ "interZonePacketLoss": 0,
+ "zones": [
+ {
+ "id": "operator-cell1-COMMON",
+ "name": "operator-cell1-COMMON",
+ "type": "COMMON",
+ "netChar": {
+ "latency": 5,
+ "latencyVariation": 1,
+ "throughput": 1000,
+ "packetLoss": 0
+ },
+ "networkLocations": [
+ {
+ "id": "operator-cell1-COMMON-DEFAULT",
+ "name": "operator-cell1-COMMON-DEFAULT",
+ "type": "DEFAULT",
+ "terminalLinkLatency": 1,
+ "terminalLinkLatencyVariation": 1,
+ "terminalLinkThroughput": 1000,
+ "terminalLinkPacketLoss": 0,
+ "physicalLocations": []
+ }
+ ]
+ },
+ {
+ "id": "0836975f-a7ea-41ec-b0e0-aff43178194d",
+ "name": "zone1",
+ "type": "ZONE",
+ "netChar": {
+ "latency": 5,
+ "latencyVariation": 1,
+ "throughput": 1000,
+ "packetLoss": 0
+ },
+ "networkLocations": [
+ {
+ "id": "zone1-DEFAULT",
+ "name": "zone1-DEFAULT",
+ "type": "DEFAULT",
+ "terminalLinkLatency": 1,
+ "terminalLinkLatencyVariation": 1,
+ "terminalLinkThroughput": 1000,
+ "terminalLinkPacketLoss": 0,
+ "physicalLocations": [
+ {
+ "id": "97b80da7-a74a-4649-bb61-f7fa4fbb2d76",
+ "name": "zone1-edge1",
+ "type": "EDGE",
+ "isExternal": false,
+ "linkLatency": 0,
+ "linkLatencyVariation": 0,
+ "linkThroughput": 1000,
+ "linkPacketLoss": 0,
+ "processes": [
+ {
+ "id": "fcf1269c-a061-448e-aa80-6dd9c2d4c548",
+ "name": "zone1-edge1-iperf",
+ "type": "EDGE-APP",
+ "isExternal": false,
+ "userChartLocation": null,
+ "userChartAlternateValues": null,
+ "userChartGroup": null,
+ "image": "meep-docker-registry:30001/iperf-server",
+ "environment": "",
+ "commandArguments": "-c, export; iperf -s -p $IPERF_SERVICE_PORT",
+ "commandExe": "/bin/bash",
+ "serviceConfig": {
+ "name": "zone1-edge1-iperf",
+ "meSvcName": "iperf",
+ "ports": [
+ {
+ "protocol": "UDP",
+ "port": 80,
+ "externalPort": null
+ }
+ ]
+ },
+ "gpuConfig": null,
+ "externalConfig": null,
+ "appLatency": 0,
+ "appLatencyVariation": 0,
+ "appThroughput": 1000,
+ "appPacketLoss": 0,
+ "placementId": ""
+ },
+ {
+ "id": "35697e68-c627-4b8d-9cd7-ad8b8e226aee",
+ "name": "zone1-edge1-svc",
+ "type": "EDGE-APP",
+ "isExternal": false,
+ "userChartLocation": null,
+ "userChartAlternateValues": null,
+ "userChartGroup": null,
+ "image": "meep-docker-registry:30001/demo-server",
+ "environment": "MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-edge1-svc, MGM_APP_PORT=80",
+ "commandArguments": "",
+ "commandExe": "",
+ "serviceConfig": {
+ "name": "zone1-edge1-svc",
+ "meSvcName": "svc",
+ "ports": [
+ {
+ "protocol": "TCP",
+ "port": 80,
+ "externalPort": null
+ }
+ ]
+ },
+ "gpuConfig": null,
+ "externalConfig": null,
+ "appLatency": 0,
+ "appLatencyVariation": 0,
+ "appThroughput": 1000,
+ "appPacketLoss": 0,
+ "placementId": ""
+ }
+ ],
+ "label": "zone1-edge1"
+ }
+ ]
+ },
+ {
+ "id": "7a6f8077-b0b3-403d-b954-3351e21afeb7",
+ "name": "zone1-poa-cell1",
+ "type": "POA-CELLULAR",
+ "terminalLinkLatency": 1,
+ "terminalLinkLatencyVariation": 1,
+ "terminalLinkThroughput": 1000,
+ "terminalLinkPacketLoss": 0,
+ "physicalLocations": [
+ {
+ "id": "32a2ced4-a262-49a8-8503-8489a94386a2",
+ "name": "ue1",
+ "type": "UE",
+ "isExternal": false,
+ "linkLatency": 0,
+ "linkLatencyVariation": 0,
+ "linkThroughput": 1000,
+ "linkPacketLoss": 0,
+ "processes": [
+ {
+ "id": "9bdd6acd-f6e4-44f6-a26c-8fd9abd338a7",
+ "name": "ue1-iperf",
+ "type": "UE-APP",
+ "isExternal": false,
+ "userChartLocation": null,
+ "userChartAlternateValues": null,
+ "userChartGroup": null,
+ "image": "meep-docker-registry:30001/iperf-client",
+ "environment": "",
+ "commandArguments": "-c, export; iperf -u -c $IPERF_SERVICE_HOST -p $IPERF_SERVICE_PORT -t 3600 -b 50M;",
+ "commandExe": "/bin/bash",
+ "serviceConfig": null,
+ "gpuConfig": null,
+ "externalConfig": null,
+ "appLatency": 0,
+ "appLatencyVariation": 0,
+ "appThroughput": 1000,
+ "appPacketLoss": 0,
+ "placementId": ""
+ }
+ ],
+ "label": "ue1"
+ },
+ {
+ "id": "b1851da5-c9e1-4bd8-ad23-5925c82ee127",
+ "name": "zone1-fog1",
+ "type": "FOG",
+ "isExternal": false,
+ "linkLatency": 0,
+ "linkLatencyVariation": 0,
+ "linkThroughput": 1000,
+ "linkPacketLoss": 0,
+ "processes": [
+ {
+ "id": "c2f2fb5d-4053-4cee-a0ee-e62bbb7751b6",
+ "name": "zone1-fog1-iperf",
+ "type": "EDGE-APP",
+ "isExternal": false,
+ "userChartLocation": null,
+ "userChartAlternateValues": null,
+ "userChartGroup": null,
+ "image": "meep-docker-registry:30001/iperf-server",
+ "environment": "",
+ "commandArguments": "-c, export; iperf -s -p $IPERF_SERVICE_PORT;",
+ "commandExe": "/bin/bash",
+ "serviceConfig": {
+ "name": "zone1-fog1-iperf",
+ "meSvcName": "iperf",
+ "ports": [
+ {
+ "protocol": "UDP",
+ "port": 80,
+ "externalPort": null
+ }
+ ]
+ },
+ "gpuConfig": null,
+ "externalConfig": null,
+ "appLatency": 0,
+ "appLatencyVariation": 0,
+ "appThroughput": 1000,
+ "appPacketLoss": 0,
+ "placementId": ""
+ },
+ {
+ "id": "53b5806b-e213-4c5a-a181-f1c31c24287b",
+ "name": "zone1-fog1-svc",
+ "type": "EDGE-APP",
+ "isExternal": false,
+ "userChartLocation": null,
+ "userChartAlternateValues": null,
+ "userChartGroup": null,
+ "image": "meep-docker-registry:30001/demo-server",
+ "environment": "MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-fog1-svc, MGM_APP_PORT=80",
+ "commandArguments": "",
+ "commandExe": "",
+ "serviceConfig": {
+ "name": "zone1-fog1-svc",
+ "meSvcName": "svc",
+ "ports": [
+ {
+ "protocol": "TCP",
+ "port": 80,
+ "externalPort": null
+ }
+ ]
+ },
+ "gpuConfig": null,
+ "externalConfig": null,
+ "appLatency": 0,
+ "appLatencyVariation": 0,
+ "appThroughput": 1000,
+ "appPacketLoss": 0,
+ "placementId": ""
+ }
+ ],
+ "label": "zone1-fog1"
+ },
+ {
+ "id": "9fe500e3-2cf8-46e6-acdd-07a445edef6c",
+ "name": "ue2-ext",
+ "type": "UE",
+ "isExternal": true,
+ "linkLatency": 0,
+ "linkLatencyVariation": 0,
+ "linkThroughput": 1000,
+ "linkPacketLoss": 0,
+ "processes": [
+ {
+ "id": "4bed3902-c769-4c94-bcf8-95aee67d1e03",
+ "name": "ue2-svc",
+ "type": "UE-APP",
+ "isExternal": true,
+ "userChartLocation": null,
+ "userChartAlternateValues": null,
+ "userChartGroup": null,
+ "image": null,
+ "environment": null,
+ "commandArguments": null,
+ "commandExe": null,
+ "serviceConfig": null,
+ "gpuConfig": null,
+ "externalConfig": {
+ "ingressServiceMap": [],
+ "egressServiceMap": []
+ },
+ "appLatency": 0,
+ "appLatencyVariation": 0,
+ "appThroughput": 1000,
+ "appPacketLoss": 0,
+ "placementId": ""
+ }
+ ],
+ "label": "ue2-ext"
+ }
+ ],
+ "cellularPoaConfig": {
+ "cellId": "2345678"
+ }
+ },
+ {
+ "id": "7ff90180-2c1a-4c11-b59a-3608c5d8d874",
+ "name": "zone1-poa-cell2",
+ "type": "POA-CELLULAR",
+ "terminalLinkLatency": 1,
+ "terminalLinkLatencyVariation": 1,
+ "terminalLinkThroughput": 1000,
+ "terminalLinkPacketLoss": 0,
+ "physicalLocations": [],
+ "cellularPoaConfig": {
+ "cellId": "3456789"
+ }
+ }
+ ],
+ "label": "zone1"
+ },
+ {
+ "id": "d1f06b00-4454-4d35-94a5-b573888e7ea9",
+ "name": "zone2",
+ "type": "ZONE",
+ "netChar": {
+ "latency": 5,
+ "latencyVariation": 1,
+ "throughput": 1000,
+ "packetLoss": 0
+ },
+ "networkLocations": [
+ {
+ "id": "zone2-DEFAULT",
+ "name": "zone2-DEFAULT",
+ "type": "DEFAULT",
+ "terminalLinkLatency": 1,
+ "terminalLinkLatencyVariation": 1,
+ "terminalLinkThroughput": 1000,
+ "terminalLinkPacketLoss": 0,
+ "physicalLocations": [
+ {
+ "id": "fb130d18-fd81-43e0-900c-c584e7190302",
+ "name": "zone2-edge1",
+ "type": "EDGE",
+ "isExternal": false,
+ "linkLatency": 0,
+ "linkLatencyVariation": 0,
+ "linkThroughput": 1000,
+ "linkPacketLoss": 0,
+ "processes": [
+ {
+ "id": "5c8276ba-0b78-429d-a0bf-d96f35ba2c77",
+ "name": "zone2-edge1-iperf",
+ "type": "EDGE-APP",
+ "isExternal": false,
+ "userChartLocation": null,
+ "userChartAlternateValues": null,
+ "userChartGroup": null,
+ "image": "meep-docker-registry:30001/iperf-server",
+ "environment": "",
+ "commandArguments": "-c, export; iperf -s -p $IPERF_SERVICE_PORT;",
+ "commandExe": "/bin/bash",
+ "serviceConfig": {
+ "name": "zone2-edge1-iperf",
+ "meSvcName": "iperf",
+ "ports": [
+ {
+ "protocol": "UDP",
+ "port": 80,
+ "externalPort": null
+ }
+ ]
+ },
+ "gpuConfig": null,
+ "externalConfig": null,
+ "appLatency": 0,
+ "appLatencyVariation": 0,
+ "appThroughput": 1000,
+ "appPacketLoss": 0,
+ "placementId": ""
+ },
+ {
+ "id": "53fa28f0-80e2-414c-8841-86db9bd37d51",
+ "name": "zone2-edge1-svc",
+ "type": "EDGE-APP",
+ "isExternal": false,
+ "userChartLocation": null,
+ "userChartAlternateValues": null,
+ "userChartGroup": null,
+ "image": "meep-docker-registry:30001/demo-server",
+ "environment": "MGM_GROUP_NAME=svc, MGM_APP_ID=zone2-edge1-svc, MGM_APP_PORT=80",
+ "commandArguments": "",
+ "commandExe": "",
+ "serviceConfig": {
+ "name": "zone2-edge1-svc",
+ "meSvcName": "svc",
+ "ports": [
+ {
+ "protocol": "TCP",
+ "port": 80,
+ "externalPort": null
+ }
+ ]
+ },
+ "gpuConfig": null,
+ "externalConfig": null,
+ "appLatency": 0,
+ "appLatencyVariation": 0,
+ "appThroughput": 1000,
+ "appPacketLoss": 0,
+ "placementId": ""
+ }
+ ],
+ "label": "zone2-edge1"
+ }
+ ]
+ },
+ {
+ "id": "c44b8937-58af-44b2-acdb-e4d1c4a1510b",
+ "name": "zone2-poa1",
+ "type": "POA",
+ "terminalLinkLatency": 1,
+ "terminalLinkLatencyVariation": 1,
+ "terminalLinkThroughput": 20,
+ "terminalLinkPacketLoss": 0,
+ "physicalLocations": [],
+ "label": "zone2-poa1"
+ }
+ ],
+ "label": "zone2"
+ }
+ ],
+ "cellularDomainConfig": {
+ "mcc": "123",
+ "mnc": "456",
+ "defaultCellId": "1234567"
+ }
+ }
+ ]
+ }
+}
+`
+
+const redisTestAddr = "localhost:30380"
+const influxTestAddr = "http://localhost:30986"
+const postgisTestHost = "localhost"
+const postgisTestPort = "30432"
+const testScenarioName = "testScenario"
+
+var m *mod.Model
+var mqLocal *mq.MsgQueue
+
+func TestNotImplemented(t *testing.T) {
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ //s1_bearer_info
+ _, err := sendRequest(http.MethodGet, "/queries/s1_bearer_info", nil, nil, nil, http.StatusNotImplemented, S1BearerInfoGET)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ //rab_info
+ _, err = sendRequest(http.MethodGet, "/queries/rab_info", nil, nil, nil, http.StatusNotImplemented, RabInfoGET)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ //subscriptions s1_bearer
+ _, err = sendRequest(http.MethodGet, "/subscriptions/s1_bearer", nil, nil, nil, http.StatusNotImplemented, SubscriptionLinkListSubscriptionsS1GET)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodGet, "/subscriptions/s1_bearer", nil, nil, nil, http.StatusNotImplemented, S1BearerSubscriptionSubscriptionsGET)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodPost, "/subscriptions/s1_bearer", nil, nil, nil, http.StatusNotImplemented, S1BearerSubscriptionSubscriptionsPOST)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodPut, "/subscriptions/s1_bearer", nil, nil, nil, http.StatusNotImplemented, S1BearerSubscriptionSubscriptionsPUT)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodDelete, "/subscriptions/s1_bearer", nil, nil, nil, http.StatusNotImplemented, S1BearerSubscriptionsSubscrIdDELETE)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ //subscriptions ta
+ _, err = sendRequest(http.MethodGet, "/subscriptions/ta", nil, nil, nil, http.StatusNotImplemented, SubscriptionLinkListSubscriptionsTaGET)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodGet, "/subscriptions/ta", nil, nil, nil, http.StatusNotImplemented, MeasTaSubscriptionsGET)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodPost, "/subscriptions/ta", nil, nil, nil, http.StatusNotImplemented, MeasTaSubscriptionsPOST)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodPut, "/subscriptions/ta", nil, nil, nil, http.StatusNotImplemented, MeasTaSubscriptionsPUT)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodDelete, "/subscriptions/ta", nil, nil, nil, http.StatusNotImplemented, MeasTaSubscriptionsSubscrIdDELETE)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ //subscriptions meas rep ue
+ _, err = sendRequest(http.MethodGet, "/subscriptions/meas_rep_ue", nil, nil, nil, http.StatusNotImplemented, SubscriptionLinkListSubscriptionsMrGET)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodGet, "/subscriptions/meas_rep_ue", nil, nil, nil, http.StatusNotImplemented, MeasRepUeSubscriptionsGET)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodPost, "/subscriptions/meas_rep_ue", nil, nil, nil, http.StatusNotImplemented, MeasRepUeSubscriptionsPOST)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodPut, "/subscriptions/meas_rep_ue", nil, nil, nil, http.StatusNotImplemented, MeasRepUeReportSubscriptionsPUT)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodDelete, "/subscriptions/meas_rep_ue", nil, nil, nil, http.StatusNotImplemented, MeasRepUeSubscriptionsSubscrIdDELETE)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ //subscriptions rab est
+ _, err = sendRequest(http.MethodGet, "/subscriptions/rab_est", nil, nil, nil, http.StatusNotImplemented, SubscriptionLinkListSubscriptionsReGET)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodGet, "/subscriptions/rab_est", nil, nil, nil, http.StatusNotImplemented, RabEstSubscriptionSubscriptionsGET)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodPost, "/subscriptions/rab_est", nil, nil, nil, http.StatusNotImplemented, RabEstSubscriptionSubscriptionsPOST)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodPut, "/subscriptions/rab_est", nil, nil, nil, http.StatusNotImplemented, RabEstSubscriptionSubscriptionsPUT)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodDelete, "/subscriptions/rab_est", nil, nil, nil, http.StatusNotImplemented, RabEstSubscriptionsSubscrIdDELETE)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ //subscriptions rab mod
+ _, err = sendRequest(http.MethodGet, "/subscriptions/rab_mod", nil, nil, nil, http.StatusNotImplemented, SubscriptionLinkListSubscriptionsRmGET)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodGet, "/subscriptions/rab_mod", nil, nil, nil, http.StatusNotImplemented, RabModSubscriptionSubscriptionsGET)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodPost, "/subscriptions/rab_mod", nil, nil, nil, http.StatusNotImplemented, RabModSubscriptionSubscriptionsPOST)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodPut, "/subscriptions/rab_mod", nil, nil, nil, http.StatusNotImplemented, RabModSubscriptionSubscriptionsPUT)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodDelete, "/subscriptions/rab_mod", nil, nil, nil, http.StatusNotImplemented, RabModSubscriptionsSubscrIdDELETE)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ //subscriptions rab rel
+ _, err = sendRequest(http.MethodGet, "/subscriptions/rab_rel", nil, nil, nil, http.StatusNotImplemented, SubscriptionLinkListSubscriptionsRrGET)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodGet, "/subscriptions/rab_rel", nil, nil, nil, http.StatusNotImplemented, RabRelSubscriptionSubscriptionsGET)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodPost, "/subscriptions/rab_rel", nil, nil, nil, http.StatusNotImplemented, RabRelSubscriptionSubscriptionsPOST)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodPut, "/subscriptions/rab_rel", nil, nil, nil, http.StatusNotImplemented, RabRelSubscriptionSubscriptionsPUT)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodDelete, "/subscriptions/rab_rel", nil, nil, nil, http.StatusNotImplemented, RabRelSubscriptionsSubscrIdDELETE)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ //subscriptions ca reconf
+ _, err = sendRequest(http.MethodGet, "/subscriptions/ca_reconf", nil, nil, nil, http.StatusNotImplemented, SubscriptionLinkListSubscriptionsCrGET)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodGet, "/subscriptions/ca_reconf", nil, nil, nil, http.StatusNotImplemented, CaReConfSubscriptionSubscriptionsGET)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodPost, "/subscriptions/ca_reconf", nil, nil, nil, http.StatusNotImplemented, CaReConfSubscriptionSubscriptionsPOST)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodPut, "/subscriptions/ca_reconf", nil, nil, nil, http.StatusNotImplemented, CaReConfSubscriptionSubscriptionsPUT)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ _, err = sendRequest(http.MethodDelete, "/subscriptions/ca_reconf", nil, nil, nil, http.StatusNotImplemented, CaReConfSubscriptionsSubscrIdDELETE)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+}
+
+func TestSuccessSubscriptionCellChange(t *testing.T) {
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ initializeVars()
+
+ err := Init()
+ if err != nil {
+ t.Fatalf("Error initializing test basic procedure")
+ }
+ err = Run()
+ if err != nil {
+ t.Fatalf("Error running test basic procedure")
+ }
+
+ fmt.Println("Set a scenario")
+ initialiseScenario(testScenario)
+
+ //post
+ expectedGetResp := testSubscriptionCellChangePost(t)
+
+ //get
+ testSubscriptionCellChangeGet(t, strconv.Itoa(nextSubscriptionIdAvailable-1), expectedGetResp)
+
+ //put
+ expectedGetResp = testSubscriptionCellChangePut(t, strconv.Itoa(nextSubscriptionIdAvailable-1), true)
+
+ //get
+ testSubscriptionCellChangeGet(t, strconv.Itoa(nextSubscriptionIdAvailable-1), expectedGetResp)
+
+ //delete
+ testSubscriptionCellChangeDelete(t, strconv.Itoa(nextSubscriptionIdAvailable-1))
+
+ terminateScenario()
+}
+
+func TestFailSubscriptionCellChange(t *testing.T) {
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ initializeVars()
+
+ err := Init()
+ if err != nil {
+ t.Fatalf("Error initializing test basic procedure")
+ }
+ err = Run()
+ if err != nil {
+ t.Fatalf("Error running test basic procedure")
+ }
+
+ fmt.Println("Set a scenario")
+ initialiseScenario(testScenario)
+
+ //get
+ testSubscriptionCellChangeGet(t, strconv.Itoa(nextSubscriptionIdAvailable), "")
+
+ //put
+ _ = testSubscriptionCellChangePut(t, strconv.Itoa(nextSubscriptionIdAvailable), false)
+
+ //delete
+ testSubscriptionCellChangeDelete(t, strconv.Itoa(nextSubscriptionIdAvailable))
+
+ terminateScenario()
+}
+
+func TestSubscriptionsListGet(t *testing.T) {
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ initializeVars()
+
+ err := Init()
+ if err != nil {
+ t.Fatalf("Error initializing test basic procedure")
+ }
+ err = Run()
+ if err != nil {
+ t.Fatalf("Error running test basic procedure")
+ }
+
+ fmt.Println("Set a scenario")
+ initialiseScenario(testScenario)
+
+ //post
+ _ = testSubscriptionCellChangePost(t)
+ _ = testSubscriptionCellChangePost(t)
+
+ //get list cc
+ testSubscriptionListCellChangeGet(t)
+
+ //get list
+ testSubscriptionListGet(t)
+
+ //delete
+ testSubscriptionCellChangeDelete(t, strconv.Itoa(nextSubscriptionIdAvailable-1))
+ testSubscriptionCellChangeDelete(t, strconv.Itoa(nextSubscriptionIdAvailable-2))
+
+ terminateScenario()
+}
+
+func testSubscriptionListGet(t *testing.T) {
+ /******************************
+ * expected response section
+ ******************************/
+ expectedSubscriptionNb := 2
+
+ /******************************
+ * request vars section
+ ******************************/
+
+ /******************************
+ * request body section
+ ******************************/
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+
+ rr, err := sendRequest(http.MethodGet, "/subscriptions/cell_change", nil, nil, nil, http.StatusOK, SubscriptionLinkListSubscriptionsGET)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ var respBody InlineResponse2003
+ err = json.Unmarshal([]byte(rr), &respBody)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ nb := 0
+ for range respBody.SubscriptionLinkList.Subscription {
+ nb++
+ }
+ if nb != expectedSubscriptionNb {
+ t.Fatalf("Failed to get expected response")
+ }
+}
+
+func testSubscriptionListCellChangeGet(t *testing.T) {
+ /******************************
+ * expected response section
+ ******************************/
+ expectedSubscriptionNb := 2
+
+ /******************************
+ * request vars section
+ ******************************/
+
+ /******************************
+ * request body section
+ ******************************/
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+
+ rr, err := sendRequest(http.MethodGet, "/subscriptions/cell_change", nil, nil, nil, http.StatusOK, SubscriptionLinkListSubscriptionsCcGET)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ var respBody InlineResponse2003
+ err = json.Unmarshal([]byte(rr), &respBody)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ nb := 0
+ for _, sub := range respBody.SubscriptionLinkList.Subscription {
+ if *sub.SubscriptionType == CELL_CHANGE {
+ nb++
+ } else {
+ t.Fatalf("Failed to get expected response")
+ }
+ }
+ if nb != expectedSubscriptionNb {
+ t.Fatalf("Failed to get expected response")
+ }
+}
+
+func testSubscriptionCellChangePost(t *testing.T) string {
+
+ /******************************
+ * expected response section
+ ******************************/
+ hostatus := COMPLETED
+ expectedFilter := FilterCriteriaAssocHo{"myApp", &AssociateId{"UE_IPV4_ADDRESS", "1.1.1.1"}, &Plmn{"111", "222"}, []string{"1234567"}, &hostatus}
+ expectedCallBackRef := "myCallbakRef"
+ expectedLink := Link{"/" + testScenarioName + "/rni/v1/subscriptions/cell_change/" + strconv.Itoa(nextSubscriptionIdAvailable)}
+ expectedExpiry := TimeStamp{1988599770, 0}
+ expectedResponse := InlineResponse201{&CellChangeSubscription{expectedCallBackRef, &expectedLink, &expectedFilter, &expectedExpiry}}
+
+ expectedResponseStr, err := json.Marshal(expectedResponse)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ /******************************
+ * request vars section
+ ******************************/
+
+ /******************************
+ * request body section
+ ******************************/
+
+ //filter is not exactly the same in response and request
+ filterCriteria := expectedFilter
+ filterCriteria.HoStatus = nil
+ cellChangeSubscriptionPost1 := CellChangeSubscriptionPost1{&CellChangeSubscriptionPost{expectedCallBackRef, &filterCriteria, &expectedExpiry}}
+
+ body, err := json.Marshal(cellChangeSubscriptionPost1)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+
+ rr, err := sendRequest(http.MethodPost, "/subscriptions/cell_change", bytes.NewBuffer(body), nil, nil, http.StatusCreated, CellChangeSubscriptionsPOST)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ var respBody InlineResponse201
+ err = json.Unmarshal([]byte(rr), &respBody)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ if rr != string(expectedResponseStr) {
+ t.Fatalf("Failed to get expected response")
+ }
+ return string(expectedResponseStr)
+}
+
+func testSubscriptionCellChangePut(t *testing.T, subscriptionId string, expectSuccess bool) string {
+
+ /******************************
+ * expected response section
+ ******************************/
+ hostatus := COMPLETED
+ expectedFilter := FilterCriteriaAssocHo{"myApp", &AssociateId{"UE_IPV4_ADDRESS", "2.2.2.2"}, &Plmn{"111", "222"}, []string{"1234567"}, &hostatus}
+ expectedCallBackRef := "myCallbakRef"
+ expectedLink := Link{"/" + testScenarioName + "/rni/v1/subscriptions/cell_change/" + subscriptionId}
+ expectedExpiry := TimeStamp{1988599770, 0}
+ expectedResponse := InlineResponse2004{&CellChangeSubscription{expectedCallBackRef, &expectedLink, &expectedFilter, &expectedExpiry}}
+
+ expectedResponseStr, err := json.Marshal(expectedResponse)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ /******************************
+ * request vars section
+ ******************************/
+ vars := make(map[string]string)
+ vars["subscriptionId"] = subscriptionId
+
+ /******************************
+ * request body section
+ ******************************/
+ cellChangeSubscription1 := CellChangeSubscription1{&CellChangeSubscription{expectedCallBackRef, &expectedLink, &expectedFilter, &expectedExpiry}}
+
+ body, err := json.Marshal(cellChangeSubscription1)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+
+ if expectSuccess {
+ rr, err := sendRequest(http.MethodPost, "/subscriptions/cell_change", bytes.NewBuffer(body), vars, nil, http.StatusOK, CellChangeSubscriptionsPUT)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ var respBody InlineResponse2004
+ err = json.Unmarshal([]byte(rr), &respBody)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ if rr != string(expectedResponseStr) {
+ t.Fatalf("Failed to get expected response")
+ }
+ return string(expectedResponseStr)
+ } else {
+ _, err = sendRequest(http.MethodPost, "/subscriptions/cell_change", bytes.NewBuffer(body), vars, nil, http.StatusNotFound, CellChangeSubscriptionsPUT)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ return ""
+ }
+}
+
+func testSubscriptionCellChangeGet(t *testing.T, subscriptionId string, expectedResponse string) {
+
+ /******************************
+ * expected response section
+ ******************************/
+ //passed as a parameter since a POST had to be sent first
+
+ /******************************
+ * request vars section
+ ******************************/
+ vars := make(map[string]string)
+ vars["subscriptionId"] = subscriptionId
+
+ /******************************
+ * request body section
+ ******************************/
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+ var err error
+ if expectedResponse == "" {
+ _, err = sendRequest(http.MethodGet, "/subscriptions/cell_change", nil, vars, nil, http.StatusNotFound, CellChangeSubscriptionsGET)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ } else {
+ rr, err := sendRequest(http.MethodGet, "/subscriptions/cell_change", nil, vars, nil, http.StatusOK, CellChangeSubscriptionsGET)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ var respBody InlineResponse2004
+ err = json.Unmarshal([]byte(rr), &respBody)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ if rr != expectedResponse {
+ t.Fatalf("Failed to get expected response")
+ }
+ }
+}
+
+func testSubscriptionCellChangeDelete(t *testing.T, subscriptionId string) {
+
+ /******************************
+ * expected response section
+ ******************************/
+
+ /******************************
+ * request vars section
+ ******************************/
+ vars := make(map[string]string)
+ vars["subscriptionId"] = subscriptionId
+
+ /******************************
+ * request body section
+ ******************************/
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+
+ _, err := sendRequest(http.MethodDelete, "/subscriptions/cell_change", nil, vars, nil, http.StatusNoContent, CellChangeSubscriptionsSubscrIdDELETE)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+}
+
+func TestExpiryNotification(t *testing.T) {
+
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ initializeVars()
+
+ err := Init()
+ if err != nil {
+ t.Fatalf("Error initializing test basic procedure")
+ }
+ err = Run()
+ if err != nil {
+ t.Fatalf("Error running test basic procedure")
+ }
+
+ fmt.Println("Set a scenario")
+ initialiseScenario(testScenario)
+
+ /******************************
+ * expected response section
+ ******************************/
+ hostatus := COMPLETED
+ expectedFilter := FilterCriteriaAssocHo{"myApp", &AssociateId{"UE_IPV4_ADDRESS", "1.1.1.1"}, &Plmn{"111", "222"}, []string{"1234567"}, &hostatus}
+ expectedCallBackRef := "myCallbakRef"
+ expectedExpiry := TimeStamp{12321, 0}
+
+ /******************************
+ * request vars section
+ ******************************/
+
+ /******************************
+ * request body section
+ ******************************/
+
+ //filter is not exactly the same in response and request
+ filterCriteria := expectedFilter
+ filterCriteria.HoStatus = nil
+ cellChangeSubscriptionPost1 := CellChangeSubscriptionPost1{&CellChangeSubscriptionPost{expectedCallBackRef, &filterCriteria, &expectedExpiry}}
+
+ body, err := json.Marshal(cellChangeSubscriptionPost1)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+
+ _, err = sendRequest(http.MethodPost, "/subscriptions/cell_change", bytes.NewBuffer(body), nil, nil, http.StatusCreated, CellChangeSubscriptionsPOST)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ time.Sleep(1 * time.Second)
+
+ fmt.Println("Create valid Metric Store to get logs from")
+ metricStore, err := ms.NewMetricStore(currentStoreName, sandboxName, influxTestAddr, redisTestAddr)
+ if err != nil {
+ t.Fatalf("Failed to create store")
+ }
+
+ httpLog, err := metricStore.GetHttpMetric(logModuleRNIS, "TX", "", 1)
+ if err != nil || len(httpLog) != 1 {
+ t.Fatalf("Failed to get metric")
+ }
+
+ var expiryNotification rnisNotif.ExpiryNotification
+ err = json.Unmarshal([]byte(httpLog[0].Body), &expiryNotification)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ //only check for expiry time, other values are dynamic such as the timestamp
+ if expiryNotification.ExpiryDeadline.Seconds != expectedExpiry.Seconds {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ /******************************
+ * back to initial state section
+ ******************************/
+ terminateScenario()
+
+}
+
+func TestSubscriptionNotification(t *testing.T) {
+
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ initializeVars()
+
+ err := Init()
+ if err != nil {
+ t.Fatalf("Error initializing test basic procedure")
+ }
+ err = Run()
+ if err != nil {
+ t.Fatalf("Error running test basic procedure")
+ }
+
+ fmt.Println("Set a scenario")
+ initialiseScenario(testScenario)
+
+ /******************************
+ * expected response section
+ ******************************/
+ hostatus := COMPLETED
+ expectedSrcPlmn := Plmn{"123", "456"}
+ expectedSrcPlmnInNotif := rnisNotif.Plmn{Mcc: "123", Mnc: "456"}
+ expectedSrcCellId := []string{"2345678"}
+ expectedSrcEcgi := rnisNotif.Ecgi{Plmn: &expectedSrcPlmnInNotif, CellId: expectedSrcCellId}
+ expectedDstPlmnInNotif := rnisNotif.Plmn{Mcc: "123", Mnc: "456"}
+ expectedDstCellId := []string{"1234567"}
+ expectedDstEcgi := rnisNotif.Ecgi{Plmn: &expectedDstPlmnInNotif, CellId: expectedDstCellId}
+ movingUeAddr := "ue1" //based on the scenario change
+ expectedFilter := FilterCriteriaAssocHo{"", &AssociateId{"UE_IPV4_ADDRESS", movingUeAddr}, &expectedSrcPlmn, expectedSrcCellId, &hostatus}
+ expectedCallBackRef := "myCallbakRef"
+ expectedExpiry := TimeStamp{1988599770, 0}
+
+ /******************************
+ * request vars section
+ ******************************/
+
+ /******************************
+ * request body section
+ ******************************/
+
+ //filter is not exactly the same in response and request
+ filterCriteria := expectedFilter
+ filterCriteria.HoStatus = nil
+ cellChangeSubscriptionPost1 := CellChangeSubscriptionPost1{&CellChangeSubscriptionPost{expectedCallBackRef, &filterCriteria, &expectedExpiry}}
+
+ body, err := json.Marshal(cellChangeSubscriptionPost1)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ /******************************
+ * request execution section
+ ******************************/
+
+ _, err = sendRequest(http.MethodPost, "/subscriptions/cell_change", bytes.NewBuffer(body), nil, nil, http.StatusCreated, CellChangeSubscriptionsPOST)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ updateScenario("mobility1")
+
+ fmt.Println("Create valid Metric Store")
+ metricStore, err := ms.NewMetricStore(currentStoreName, sandboxName, influxTestAddr, redisTestAddr)
+ if err != nil {
+ t.Fatalf("Failed to create a store")
+ }
+
+ httpLog, err := metricStore.GetHttpMetric(logModuleRNIS, "TX", "", 1)
+ if err != nil || len(httpLog) != 1 {
+ t.Fatalf("Failed to get metric")
+ }
+
+ var notification rnisNotif.CellChangeNotification
+ err = json.Unmarshal([]byte(httpLog[0].Body), ¬ification)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ //transform the src and target ecgi in string for comparison purpose
+ jsonResult, err := json.Marshal(notification.SrcEcgi)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+ notificationSrcEcgiStr := string(jsonResult)
+
+ jsonResult, err = json.Marshal(notification.TrgEcgi[0])
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+ notificationTargetEcgiStr := string(jsonResult)
+
+ jsonResult, err = json.Marshal(expectedSrcEcgi)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+ expectedSrcEcgiStr := string(jsonResult)
+
+ jsonResult, err = json.Marshal(expectedDstEcgi)
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+ expectedTargetEcgiStr := string(jsonResult)
+
+ //only check for src and target ecgi, other values are dynamic such as the timestamp
+ if (notificationSrcEcgiStr != expectedSrcEcgiStr) || (notificationTargetEcgiStr != expectedTargetEcgiStr) {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ //cleanup allocated subscription
+ testSubscriptionCellChangeDelete(t, strconv.Itoa(nextSubscriptionIdAvailable-1))
+
+ /******************************
+ * back to initial state section
+ ******************************/
+ terminateScenario()
+
+}
+
+func TestSbi(t *testing.T) {
+
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ initializeVars()
+
+ err := Init()
+ if err != nil {
+ t.Fatalf("Error initializing test basic procedure")
+ }
+ err = Run()
+ if err != nil {
+ t.Fatalf("Error running test basic procedure")
+ }
+
+ /******************************
+ * expected values section
+ ******************************/
+ var expectedUeEcgiStr [2]string
+ var expectedUeEcgi [2]Ecgi
+ expectedUeEcgi[INITIAL] = Ecgi{&Plmn{"123", "456"}, []string{"2345678"}}
+ expectedUeEcgi[UPDATED] = Ecgi{&Plmn{"123", "456"}, []string{"1234567"}}
+
+ var expectedAppEcgiStr [2]string
+ var expectedAppEcgi [2]Ecgi
+ expectedAppEcgi[INITIAL] = Ecgi{&Plmn{"123", "456"}, []string{"1234567"}}
+ expectedAppEcgi[UPDATED] = Ecgi{&Plmn{"123", "456"}, []string{"1234567"}}
+
+ j, err := json.Marshal(expectedUeEcgi[INITIAL])
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+ expectedUeEcgiStr[INITIAL] = string(j)
+
+ j, err = json.Marshal(expectedUeEcgi[UPDATED])
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+ expectedUeEcgiStr[UPDATED] = string(j)
+
+ j, err = json.Marshal(expectedAppEcgi[INITIAL])
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+ expectedAppEcgiStr[INITIAL] = string(j)
+
+ j, err = json.Marshal(expectedAppEcgi[UPDATED])
+ if err != nil {
+ t.Fatalf(err.Error())
+ }
+ expectedAppEcgiStr[UPDATED] = string(j)
+
+ /******************************
+ * execution section
+ ******************************/
+
+ fmt.Println("Set a scenario")
+ initialiseScenario(testScenario)
+
+ //different tests
+ ueName := "ue1"
+ appName := "zone1-edge1-iperf"
+
+ jsonEcgiInfo, _ := rc.JSONGetEntry(baseKey+"UE:"+ueName, ".")
+ if string(jsonEcgiInfo) != expectedUeEcgiStr[INITIAL] {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ jsonEcgiInfo, _ = rc.JSONGetEntry(baseKey+"APP:"+appName, ".")
+ if string(jsonEcgiInfo) != expectedAppEcgiStr[INITIAL] {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ updateScenario("mobility1")
+
+ jsonEcgiInfo, _ = rc.JSONGetEntry(baseKey+"UE:"+ueName, ".")
+ if string(jsonEcgiInfo) != expectedUeEcgiStr[UPDATED] {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ jsonEcgiInfo, _ = rc.JSONGetEntry(baseKey+"APP:"+appName, ".")
+ if string(jsonEcgiInfo) != expectedAppEcgiStr[UPDATED] {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ /******************************
+ * back to initial state section
+ ******************************/
+ terminateScenario()
+}
+
+func TestPlmnInfoGet(t *testing.T) {
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ initializeVars()
+
+ err := Init()
+ if err != nil {
+ t.Fatalf("Error initializing test basic procedure")
+ }
+ err = Run()
+ if err != nil {
+ t.Fatalf("Error running test basic procedure")
+ }
+
+ fmt.Println("Set a scenario")
+ initialiseScenario(testScenario)
+
+ /******************************
+ * expected response section
+ ******************************/
+ var expectedMcc [2]string
+ var expectedCellId [2]string
+ expectedMcc[INITIAL] = "123"
+ expectedMcc[UPDATED] = "123"
+ expectedCellId[INITIAL] = "2345678"
+ expectedCellId[UPDATED] = "1234567"
+
+ /******************************
+ * request vars section
+ ******************************/
+
+ /******************************
+ * request body section
+ ******************************/
+
+ /******************************
+ * request queries section
+ ******************************/
+
+ queries := make(map[string]string)
+ queries["app_ins_id"] = "ue1-iperf"
+
+ /******************************
+ * request execution section
+ ******************************/
+
+ rr, err := sendRequest(http.MethodGet, "/queries/plmn_info", nil, nil, queries, http.StatusOK, PlmnInfoGET)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ var respBody InlineResponse2001
+ err = json.Unmarshal([]byte(rr), &respBody)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ if respBody.PlmnInfo != nil {
+ if respBody.PlmnInfo[0].Ecgi.Plmn.Mcc != expectedMcc[INITIAL] {
+ t.Fatalf("Failed to get expected response")
+ }
+ if respBody.PlmnInfo[0].Ecgi.CellId[0] != expectedCellId[INITIAL] {
+ t.Fatalf("Failed to get expected response")
+ }
+ } else {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ updateScenario("mobility1")
+
+ rr, err = sendRequest(http.MethodGet, "/queries/plmn_info", nil, nil, queries, http.StatusOK, plmnInfoGET)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ err = json.Unmarshal([]byte(rr), &respBody)
+ if err != nil {
+ t.Fatalf("Failed to get expected response")
+ }
+ if respBody.PlmnInfo != nil {
+ if respBody.PlmnInfo[0].Ecgi.Plmn.Mcc != expectedMcc[UPDATED] {
+ t.Fatalf("Failed to get expected response")
+ }
+ if respBody.PlmnInfo[0].Ecgi.CellId[0] != expectedCellId[UPDATED] {
+ t.Fatalf("Failed to get expected response")
+ }
+ } else {
+ t.Fatalf("Failed to get expected response")
+ }
+
+ /******************************
+ * back to initial state section
+ ******************************/
+
+ terminateScenario()
+
+}
+
+func terminateScenario() {
+ if mqLocal != nil {
+ _ = Stop()
+ msg := mqLocal.CreateMsg(mq.MsgScenarioTerminate, mq.TargetAll, testScenarioName)
+ err := mqLocal.SendMsg(msg)
+ if err != nil {
+ log.Error("Failed to send message: ", err)
+ }
+ time.Sleep(100 * time.Millisecond)
+ }
+}
+
+func updateScenario(testUpdate string) {
+
+ switch testUpdate {
+ case "mobility1":
+ // mobility event of ue1 to zone2-poa1
+ elemName := "ue1"
+ destName := "zone2-poa1"
+
+ _, _, err := m.MoveNode(elemName, destName)
+ if err != nil {
+ log.Error("Error sending mobility event")
+ }
+
+ msg := mqLocal.CreateMsg(mq.MsgScenarioUpdate, mq.TargetAll, testScenarioName)
+ err = mqLocal.SendMsg(msg)
+ if err != nil {
+ log.Error("Failed to send message: ", err)
+ }
+ default:
+ }
+ time.Sleep(100 * time.Millisecond)
+}
+
+func initializeVars() {
+ mod.DbAddress = redisTestAddr
+ redisAddr = redisTestAddr
+ influxAddr = influxTestAddr
+ postgisHost = postgisTestHost
+ postgisPort = postgisTestPort
+ sandboxName = testScenarioName
+}
+
+func initialiseScenario(testScenario string) {
+
+ //clear DB
+ cleanUp()
+
+ cfg := mod.ModelCfg{
+ Name: testScenarioName,
+ Namespace: sandboxName,
+ Module: "test-mod",
+ UpdateCb: nil,
+ DbAddr: redisAddr,
+ }
+
+ var err error
+ m, err = mod.NewModel(cfg)
+ if err != nil {
+ log.Error("Failed to create model: ", err)
+ return
+ }
+
+ // Create message queue
+ mqLocal, err = mq.NewMsgQueue(mq.GetLocalName(testScenarioName), "test-mod", testScenarioName, redisAddr)
+ if err != nil {
+ log.Error("Failed to create Message Queue with error: ", err)
+ return
+ }
+ log.Info("Message Queue created")
+
+ fmt.Println("Set Model")
+ err = m.SetScenario([]byte(testScenario))
+ if err != nil {
+ log.Error("Failed to set model: ", err)
+ return
+ }
+
+ err = m.Activate()
+ if err != nil {
+ log.Error("Failed to activate scenario with err: ", err.Error())
+ return
+ }
+
+ msg := mqLocal.CreateMsg(mq.MsgScenarioActivate, mq.TargetAll, testScenarioName)
+ err = mqLocal.SendMsg(msg)
+ if err != nil {
+ log.Error("Failed to send message: ", err)
+ return
+ }
+
+ time.Sleep(100 * time.Millisecond)
+
+}
+
+func sendRequest(method string, url string, body io.Reader, vars map[string]string, query map[string]string, code int, f http.HandlerFunc) (string, error) {
+ req, err := http.NewRequest(method, url, body)
+ if err != nil || req == nil {
+ return "", err
+ }
+ if vars != nil {
+ req = mux.SetURLVars(req, vars)
+ }
+ if query != nil {
+ q := req.URL.Query()
+ for k, v := range query {
+ q.Add(k, v)
+ }
+ req.URL.RawQuery = q.Encode()
+ }
+
+ // We create a ResponseRecorder (which satisfies http.ResponseWriter) to record the response.
+ rr := httptest.NewRecorder()
+ handler := http.HandlerFunc(f)
+
+ // Our handlers satisfy http.Handler, so we can call their ServeHTTP method
+ // directly and pass in our Request and ResponseRecorder.
+ handler.ServeHTTP(rr, req)
+
+ time.Sleep(50 * time.Millisecond)
+
+ // Check the status code is what we expect.
+ if status := rr.Code; status != code {
+ s := fmt.Sprintf("Wrong status code - got %v want %v", status, code)
+ return "", errors.New(s)
+ }
+ return string(rr.Body.String()), nil
+}
diff --git a/go-apps/meep-rnis/server/routers.go b/go-apps/meep-rnis/server/routers.go
new file mode 100644
index 0000000000000000000000000000000000000000..a5dbc40240f41e20ac2efe223ed14aae1202079f
--- /dev/null
+++ b/go-apps/meep-rnis/server/routers.go
@@ -0,0 +1,381 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)
**Micro-service**
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
**Type & Usage**
Edge Service used by edge applications that want to get information about radio conditions in the network
**Details**
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+import (
+ "fmt"
+ "net/http"
+ "strings"
+
+ httpLog "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-http-logger"
+
+ "github.com/gorilla/mux"
+)
+
+type Route struct {
+ Name string
+ Method string
+ Pattern string
+ HandlerFunc http.HandlerFunc
+}
+
+type Routes []Route
+
+func NewRouter() *mux.Router {
+ router := mux.NewRouter().StrictSlash(true)
+ for _, route := range routes {
+ var handler http.Handler = route.HandlerFunc
+ handler = Logger(handler, route.Name)
+ handler = httpLog.LogRx(handler, "")
+
+ router.
+ Methods(route.Method).
+ Path(route.Pattern).
+ Name(route.Name).
+ Handler(handler)
+ }
+
+ return router
+}
+
+func Index(w http.ResponseWriter, r *http.Request) {
+ fmt.Fprintf(w, "Hello World!")
+}
+
+var routes = Routes{
+ Route{
+ "Index",
+ "GET",
+ "/rni/v1/",
+ Index,
+ },
+
+ Route{
+ "CaReConfSubscriptionSubscriptionsGET",
+ strings.ToUpper("Get"),
+ "/rni/v1/subscriptions/ca_reconf/{subscriptionId}",
+ CaReConfSubscriptionSubscriptionsGET,
+ },
+
+ Route{
+ "CaReConfSubscriptionSubscriptionsPOST",
+ strings.ToUpper("Post"),
+ "/rni/v1/subscriptions/ca_reconf",
+ CaReConfSubscriptionSubscriptionsPOST,
+ },
+
+ Route{
+ "CaReConfSubscriptionSubscriptionsPUT",
+ strings.ToUpper("Put"),
+ "/rni/v1/subscriptions/ca_reconf/{subscriptionId}",
+ CaReConfSubscriptionSubscriptionsPUT,
+ },
+
+ Route{
+ "CaReConfSubscriptionsSubscrIdDELETE",
+ strings.ToUpper("Delete"),
+ "/rni/v1/subscriptions/ca_reconf/{subscriptionId}",
+ CaReConfSubscriptionsSubscrIdDELETE,
+ },
+
+ Route{
+ "CellChangeSubscriptionsGET",
+ strings.ToUpper("Get"),
+ "/rni/v1/subscriptions/cell_change/{subscriptionId}",
+ CellChangeSubscriptionsGET,
+ },
+
+ Route{
+ "CellChangeSubscriptionsPOST",
+ strings.ToUpper("Post"),
+ "/rni/v1/subscriptions/cell_change",
+ CellChangeSubscriptionsPOST,
+ },
+
+ Route{
+ "CellChangeSubscriptionsPUT",
+ strings.ToUpper("Put"),
+ "/rni/v1/subscriptions/cell_change/{subscriptionId}",
+ CellChangeSubscriptionsPUT,
+ },
+
+ Route{
+ "CellChangeSubscriptionsSubscrIdDELETE",
+ strings.ToUpper("Delete"),
+ "/rni/v1/subscriptions/cell_change/{subscriptionId}",
+ CellChangeSubscriptionsSubscrIdDELETE,
+ },
+
+ Route{
+ "MeasRepUeReportSubscriptionsPUT",
+ strings.ToUpper("Put"),
+ "/rni/v1/subscriptions/meas_rep_ue/{subscriptionId}",
+ MeasRepUeReportSubscriptionsPUT,
+ },
+
+ Route{
+ "MeasRepUeSubscriptionsGET",
+ strings.ToUpper("Get"),
+ "/rni/v1/subscriptions/meas_rep_ue/{subscriptionId}",
+ MeasRepUeSubscriptionsGET,
+ },
+
+ Route{
+ "MeasRepUeSubscriptionsPOST",
+ strings.ToUpper("Post"),
+ "/rni/v1/subscriptions/meas_rep_ue",
+ MeasRepUeSubscriptionsPOST,
+ },
+
+ Route{
+ "MeasRepUeSubscriptionsSubscrIdDELETE",
+ strings.ToUpper("Delete"),
+ "/rni/v1/subscriptions/meas_rep_ue/{subscriptionId}",
+ MeasRepUeSubscriptionsSubscrIdDELETE,
+ },
+
+ Route{
+ "MeasTaSubscriptionsGET",
+ strings.ToUpper("Get"),
+ "/rni/v1/subscriptions/ta/{subscriptionId}",
+ MeasTaSubscriptionsGET,
+ },
+
+ Route{
+ "MeasTaSubscriptionsPOST",
+ strings.ToUpper("Post"),
+ "/rni/v1/subscriptions/ta",
+ MeasTaSubscriptionsPOST,
+ },
+
+ Route{
+ "MeasTaSubscriptionsPUT",
+ strings.ToUpper("Put"),
+ "/rni/v1/subscriptions/ta/{subscriptionId}",
+ MeasTaSubscriptionsPUT,
+ },
+
+ Route{
+ "MeasTaSubscriptionsSubscrIdDELETE",
+ strings.ToUpper("Delete"),
+ "/rni/v1/subscriptions/ta/{subscriptionId}",
+ MeasTaSubscriptionsSubscrIdDELETE,
+ },
+
+ Route{
+ "PlmnInfoGET",
+ strings.ToUpper("Get"),
+ "/rni/v1/queries/plmn_info",
+ PlmnInfoGET,
+ },
+
+ Route{
+ "RabEstSubscriptionSubscriptionsGET",
+ strings.ToUpper("Get"),
+ "/rni/v1/subscriptions/rab_est/{subscriptionId}",
+ RabEstSubscriptionSubscriptionsGET,
+ },
+
+ Route{
+ "RabEstSubscriptionSubscriptionsPOST",
+ strings.ToUpper("Post"),
+ "/rni/v1/subscriptions/rab_est",
+ RabEstSubscriptionSubscriptionsPOST,
+ },
+
+ Route{
+ "RabEstSubscriptionSubscriptionsPUT",
+ strings.ToUpper("Put"),
+ "/rni/v1/subscriptions/rab_est/{subscriptionId}",
+ RabEstSubscriptionSubscriptionsPUT,
+ },
+
+ Route{
+ "RabEstSubscriptionsSubscrIdDELETE",
+ strings.ToUpper("Delete"),
+ "/rni/v1/subscriptions/rab_est/{subscriptionId}",
+ RabEstSubscriptionsSubscrIdDELETE,
+ },
+
+ Route{
+ "RabInfoGET",
+ strings.ToUpper("Get"),
+ "/rni/v1/queries/rab_info",
+ RabInfoGET,
+ },
+
+ Route{
+ "RabModSubscriptionSubscriptionsGET",
+ strings.ToUpper("Get"),
+ "/rni/v1/subscriptions/rab_mod/{subscriptionId}",
+ RabModSubscriptionSubscriptionsGET,
+ },
+
+ Route{
+ "RabModSubscriptionSubscriptionsPOST",
+ strings.ToUpper("Post"),
+ "/rni/v1/subscriptions/rab_mod",
+ RabModSubscriptionSubscriptionsPOST,
+ },
+
+ Route{
+ "RabModSubscriptionSubscriptionsPUT",
+ strings.ToUpper("Put"),
+ "/rni/v1/subscriptions/rab_mod/{subscriptionId}",
+ RabModSubscriptionSubscriptionsPUT,
+ },
+
+ Route{
+ "RabModSubscriptionsSubscrIdDELETE",
+ strings.ToUpper("Delete"),
+ "/rni/v1/subscriptions/rab_mod/{subscriptionId}",
+ RabModSubscriptionsSubscrIdDELETE,
+ },
+
+ Route{
+ "RabRelSubscriptionSubscriptionsGET",
+ strings.ToUpper("Get"),
+ "/rni/v1/subscriptions/rab_rel/{subscriptionId}",
+ RabRelSubscriptionSubscriptionsGET,
+ },
+
+ Route{
+ "RabRelSubscriptionSubscriptionsPOST",
+ strings.ToUpper("Post"),
+ "/rni/v1/subscriptions/rab_rel",
+ RabRelSubscriptionSubscriptionsPOST,
+ },
+
+ Route{
+ "RabRelSubscriptionSubscriptionsPUT",
+ strings.ToUpper("Put"),
+ "/rni/v1/subscriptions/rab_rel/{subscriptionId}",
+ RabRelSubscriptionSubscriptionsPUT,
+ },
+
+ Route{
+ "RabRelSubscriptionsSubscrIdDELETE",
+ strings.ToUpper("Delete"),
+ "/rni/v1/subscriptions/rab_rel/{subscriptionId}",
+ RabRelSubscriptionsSubscrIdDELETE,
+ },
+
+ Route{
+ "S1BearerInfoGET",
+ strings.ToUpper("Get"),
+ "/rni/v1/queries/s1_bearer_info",
+ S1BearerInfoGET,
+ },
+
+ Route{
+ "S1BearerSubscriptionSubscriptionsGET",
+ strings.ToUpper("Get"),
+ "/rni/v1/subscriptions/s1_bearer/{subscriptionId}",
+ S1BearerSubscriptionSubscriptionsGET,
+ },
+
+ Route{
+ "S1BearerSubscriptionSubscriptionsPOST",
+ strings.ToUpper("Post"),
+ "/rni/v1/subscriptions/s1_bearer",
+ S1BearerSubscriptionSubscriptionsPOST,
+ },
+
+ Route{
+ "S1BearerSubscriptionSubscriptionsPUT",
+ strings.ToUpper("Put"),
+ "/rni/v1/subscriptions/s1_bearer/{subscriptionId}",
+ S1BearerSubscriptionSubscriptionsPUT,
+ },
+
+ Route{
+ "S1BearerSubscriptionsSubscrIdDELETE",
+ strings.ToUpper("Delete"),
+ "/rni/v1/subscriptions/s1_bearer/{subscriptionId}",
+ S1BearerSubscriptionsSubscrIdDELETE,
+ },
+
+ Route{
+ "SubscriptionLinkListSubscriptionsCcGET",
+ strings.ToUpper("Get"),
+ "/rni/v1/subscriptions/cell_change",
+ SubscriptionLinkListSubscriptionsCcGET,
+ },
+
+ Route{
+ "SubscriptionLinkListSubscriptionsCrGET",
+ strings.ToUpper("Get"),
+ "/rni/v1/subscriptions/ca_reconf",
+ SubscriptionLinkListSubscriptionsCrGET,
+ },
+
+ Route{
+ "SubscriptionLinkListSubscriptionsGET",
+ strings.ToUpper("Get"),
+ "/rni/v1/subscriptions/",
+ SubscriptionLinkListSubscriptionsGET,
+ },
+
+ Route{
+ "SubscriptionLinkListSubscriptionsMrGET",
+ strings.ToUpper("Get"),
+ "/rni/v1/subscriptions/meas_rep_ue",
+ SubscriptionLinkListSubscriptionsMrGET,
+ },
+
+ Route{
+ "SubscriptionLinkListSubscriptionsReGET",
+ strings.ToUpper("Get"),
+ "/rni/v1/subscriptions/rab_est",
+ SubscriptionLinkListSubscriptionsReGET,
+ },
+
+ Route{
+ "SubscriptionLinkListSubscriptionsRmGET",
+ strings.ToUpper("Get"),
+ "/rni/v1/subscriptions/rab_mod",
+ SubscriptionLinkListSubscriptionsRmGET,
+ },
+
+ Route{
+ "SubscriptionLinkListSubscriptionsRrGET",
+ strings.ToUpper("Get"),
+ "/rni/v1/subscriptions/rab_rel",
+ SubscriptionLinkListSubscriptionsRrGET,
+ },
+
+ Route{
+ "SubscriptionLinkListSubscriptionsS1GET",
+ strings.ToUpper("Get"),
+ "/rni/v1/subscriptions/s1_bearer",
+ SubscriptionLinkListSubscriptionsS1GET,
+ },
+
+ Route{
+ "SubscriptionLinkListSubscriptionsTaGET",
+ strings.ToUpper("Get"),
+ "/rni/v1/subscriptions/ta",
+ SubscriptionLinkListSubscriptionsTaGET,
+ },
+}
diff --git a/go-apps/meep-ctrl-engine/.openapi-codegen-ignore b/go-apps/meep-sandbox-ctrl/.swagger-codegen-ignore
similarity index 100%
rename from go-apps/meep-ctrl-engine/.openapi-codegen-ignore
rename to go-apps/meep-sandbox-ctrl/.swagger-codegen-ignore
diff --git a/go-apps/meep-sandbox-ctrl/.swagger-codegen/VERSION b/go-apps/meep-sandbox-ctrl/.swagger-codegen/VERSION
new file mode 100644
index 0000000000000000000000000000000000000000..158349812d25df151b7fd7be433cc2e7b1abc944
--- /dev/null
+++ b/go-apps/meep-sandbox-ctrl/.swagger-codegen/VERSION
@@ -0,0 +1 @@
+2.4.9
\ No newline at end of file
diff --git a/go-apps/meep-sandbox-ctrl/Dockerfile b/go-apps/meep-sandbox-ctrl/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..39772bdfeafbaeb72a1d5ac575d615c446d80901
--- /dev/null
+++ b/go-apps/meep-sandbox-ctrl/Dockerfile
@@ -0,0 +1,22 @@
+# Copyright (c) 2019 InterDigital Communications, Inc
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+FROM debian:9.6-slim
+COPY ./meep-sandbox-ctrl /meep-sandbox-ctrl
+COPY ./swagger /swagger
+COPY ./entrypoint.sh /entrypoint.sh
+
+RUN chmod +x /entrypoint.sh
+
+ENTRYPOINT ["/entrypoint.sh"]
\ No newline at end of file
diff --git a/go-apps/meep-ctrl-engine/api/swagger.yaml b/go-apps/meep-sandbox-ctrl/api/swagger.yaml
similarity index 69%
rename from go-apps/meep-ctrl-engine/api/swagger.yaml
rename to go-apps/meep-sandbox-ctrl/api/swagger.yaml
index 063b66ef347a05e0bbb17e3350c489b9e91a14ac..ad04c9a80247a72adc8db770403b84ab566de033 100644
--- a/go-apps/meep-ctrl-engine/api/swagger.yaml
+++ b/go-apps/meep-sandbox-ctrl/api/swagger.yaml
@@ -1,172 +1,33 @@
---
swagger: "2.0"
info:
- description: "This API is the main platform API and mainly used by the AdvantEDGE\
- \ frontend to interact with scenarios
**Micro-service**
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)\
- \
**Type & Usage**
Platform main interface used by controller software that\
- \ want to interact with the AdvantEDGE platform
**Details**
API details\
- \ available at _your-AdvantEDGE-ip-address:30000/api_
**Default Port**
`30000` "
+ description: "This API is the main Sandbox Controller API for scenario deployment\
+ \ & event injection
**Micro-service**
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)\
+ \
**Type & Usage**
Platform runtime interface to manage active scenarios\
+ \ and inject events in AdvantEDGE platform
**Details**
API details available\
+ \ at _your-AdvantEDGE-ip-address/api_"
version: "1.0.0"
- title: "AdvantEDGE Platform Controller REST API"
+ title: "AdvantEDGE Sandbox Controller REST API"
contact:
name: "InterDigital AdvantEDGE Support"
email: "AdvantEDGE@InterDigital.com"
license:
name: "Apache 2.0"
url: "https://github.com/InterDigitalInc/AdvantEDGE/blob/master/LICENSE"
-basePath: "/v1"
+basePath: "/sandbox-ctrl/v1"
tags:
-- name: "Scenario Configuration"
-- name: "Scenario Execution"
+- name: "Active Scenario"
+- name: "Events"
- name: "Event Replay"
-- name: "Pod States"
-schemes:
-- "http"
consumes:
- "application/json"
produces:
- "application/json"
paths:
- /scenarios:
- get:
- tags:
- - "Scenario Configuration"
- summary: "Get all scenarios"
- description: "Returns all scenarios from the platform scenario store"
- operationId: "getScenarioList"
- produces:
- - "application/json"
- parameters: []
- responses:
- 200:
- description: "OK"
- schema:
- $ref: "#/definitions/ScenarioList"
- 404:
- description: "Not found"
- delete:
- tags:
- - "Scenario Configuration"
- summary: "Delete all scenarios"
- description: "Delete all scenarios present in the platform scenario store"
- operationId: "deleteScenarioList"
- produces:
- - "application/json"
- parameters: []
- responses:
- 200:
- description: "OK"
- 404:
- description: "Not found"
- /scenarios/{name}:
- get:
- tags:
- - "Scenario Configuration"
- summary: "Get a specific scenario"
- description: "Get a scenario by name from the platform scenario store"
- operationId: "getScenario"
- produces:
- - "application/json"
- parameters:
- - name: "name"
- in: "path"
- description: "Scenario name"
- required: true
- type: "string"
- x-exportParamName: "Name"
- responses:
- 200:
- description: "OK"
- schema:
- $ref: "#/definitions/Scenario"
- 400:
- description: "Bad request"
- 404:
- description: "Not found"
- post:
- tags:
- - "Scenario Configuration"
- summary: "Add a scenario"
- description: "Add a scenario to the platform scenario store"
- operationId: "createScenario"
- produces:
- - "application/json"
- parameters:
- - name: "name"
- in: "path"
- description: "Scenario name"
- required: true
- type: "string"
- x-exportParamName: "Name"
- - in: "body"
- name: "scenario"
- description: "Scenario"
- required: true
- schema:
- $ref: "#/definitions/Scenario"
- x-exportParamName: "Scenario"
- responses:
- 200:
- description: "OK"
- 400:
- description: "Bad request"
- 404:
- description: "Not found"
- put:
- tags:
- - "Scenario Configuration"
- summary: "Update a scenario"
- description: "Update a scenario by name in the platform scenario store"
- operationId: "setScenario"
- produces:
- - "application/json"
- parameters:
- - name: "name"
- in: "path"
- description: "Scenario name"
- required: true
- type: "string"
- x-exportParamName: "Name"
- - in: "body"
- name: "scenario"
- description: "Scenario to add to MEEP store"
- required: true
- schema:
- $ref: "#/definitions/Scenario"
- x-exportParamName: "Scenario"
- responses:
- 200:
- description: "OK"
- 400:
- description: "Bad request"
- 404:
- description: "Not found"
- delete:
- tags:
- - "Scenario Configuration"
- summary: "Delete a scenario"
- description: "Delete a scenario by name from the platform scenario store"
- operationId: "deleteScenario"
- produces:
- - "application/json"
- parameters:
- - name: "name"
- in: "path"
- description: "Scenario name"
- required: true
- type: "string"
- x-exportParamName: "Name"
- responses:
- 200:
- description: "OK"
- 400:
- description: "Bad request"
- 404:
- description: "Not found"
/active:
get:
tags:
- - "Scenario Execution"
+ - "Active Scenario"
summary: "Get the deployed scenario"
description: "Get the scenario currently deployed on the platform"
operationId: "getActiveScenario"
@@ -180,7 +41,7 @@ paths:
$ref: "#/definitions/Scenario"
delete:
tags:
- - "Scenario Execution"
+ - "Active Scenario"
summary: "Terminate the deployed scenario"
description: "Terminate the scenario currently deployed on the platform"
operationId: "terminateScenario"
@@ -195,7 +56,7 @@ paths:
/active/{name}:
post:
tags:
- - "Scenario Execution"
+ - "Active Scenario"
summary: "Deploy a scenario"
description: "Deploy a scenario present in the platform scenario store"
operationId: "activateScenario"
@@ -225,7 +86,7 @@ paths:
/active/serviceMaps:
get:
tags:
- - "Scenario Execution"
+ - "Active Scenario"
summary: "Get deployed scenario's port mapping"
description: "Returns the deployed scenario's port mapping
Events:
Supported Actions:
NOTE: Current backend implementation supports only a limited subset\
+ \ of scenario update event functionality (add/remove UE only)."
+ example: {}
+ ScenarioNode:
+ type: "object"
+ properties:
+ type:
+ type: "string"
+ description: "Node type"
+ enum:
+ - "UE"
+ nodeDataUnion:
+ $ref: "#/definitions/NodeDataUnion"
+ parent:
+ type: "string"
+ description: "Parent node name"
+ children:
+ type: "array"
+ description: "List of child node names"
+ items:
+ type: "string"
+ description: "Scenario node object"
+ example: {}
+ NodeDataUnion:
+ type: "object"
+ properties:
+ physicalLocation:
+ $ref: "#/definitions/PhysicalLocation"
+ description: "Union of node data objects\nNOTE: Only one of the following objects\
+ \ must be filled"
+ example: {}
ReplayFileList:
type: "object"
properties:
@@ -1251,146 +1209,6 @@ definitions:
description: "User description of the replay file"
description: "Scenario information"
example: {}
- PodsStatus:
- type: "object"
- properties:
- podStatus:
- type: "array"
- items:
- $ref: "#/definitions/PodStatus"
- description: "List of all pods status"
- example: {}
- PodStatus:
- type: "object"
- properties:
- name:
- type: "string"
- description: "Pod name"
- namespace:
- type: "string"
- description: "Pod namespace"
- meepApp:
- type: "string"
- description: "Pod process name"
- meepOrigin:
- type: "string"
- description: "Pod origin(core, scenario)"
- meepScenario:
- type: "string"
- description: "Pod scenario name"
- phase:
- type: "string"
- description: "Pod phase"
- podInitialized:
- type: "string"
- description: "Pod initialized (true/false)"
- podReady:
- type: "string"
- description: "Pod ready (true/false)"
- podScheduled:
- type: "string"
- description: "Pod scheduled (true/false)"
- podUnschedulable:
- type: "string"
- description: "Pod unschedulable (true/false)"
- podConditionError:
- type: "string"
- description: "Pod error message"
- containerStatusesMsg:
- type: "string"
- description: "Failed container error message"
- nbOkContainers:
- type: "string"
- description: "Number of containers that are up"
- nbTotalContainers:
- type: "string"
- description: "Number of total containers in the pod"
- nbPodRestart:
- type: "string"
- description: "Number of container failures leading to pod restarts"
- logicalState:
- type: "string"
- description: "State that is mapping the kubernetes api state"
- startTime:
- type: "string"
- description: "Pod creation time"
- example:
- podStatus:
- - podName: "mypod"
- namespace: "default"
- meepApp: "pod1"
- meepOrigin: "scenario"
- meepScenario: "myScenario"
- phase: "Running"
- podInitialized: "True"
- podReady: "False"
- podScheduled: "True"
- podUnschedulable: "False"
- podConditionError: "containers with unready status: [myshel]"
- nbOkContainers: "0"
- nbTotalContainers: "1"
- nbPodRestart: "15005"
- startTime: "2018-09-10 14:24:00 +0000 UTC"
-parameters:
- Name:
- name: "name"
- in: "path"
- description: "Scenario name"
- required: true
- type: "string"
- x-exportParamName: "Name"
- ReplayInfo:
- in: "body"
- name: "replayInfo"
- description: "Replay information"
- required: true
- schema:
- $ref: "http://localhost:8291/meep-model.yaml#/definitions/ReplayInfo"
- x-exportParamName: "ReplayInfo"
- Replay:
- name: "replay"
- in: "path"
- description: "Scenario events execution sequence"
- required: true
- x-exportParamName: "Replay"
- ReplayFileName:
- name: "replayFileName"
- in: "path"
- description: "Scenario events execution file name"
- required: true
- type: "string"
- x-exportParamName: "ReplayFileName"
- Scenario:
- in: "body"
- name: "scenario"
- description: "Scenario to add to MEEP store"
- required: true
- schema:
- $ref: "http://localhost:8291/meep-model.yaml#/definitions/Scenario"
- x-exportParamName: "Scenario"
- ActivationInfo:
- in: "body"
- name: "activationInfo"
- description: "Activation information"
- required: true
- schema:
- $ref: "http://localhost:8291/meep-model.yaml#/definitions/ActivationInfo"
- x-exportParamName: "ActivationInfo"
- EventType:
- name: "type"
- in: "path"
- description: "Event type"
- required: true
- type: "string"
- x-exportParamName: "Type_"
- Event:
- in: "body"
- name: "event"
- description: "Event to send to active scenario"
- required: true
- schema:
- $ref: "http://localhost:8291/meep-model.yaml#/definitions/Event"
- x-exportParamName: "Event"
responses:
Std200:
description: "OK"
diff --git a/go-apps/meep-sandbox-ctrl/entrypoint.sh b/go-apps/meep-sandbox-ctrl/entrypoint.sh
new file mode 100644
index 0000000000000000000000000000000000000000..92952fab093dde9c0e891290bf222a20d0d8ab99
--- /dev/null
+++ b/go-apps/meep-sandbox-ctrl/entrypoint.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+set -e
+
+echo "MEEP_SANDBOX_NAME: ${MEEP_SANDBOX_NAME}"
+echo "MEEP_HOST_URL: ${MEEP_HOST_URL}"
+
+# Prepend sandbox name to REST API yaml files
+for file in /swagger/*-api.yaml; do
+ echo "Prepending [${MEEP_SANDBOX_NAME}] to basepath in: $file"
+ sed -i 's,basePath: \"/\?,basePath: \"/'${MEEP_SANDBOX_NAME}'/,' $file;
+done
+
+# Update spec links in index.html
+# sed -i 's,"url": "\([^"]*\)","url": "'${MEEP_HOST_URL}'/'${MEEP_SANDBOX_NAME}'/api/\1",g' /swagger/index.html
+
+# Start virt engine
+exec /meep-sandbox-ctrl
\ No newline at end of file
diff --git a/go-apps/meep-ctrl-engine/go.mod b/go-apps/meep-sandbox-ctrl/go.mod
similarity index 51%
rename from go-apps/meep-ctrl-engine/go.mod
rename to go-apps/meep-sandbox-ctrl/go.mod
index 66188121346410e256b4844c3ddb5f42b8fb6362..57ff762ca75245c720620fa33059abb1a9dde171 100644
--- a/go-apps/meep-ctrl-engine/go.mod
+++ b/go-apps/meep-sandbox-ctrl/go.mod
@@ -1,28 +1,32 @@
-module github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-ctrl-engine
+module github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-sandbox-ctrl
go 1.12
require (
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-couch v0.0.0
- github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-http-logger 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-mq v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-replay-manager v0.0.0
- github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-sandbox-store v0.0.0
github.com/gorilla/handlers v1.4.0
github.com/gorilla/mux v1.7.3
)
replace (
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-couch => ../../go-packages/meep-couch
- github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-client => ../../go-packages/meep-ctrl-engine-client
- github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model => ../../go-packages/meep-ctrl-engine-model
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr => ../../go-packages/meep-data-key-mgr
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model => ../../go-packages/meep-data-model
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-http-logger => ../../go-packages/meep-http-logger
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-mq => ../../go-packages/meep-mq
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis => ../../go-packages/meep-redis
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-replay-manager => ../../go-packages/meep-replay-manager
- github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog => ../../go-packages/meep-watchdog
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-sandbox-ctrl-client => ../../go-packages/meep-sandbox-ctrl-client
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-sandbox-store => ../../go-packages/meep-sandbox-store
)
diff --git a/go-apps/meep-ctrl-engine/go.sum b/go-apps/meep-sandbox-ctrl/go.sum
similarity index 95%
rename from go-apps/meep-ctrl-engine/go.sum
rename to go-apps/meep-sandbox-ctrl/go.sum
index 8fa3018977feacbeb0e29228539caf398e6b6712..9041906a90483325e8f88ffad544e44b224385ce 100644
--- a/go-apps/meep-ctrl-engine/go.sum
+++ b/go-apps/meep-sandbox-ctrl/go.sum
@@ -47,11 +47,10 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190415100556-4a65cf94b679/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCTu3mcIURZfNkVweuRKA=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a h1:tImsplftrFpALCYumobsd0K86vlAs/eXGFms2txfJfA=
-golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw=
+golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
diff --git a/go-apps/meep-ctrl-engine/main.go b/go-apps/meep-sandbox-ctrl/main.go
similarity index 78%
rename from go-apps/meep-ctrl-engine/main.go
rename to go-apps/meep-sandbox-ctrl/main.go
index 11aeb646449d55e63e1a259668b5bc6fcab74979..4346c7db97bb401a0b3395fdc98b38018eda4b2e 100644
--- a/go-apps/meep-ctrl-engine/main.go
+++ b/go-apps/meep-sandbox-ctrl/main.go
@@ -23,21 +23,19 @@ import (
"syscall"
"time"
+ server "github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-sandbox-ctrl/server"
log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
- server "github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-ctrl-engine/server"
-
"github.com/gorilla/handlers"
)
func init() {
- log.MeepTextLogInit("meep-ctrl-engine")
+ log.MeepTextLogInit("meep-sandbox-ctrl")
}
func main() {
log.Info(os.Args)
-
- log.Info("Starting MEEP Controller Engine")
+ log.Info("Starting MEEP Sandbox Controller")
run := true
go func() {
@@ -50,10 +48,18 @@ func main() {
}()
go func() {
- // Initialize Ctrl Engine
- err := server.CtrlEngineInit()
+ // Initialize Sandbox Controller
+ err := server.Init()
+ if err != nil {
+ log.Error("Failed to initialize Sandbox Controller")
+ run = false
+ return
+ }
+
+ // Start Sandbox Controller
+ err = server.Run()
if err != nil {
- log.Error("Failed to initialize Ctrl Engine")
+ log.Error("Failed to start Sandbox Controller")
run = false
return
}
diff --git a/go-apps/meep-sandbox-ctrl/main_test.go b/go-apps/meep-sandbox-ctrl/main_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..7f017cfd440b97b502741364de0885f318ec4a7f
--- /dev/null
+++ b/go-apps/meep-sandbox-ctrl/main_test.go
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2019 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package main
+
+import (
+ "os"
+ "strings"
+ "testing"
+
+ log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
+)
+
+// Build:
+// $ go test -covermode=count -coverpkg=./... -c -o **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Default Port** Supported Actions:
+ NOTE: Current backend implementation supports only a limited subset of scenario update event functionality (add/remove UE only).
+ properties:
+ action:
+ type: string
+ description: Action to perform on provided scenario node
+ enum:
+ - ADD
+ - REMOVE
+ - MODIFY
+ node:
+ $ref: '#/definitions/ScenarioNode'
+ example: {}
ExternalConfig:
type: object
properties:
@@ -288,9 +382,23 @@ definitions:
latencyVariation:
type: integer
description: Latency variation in ms
+ latencyDistribution:
+ type: string
+ description: Latency distribution. Can only be set in the Scenario Deployment network characteristics, ignored otherwise. Latency distribution is set for the whole network and applied to every end-to-end traffic flows. Default value is 'Normal' distribution.
+ enum:
+ - Normal
+ - Pareto
+ - Paretonormal
+ - Uniform
throughput:
type: integer
- description: Throughput limit in Mbps
+ description: '**DEPRECATED** As of release 1.5.0, replaced by throughputUl and throughputDl'
+ throughputDl:
+ type: integer
+ description: Downlink throughput limit in Mbps
+ throughputUl:
+ type: integer
+ description: Uplink throughput limit in Mbps
packetLoss:
type: number
format: double
@@ -311,24 +419,23 @@ definitions:
description: Network location type
enum:
- POA
+ - POA-CELLULAR
- DEFAULT
+ netChar:
+ $ref: '#/definitions/NetworkCharacteristics'
terminalLinkLatency:
type: integer
- description: Latency in ms for all terminal links within network location
+ description: '**DEPRECATED** As of release 1.5.0, replaced by netChar latency'
terminalLinkLatencyVariation:
type: integer
- description: Latency variation in ms for all terminal links within network location
+ description: '**DEPRECATED** As of release 1.5.0, replaced by netChar latencyVariation'
terminalLinkThroughput:
type: integer
- description: >-
- The limit of the traffic supported for all terminal links within the
- network location
+ description: '**DEPRECATED** As of release 1.5.0, replaced by netChar throughputUl and throughputDl'
terminalLinkPacketLoss:
type: number
format: double
- description: >-
- Packet lost (in terms of percentage) for all terminal links within the
- network location
+ description: '**DEPRECATED** As of release 1.5.0, replaced by netChar packetLoss'
meta:
type: object
description: 'Key/Value Pair Map (string, string)'
@@ -339,12 +446,35 @@ definitions:
description: 'Key/Value Pair Map (string, string)'
additionalProperties:
type: string
+ cellularPoaConfig:
+ $ref: '#/definitions/CellularPoaConfig'
+ geoData:
+ $ref: '#/definitions/GeoData'
physicalLocations:
type: array
items:
$ref: '#/definitions/PhysicalLocation'
description: Logical network location object
example: {}
+ NodeDataUnion:
+ type: object
+ description: |-
+ Union of node data objects
+ NOTE: Only one of the following objects must be filled
+ properties:
+ # deployment:
+ # $ref: '#/definitions/Deployment'
+ # domain:
+ # $ref: '#/definitions/Domain'
+ # zone:
+ # $ref: '#/definitions/Zone'
+ # networkLocation:
+ # $ref: '#/definitions/NetworkLocation'
+ physicalLocation:
+ $ref: '#/definitions/PhysicalLocation'
+ # process:
+ # $ref: '#/definitions/Process'
+ example: {}
PhysicalLocation:
type: object
properties:
@@ -368,6 +498,8 @@ definitions:
description: |-
true: Physical location is external to MEEP
false: Physical location is internal to MEEP
+ geoData:
+ $ref: '#/definitions/GeoData'
networkLocationsInRange:
type: array
items:
@@ -387,110 +519,23 @@ definitions:
type: array
items:
$ref: '#/definitions/Process'
+ netChar:
+ $ref: '#/definitions/NetworkCharacteristics'
linkLatency:
type: integer
- description: >-
- Latency in ms between the physical location and the network (wired
- interface, air interface)
+ description: '**DEPRECATED** As of release 1.5.0, replaced by netChar latency'
linkLatencyVariation:
type: integer
- description: >-
- Latency variation in ms between the physical location and the network
- (wired interface, air interface)
+ description: '**DEPRECATED** As of release 1.5.0, replaced by netChar latencyVariation'
linkThroughput:
type: integer
- description: >-
- The limit of the traffic supported between the physical location and
- the network (wired interface, air interface)
+ description: '**DEPRECATED** As of release 1.5.0, replaced by netChar throughputUl and throughputDl'
linkPacketLoss:
type: number
format: double
- description: >-
- Packet lost (in terms of percentage) between the physical location and
- the network (wired interface, air interface)
+ description: '**DEPRECATED** As of release 1.5.0, replaced by netChar packetLoss'
description: Physical location object
example: {}
- PodStatus:
- type: object
- properties:
- name:
- type: string
- description: Pod name
- namespace:
- type: string
- description: Pod namespace
- meepApp:
- type: string
- description: Pod process name
- meepOrigin:
- type: string
- description: 'Pod origin(core, scenario)'
- meepScenario:
- type: string
- description: Pod scenario name
- phase:
- type: string
- description: Pod phase
- podInitialized:
- type: string
- description: Pod initialized (true/false)
- podReady:
- type: string
- description: Pod ready (true/false)
- podScheduled:
- type: string
- description: Pod scheduled (true/false)
- podUnschedulable:
- type: string
- description: Pod unschedulable (true/false)
- podConditionError:
- type: string
- description: Pod error message
- containerStatusesMsg:
- type: string
- description: Failed container error message
- nbOkContainers:
- type: string
- description: Number of containers that are up
- nbTotalContainers:
- type: string
- description: Number of total containers in the pod
- nbPodRestart:
- type: string
- description: Number of container failures leading to pod restarts
- logicalState:
- type: string
- description: State that is mapping the kubernetes api state
- startTime:
- type: string
- description: Pod creation time
- example:
- podStatus:
- - podName: mypod
- namespace: default
- meepApp: pod1
- meepOrigin: scenario
- meepScenario: myScenario
- phase: Running
- podInitialized: 'True'
- podReady: 'False'
- podScheduled: 'True'
- podUnschedulable: 'False'
- podConditionError: 'containers with unready status: [myshel]'
- containerStatusesMsg: null
- nbOkContainers: '0'
- nbTotalContainers: '1'
- nbPodRestart: '15005'
- startTime: '2018-09-10 14:24:00 +0000 UTC'
- PodsStatus:
- type: object
- properties:
- podStatus:
- type: array
- items:
- $ref: '#/definitions/PodStatus'
- description: List of all pods status
- example: {}
Process:
type: object
properties:
@@ -557,19 +602,21 @@ definitions:
description: 'Key/Value Pair Map (string, string)'
additionalProperties:
type: string
+ netChar:
+ $ref: '#/definitions/NetworkCharacteristics'
appLatency:
type: integer
- description: Latency in ms caused by the application
+ description: '**DEPRECATED** As of release 1.5.0, replaced by netChar latency'
appLatencyVariation:
type: integer
- description: Latency variation in ms caused by the application
+ description: '**DEPRECATED** As of release 1.5.0, replaced by netChar latencyVariation'
appThroughput:
type: integer
- description: The limit of the traffic supported by the application
+ description: '**DEPRECATED** As of release 1.5.0, replaced by netChar throughputUl and throughputDl'
appPacketLoss:
type: number
format: double
- description: Packet lost (in terms of percentage) caused by the application
+ description: '**DEPRECATED** As of release 1.5.0, replaced by netChar packetLoss'
placementId:
type: string
description: Identifier used for process placement in AdvantEDGE cluster
@@ -587,6 +634,18 @@ definitions:
example:
name: name
state: state
+ Replay:
+ type: object
+ properties:
+ description:
+ type: string
+ description: User description of the content of the replay file.
+ events:
+ type: array
+ items:
+ $ref: '#/definitions/ReplayEvent'
+ description: ReplayEvents from the Replay-file
+ example: {}
ReplayEvent:
type: object
properties:
@@ -601,17 +660,25 @@ definitions:
$ref: '#/definitions/Event'
description: Replay event object
example: {}
- Replay:
+ ReplayFileList:
type: object
properties:
- description:
- type: string
- description: User description of the content of the replay file.
- events:
+ replay-files:
type: array
items:
- $ref: '#/definitions/ReplayEvent'
- description: ReplayEvents from the Replay-file
+ type: string
+ description: Replay-file list
+ example: {}
+ ReplayInfo:
+ type: object
+ properties:
+ scenarioName:
+ type: string
+ description: Scenario name
+ description:
+ type: string
+ description: User description of the replay file
+ description: Scenario information
example: {}
ReplayStatus:
type: object
@@ -640,14 +707,30 @@ definitions:
description: Time remaining until the next event for the replay file after last event
description: Replay status object
example: {}
- ReplayFileList:
+ Sandbox:
type: object
properties:
- replay-files:
+ name:
+ type: string
+ description: Sandbox name
+ description: Sandbox object
+ example: {}
+ SandboxConfig:
+ type: object
+ properties:
+ scenarioName:
+ type: string
+ description: Name of scenario to activate in sandbox
+ description: Sandbox configuration object
+ example: {}
+ SandboxList:
+ type: object
+ properties:
+ sandboxes:
type: array
items:
- type: string
- description: Replay-file list
+ $ref: '#/definitions/Sandbox'
+ description: Sandbox list
example: {}
Scenario:
type: object
@@ -683,17 +766,6 @@ definitions:
example:
visualization: visualization
other: other
- ReplayInfo:
- type: object
- properties:
- scenarioName:
- type: string
- description: Scenario name
- description:
- type: string
- description: User description of the replay file
- description: Scenario information
- example: {}
ScenarioList:
type: object
properties:
@@ -701,7 +773,27 @@ definitions:
type: array
items:
$ref: '#/definitions/Scenario'
- description: Scenario list
+ description: Scenario list
+ example: {}
+ ScenarioNode:
+ type: object
+ description: Scenario node object
+ properties:
+ type:
+ type: string
+ description: Node type
+ enum:
+ - UE
+ nodeDataUnion:
+ $ref: '#/definitions/NodeDataUnion'
+ parent:
+ type: string
+ description: Parent node name
+ children:
+ type: array
+ description: List of child node names
+ items:
+ type: string
example: {}
ServiceConfig:
type: object
@@ -788,9 +880,7 @@ definitions:
description: '**DEPRECATED** As of release 1.3.0, replaced by netChar latency'
edgeFogLatencyVariation:
type: integer
- description: >-
- **DEPRECATED** As of release 1.3.0, replaced by netChar
- latencyVariation
+ description: '**DEPRECATED** As of release 1.3.0, replaced by netChar latencyVariation'
edgeFogThroughput:
type: integer
description: '**DEPRECATED** As of release 1.3.0, replaced by netChar throughput'
diff --git a/go-packages/meep-ctrl-engine-client/docs/ActivationInfo.md b/go-packages/meep-data-model/docs/ActivationInfo.md
similarity index 100%
rename from go-packages/meep-ctrl-engine-client/docs/ActivationInfo.md
rename to go-packages/meep-data-model/docs/ActivationInfo.md
diff --git a/go-packages/meep-data-model/docs/CellularDomainConfig.md b/go-packages/meep-data-model/docs/CellularDomainConfig.md
new file mode 100644
index 0000000000000000000000000000000000000000..5a5ed4c618d7dde352330f331f9a6878346eb443
--- /dev/null
+++ b/go-packages/meep-data-model/docs/CellularDomainConfig.md
@@ -0,0 +1,12 @@
+# CellularDomainConfig
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Mnc** | **string** | Mobile Network Code part of PLMN identity as defined in ETSI TS 136 413 | [optional] [default to null]
+**Mcc** | **string** | Mobile Country Code part of PLMN identity as defined in ETSI TS 136 413 | [optional] [default to null]
+**DefaultCellId** | **string** | The E-UTRAN Cell Identity as defined in ETSI TS 136 413 if no cellId is defined for the cell or if not applicable | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-data-model/docs/CellularPoaConfig.md b/go-packages/meep-data-model/docs/CellularPoaConfig.md
new file mode 100644
index 0000000000000000000000000000000000000000..e3ce64a2bacb408e7e4648ebd88f2bd3e5c697d0
--- /dev/null
+++ b/go-packages/meep-data-model/docs/CellularPoaConfig.md
@@ -0,0 +1,10 @@
+# CellularPoaConfig
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CellId** | **string** | The E-UTRAN Cell Identity as defined in ETSI TS 136 413 including the ID of the eNB serving the cell | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-data-model/docs/Deployment.md b/go-packages/meep-data-model/docs/Deployment.md
new file mode 100644
index 0000000000000000000000000000000000000000..2fa9f2c3c13bd5ff9ed1ad50fbace3bdb5df5207
--- /dev/null
+++ b/go-packages/meep-data-model/docs/Deployment.md
@@ -0,0 +1,17 @@
+# Deployment
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**NetChar** | [***NetworkCharacteristics**](NetworkCharacteristics.md) | | [optional] [default to null]
+**InterDomainLatency** | **int32** | **DEPRECATED** As of release 1.5.0, replaced by netChar latency | [optional] [default to null]
+**InterDomainLatencyVariation** | **int32** | **DEPRECATED** As of release 1.5.0, replaced by netChar latencyVariation | [optional] [default to null]
+**InterDomainThroughput** | **int32** | **DEPRECATED** As of release 1.5.0, replaced by netChar throughputUl and throughputDl | [optional] [default to null]
+**InterDomainPacketLoss** | **float64** | **DEPRECATED** As of release 1.5.0, replaced by netChar packetLoss | [optional] [default to null]
+**Meta** | **map[string]string** | Key/Value Pair Map (string, string) | [optional] [default to null]
+**UserMeta** | **map[string]string** | Key/Value Pair Map (string, string) | [optional] [default to null]
+**Domains** | [**[]Domain**](Domain.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-data-model/docs/Domain.md b/go-packages/meep-data-model/docs/Domain.md
new file mode 100644
index 0000000000000000000000000000000000000000..6ab2d2b52b4878daec93ede3f3db993ae4abe54b
--- /dev/null
+++ b/go-packages/meep-data-model/docs/Domain.md
@@ -0,0 +1,21 @@
+# Domain
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Id** | **string** | Unique domain ID | [optional] [default to null]
+**Name** | **string** | Domain name | [optional] [default to null]
+**Type_** | **string** | Domain type | [optional] [default to null]
+**NetChar** | [***NetworkCharacteristics**](NetworkCharacteristics.md) | | [optional] [default to null]
+**InterZoneLatency** | **int32** | **DEPRECATED** As of release 1.5.0, replaced by netChar latency | [optional] [default to null]
+**InterZoneLatencyVariation** | **int32** | **DEPRECATED** As of release 1.5.0, replaced by netChar latencyVariation | [optional] [default to null]
+**InterZoneThroughput** | **int32** | **DEPRECATED** As of release 1.5.0, replaced by netChar throughputUl and throughputDl | [optional] [default to null]
+**InterZonePacketLoss** | **float64** | **DEPRECATED** As of release 1.5.0, replaced by netChar packetLoss | [optional] [default to null]
+**Meta** | **map[string]string** | Key/Value Pair Map (string, string) | [optional] [default to null]
+**UserMeta** | **map[string]string** | Key/Value Pair Map (string, string) | [optional] [default to null]
+**CellularDomainConfig** | [***CellularDomainConfig**](CellularDomainConfig.md) | | [optional] [default to null]
+**Zones** | [**[]Zone**](Zone.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-ctrl-engine-client/docs/EgressService.md b/go-packages/meep-data-model/docs/EgressService.md
similarity index 100%
rename from go-packages/meep-ctrl-engine-client/docs/EgressService.md
rename to go-packages/meep-data-model/docs/EgressService.md
diff --git a/go-packages/meep-ctrl-engine-client/docs/Event.md b/go-packages/meep-data-model/docs/Event.md
similarity index 87%
rename from go-packages/meep-ctrl-engine-client/docs/Event.md
rename to go-packages/meep-data-model/docs/Event.md
index 886810561ed8d1d31035ffd62b0e337275efb27f..24a3e3ea93f8290fafce8e61b1288582db5f6510 100644
--- a/go-packages/meep-ctrl-engine-client/docs/Event.md
+++ b/go-packages/meep-data-model/docs/Event.md
@@ -5,10 +5,10 @@ Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Name** | **string** | Event name | [optional] [default to null]
**Type_** | **string** | Event type | [optional] [default to null]
-**EventNetworkCharacteristicsUpdate** | [***EventNetworkCharacteristicsUpdate**](EventNetworkCharacteristicsUpdate.md) | | [optional] [default to null]
**EventMobility** | [***EventMobility**](EventMobility.md) | | [optional] [default to null]
+**EventNetworkCharacteristicsUpdate** | [***EventNetworkCharacteristicsUpdate**](EventNetworkCharacteristicsUpdate.md) | | [optional] [default to null]
**EventPoasInRange** | [***EventPoasInRange**](EventPoasInRange.md) | | [optional] [default to null]
-**EventOther** | [***EventOther**](EventOther.md) | | [optional] [default to null]
+**EventScenarioUpdate** | [***EventScenarioUpdate**](EventScenarioUpdate.md) | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/go-packages/meep-ctrl-engine-model/docs/EventList.md b/go-packages/meep-data-model/docs/EventList.md
similarity index 100%
rename from go-packages/meep-ctrl-engine-model/docs/EventList.md
rename to go-packages/meep-data-model/docs/EventList.md
diff --git a/go-packages/meep-ctrl-engine-client/docs/EventMobility.md b/go-packages/meep-data-model/docs/EventMobility.md
similarity index 100%
rename from go-packages/meep-ctrl-engine-client/docs/EventMobility.md
rename to go-packages/meep-data-model/docs/EventMobility.md
diff --git a/go-packages/meep-ctrl-engine-model/docs/EventNetworkCharacteristicsUpdate.md b/go-packages/meep-data-model/docs/EventNetworkCharacteristicsUpdate.md
similarity index 61%
rename from go-packages/meep-ctrl-engine-model/docs/EventNetworkCharacteristicsUpdate.md
rename to go-packages/meep-data-model/docs/EventNetworkCharacteristicsUpdate.md
index 29f2be3e32f90351a4462e5851e8f2bec5d08aaf..e88709e4dcd036ba5147b787326ae64037b7bb57 100644
--- a/go-packages/meep-ctrl-engine-model/docs/EventNetworkCharacteristicsUpdate.md
+++ b/go-packages/meep-data-model/docs/EventNetworkCharacteristicsUpdate.md
@@ -5,10 +5,7 @@ Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**ElementName** | **string** | Name of the network element to be updated | [optional] [default to null]
**ElementType** | **string** | Type of the network element to be updated | [optional] [default to null]
-**Latency** | **int32** | Latency in ms | [optional] [default to null]
-**LatencyVariation** | **int32** | Latency variation in ms | [optional] [default to null]
-**Throughput** | **int32** | Throughput limit | [optional] [default to null]
-**PacketLoss** | **float64** | Packet loss percentage | [optional] [default to null]
+**NetChar** | [***NetworkCharacteristics**](NetworkCharacteristics.md) | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/go-packages/meep-ctrl-engine-client/docs/EventPoasInRange.md b/go-packages/meep-data-model/docs/EventPoasInRange.md
similarity index 100%
rename from go-packages/meep-ctrl-engine-client/docs/EventPoasInRange.md
rename to go-packages/meep-data-model/docs/EventPoasInRange.md
diff --git a/go-packages/meep-data-model/docs/EventScenarioUpdate.md b/go-packages/meep-data-model/docs/EventScenarioUpdate.md
new file mode 100644
index 0000000000000000000000000000000000000000..cfd4debaba44c583d7ce6cbfb635d9aec234bf05
--- /dev/null
+++ b/go-packages/meep-data-model/docs/EventScenarioUpdate.md
@@ -0,0 +1,11 @@
+# EventScenarioUpdate
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Action** | **string** | Action to perform on provided scenario node | [optional] [default to null]
+**Node** | [***ScenarioNode**](ScenarioNode.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-ctrl-engine-client/docs/ExternalConfig.md b/go-packages/meep-data-model/docs/ExternalConfig.md
similarity index 100%
rename from go-packages/meep-ctrl-engine-client/docs/ExternalConfig.md
rename to go-packages/meep-data-model/docs/ExternalConfig.md
diff --git a/go-packages/meep-data-model/docs/GeoData.md b/go-packages/meep-data-model/docs/GeoData.md
new file mode 100644
index 0000000000000000000000000000000000000000..347ea89ab879b66adac748ecff9eb3304523966c
--- /dev/null
+++ b/go-packages/meep-data-model/docs/GeoData.md
@@ -0,0 +1,14 @@
+# GeoData
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Location** | [***Point**](Point.md) | | [optional] [default to null]
+**Radius** | **float32** | Optional - Radius (in meters) around the location | [optional] [default to null]
+**Path** | [***LineString**](LineString.md) | | [optional] [default to null]
+**EopMode** | **string** | End-of-Path mode: <li>LOOP: When path endpoint is reached, start over from the beginning <li>REVERSE: When path endpoint is reached, return on the reverse path | [optional] [default to null]
+**Velocity** | **float32** | Speed of movement along path in m/s | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-ctrl-engine-client/docs/GpuConfig.md b/go-packages/meep-data-model/docs/GpuConfig.md
similarity index 100%
rename from go-packages/meep-ctrl-engine-client/docs/GpuConfig.md
rename to go-packages/meep-data-model/docs/GpuConfig.md
diff --git a/go-packages/meep-ctrl-engine-client/docs/IngressService.md b/go-packages/meep-data-model/docs/IngressService.md
similarity index 100%
rename from go-packages/meep-ctrl-engine-client/docs/IngressService.md
rename to go-packages/meep-data-model/docs/IngressService.md
diff --git a/go-packages/meep-data-model/docs/LineString.md b/go-packages/meep-data-model/docs/LineString.md
new file mode 100644
index 0000000000000000000000000000000000000000..60e4e8fdd1d94ccde40936cee9886aca398cba96
--- /dev/null
+++ b/go-packages/meep-data-model/docs/LineString.md
@@ -0,0 +1,11 @@
+# LineString
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Type_** | **string** | Must be LineString | [default to null]
+**Coordinates** | [**[][]float32**](array.md) | For a LineString, coordinates is an array of two or more positions; a position is an array of two decimal numbers (longitude and latitude precisely in that order) | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-data-model/docs/NetworkCharacteristics.md b/go-packages/meep-data-model/docs/NetworkCharacteristics.md
new file mode 100644
index 0000000000000000000000000000000000000000..5dff7ff84b750828c51e64844a4f9473370bd887
--- /dev/null
+++ b/go-packages/meep-data-model/docs/NetworkCharacteristics.md
@@ -0,0 +1,16 @@
+# NetworkCharacteristics
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Latency** | **int32** | Latency in ms | [optional] [default to null]
+**LatencyVariation** | **int32** | Latency variation in ms | [optional] [default to null]
+**LatencyDistribution** | **string** | Latency distribution. Can only be set in the Scenario Deployment network characteristics, ignored otherwise. Latency distribution is set for the whole network and applied to every end-to-end traffic flows. Default value is 'Normal' distribution. | [optional] [default to null]
+**Throughput** | **int32** | **DEPRECATED** As of release 1.5.0, replaced by throughputUl and throughputDl | [optional] [default to null]
+**ThroughputDl** | **int32** | Downlink throughput limit in Mbps | [optional] [default to null]
+**ThroughputUl** | **int32** | Uplink throughput limit in Mbps | [optional] [default to null]
+**PacketLoss** | **float64** | Packet loss percentage | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-ctrl-engine-model/docs/NetworkLocation.md b/go-packages/meep-data-model/docs/NetworkLocation.md
similarity index 50%
rename from go-packages/meep-ctrl-engine-model/docs/NetworkLocation.md
rename to go-packages/meep-data-model/docs/NetworkLocation.md
index 7941eb5ec0fe220be6239294d15a2931779a2d1c..6e0e140e33e15ee7f96b189361c012ccb0446303 100644
--- a/go-packages/meep-ctrl-engine-model/docs/NetworkLocation.md
+++ b/go-packages/meep-data-model/docs/NetworkLocation.md
@@ -6,12 +6,15 @@ Name | Type | Description | Notes
**Id** | **string** | Unique network location ID | [optional] [default to null]
**Name** | **string** | Network location name | [optional] [default to null]
**Type_** | **string** | Network location type | [optional] [default to null]
-**TerminalLinkLatency** | **int32** | Latency in ms for all terminal links within network location | [optional] [default to null]
-**TerminalLinkLatencyVariation** | **int32** | Latency variation in ms for all terminal links within network location | [optional] [default to null]
-**TerminalLinkThroughput** | **int32** | The limit of the traffic supported for all terminal links within the network location | [optional] [default to null]
-**TerminalLinkPacketLoss** | **float64** | Packet lost (in terms of percentage) for all terminal links within the network location | [optional] [default to null]
+**NetChar** | [***NetworkCharacteristics**](NetworkCharacteristics.md) | | [optional] [default to null]
+**TerminalLinkLatency** | **int32** | **DEPRECATED** As of release 1.5.0, replaced by netChar latency | [optional] [default to null]
+**TerminalLinkLatencyVariation** | **int32** | **DEPRECATED** As of release 1.5.0, replaced by netChar latencyVariation | [optional] [default to null]
+**TerminalLinkThroughput** | **int32** | **DEPRECATED** As of release 1.5.0, replaced by netChar throughputUl and throughputDl | [optional] [default to null]
+**TerminalLinkPacketLoss** | **float64** | **DEPRECATED** As of release 1.5.0, replaced by netChar packetLoss | [optional] [default to null]
**Meta** | **map[string]string** | Key/Value Pair Map (string, string) | [optional] [default to null]
**UserMeta** | **map[string]string** | Key/Value Pair Map (string, string) | [optional] [default to null]
+**CellularPoaConfig** | [***CellularPoaConfig**](CellularPoaConfig.md) | | [optional] [default to null]
+**GeoData** | [***GeoData**](GeoData.md) | | [optional] [default to null]
**PhysicalLocations** | [**[]PhysicalLocation**](PhysicalLocation.md) | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/go-packages/meep-data-model/docs/NodeDataUnion.md b/go-packages/meep-data-model/docs/NodeDataUnion.md
new file mode 100644
index 0000000000000000000000000000000000000000..b67de9faef23cbc257390cf5cc33bfadcd7e738a
--- /dev/null
+++ b/go-packages/meep-data-model/docs/NodeDataUnion.md
@@ -0,0 +1,10 @@
+# NodeDataUnion
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**PhysicalLocation** | [***PhysicalLocation**](PhysicalLocation.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-ctrl-engine-client/docs/NodeServiceMaps.md b/go-packages/meep-data-model/docs/NodeServiceMaps.md
similarity index 100%
rename from go-packages/meep-ctrl-engine-client/docs/NodeServiceMaps.md
rename to go-packages/meep-data-model/docs/NodeServiceMaps.md
diff --git a/go-packages/meep-ctrl-engine-model/docs/PhysicalLocation.md b/go-packages/meep-data-model/docs/PhysicalLocation.md
similarity index 58%
rename from go-packages/meep-ctrl-engine-model/docs/PhysicalLocation.md
rename to go-packages/meep-data-model/docs/PhysicalLocation.md
index ca1ea12c933d587888d587d72ab5104b5117e36a..13d19ca8fc9f6dc817a2f78462bc5ddc4b743527 100644
--- a/go-packages/meep-ctrl-engine-model/docs/PhysicalLocation.md
+++ b/go-packages/meep-data-model/docs/PhysicalLocation.md
@@ -7,14 +7,16 @@ Name | Type | Description | Notes
**Name** | **string** | Physical location name | [optional] [default to null]
**Type_** | **string** | Physical location type | [optional] [default to null]
**IsExternal** | **bool** | true: Physical location is external to MEEP false: Physical location is internal to MEEP | [optional] [default to null]
+**GeoData** | [***GeoData**](GeoData.md) | | [optional] [default to null]
**NetworkLocationsInRange** | **[]string** | | [optional] [default to null]
**Meta** | **map[string]string** | Key/Value Pair Map (string, string) | [optional] [default to null]
**UserMeta** | **map[string]string** | Key/Value Pair Map (string, string) | [optional] [default to null]
**Processes** | [**[]Process**](Process.md) | | [optional] [default to null]
-**LinkLatency** | **int32** | Latency in ms between the physical location and the network (wired interface, air interface) | [optional] [default to null]
-**LinkLatencyVariation** | **int32** | Latency variation in ms between the physical location and the network (wired interface, air interface) | [optional] [default to null]
-**LinkThroughput** | **int32** | The limit of the traffic supported between the physical location and the network (wired interface, air interface) | [optional] [default to null]
-**LinkPacketLoss** | **float64** | Packet lost (in terms of percentage) between the physical location and the network (wired interface, air interface) | [optional] [default to null]
+**NetChar** | [***NetworkCharacteristics**](NetworkCharacteristics.md) | | [optional] [default to null]
+**LinkLatency** | **int32** | **DEPRECATED** As of release 1.5.0, replaced by netChar latency | [optional] [default to null]
+**LinkLatencyVariation** | **int32** | **DEPRECATED** As of release 1.5.0, replaced by netChar latencyVariation | [optional] [default to null]
+**LinkThroughput** | **int32** | **DEPRECATED** As of release 1.5.0, replaced by netChar throughputUl and throughputDl | [optional] [default to null]
+**LinkPacketLoss** | **float64** | **DEPRECATED** As of release 1.5.0, replaced by netChar packetLoss | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/go-packages/meep-data-model/docs/Point.md b/go-packages/meep-data-model/docs/Point.md
new file mode 100644
index 0000000000000000000000000000000000000000..e61672bfe8415f24e86a4c64dde2e295f8f12eb8
--- /dev/null
+++ b/go-packages/meep-data-model/docs/Point.md
@@ -0,0 +1,11 @@
+# Point
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Type_** | **string** | Must be Point | [default to null]
+**Coordinates** | **[]float32** | For a Point, coordinates MUST be an array of two decimal numbers; longitude and latitude precisely in that order | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-ctrl-engine-client/docs/Process.md b/go-packages/meep-data-model/docs/Process.md
similarity index 77%
rename from go-packages/meep-ctrl-engine-client/docs/Process.md
rename to go-packages/meep-data-model/docs/Process.md
index d705beac90b2e7e2d560d12b96fd8e1236b5020d..58eaa132800d73cda9c75ea6268d131ffb657e67 100644
--- a/go-packages/meep-ctrl-engine-client/docs/Process.md
+++ b/go-packages/meep-data-model/docs/Process.md
@@ -20,10 +20,11 @@ Name | Type | Description | Notes
**UserChartGroup** | **string** | Chart supplemental information related to the group (service) | [optional] [default to null]
**Meta** | **map[string]string** | Key/Value Pair Map (string, string) | [optional] [default to null]
**UserMeta** | **map[string]string** | Key/Value Pair Map (string, string) | [optional] [default to null]
-**AppLatency** | **int32** | Latency in ms caused by the application | [optional] [default to null]
-**AppLatencyVariation** | **int32** | Latency variation in ms caused by the application | [optional] [default to null]
-**AppThroughput** | **int32** | The limit of the traffic supported by the application | [optional] [default to null]
-**AppPacketLoss** | **float64** | Packet lost (in terms of percentage) caused by the application | [optional] [default to null]
+**NetChar** | [***NetworkCharacteristics**](NetworkCharacteristics.md) | | [optional] [default to null]
+**AppLatency** | **int32** | **DEPRECATED** As of release 1.5.0, replaced by netChar latency | [optional] [default to null]
+**AppLatencyVariation** | **int32** | **DEPRECATED** As of release 1.5.0, replaced by netChar latencyVariation | [optional] [default to null]
+**AppThroughput** | **int32** | **DEPRECATED** As of release 1.5.0, replaced by netChar throughputUl and throughputDl | [optional] [default to null]
+**AppPacketLoss** | **float64** | **DEPRECATED** As of release 1.5.0, replaced by netChar packetLoss | [optional] [default to null]
**PlacementId** | **string** | Identifier used for process placement in AdvantEDGE cluster | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/go-packages/meep-ctrl-engine-model/docs/Release.md b/go-packages/meep-data-model/docs/Release.md
similarity index 100%
rename from go-packages/meep-ctrl-engine-model/docs/Release.md
rename to go-packages/meep-data-model/docs/Release.md
diff --git a/go-packages/meep-ctrl-engine-client/docs/Replay.md b/go-packages/meep-data-model/docs/Replay.md
similarity index 100%
rename from go-packages/meep-ctrl-engine-client/docs/Replay.md
rename to go-packages/meep-data-model/docs/Replay.md
diff --git a/go-packages/meep-ctrl-engine-client/docs/ReplayEvent.md b/go-packages/meep-data-model/docs/ReplayEvent.md
similarity index 100%
rename from go-packages/meep-ctrl-engine-client/docs/ReplayEvent.md
rename to go-packages/meep-data-model/docs/ReplayEvent.md
diff --git a/go-packages/meep-ctrl-engine-client/docs/ReplayFileList.md b/go-packages/meep-data-model/docs/ReplayFileList.md
similarity index 100%
rename from go-packages/meep-ctrl-engine-client/docs/ReplayFileList.md
rename to go-packages/meep-data-model/docs/ReplayFileList.md
diff --git a/go-packages/meep-ctrl-engine-client/docs/ReplayInfo.md b/go-packages/meep-data-model/docs/ReplayInfo.md
similarity index 100%
rename from go-packages/meep-ctrl-engine-client/docs/ReplayInfo.md
rename to go-packages/meep-data-model/docs/ReplayInfo.md
diff --git a/go-packages/meep-ctrl-engine-client/docs/ReplayStatus.md b/go-packages/meep-data-model/docs/ReplayStatus.md
similarity index 100%
rename from go-packages/meep-ctrl-engine-client/docs/ReplayStatus.md
rename to go-packages/meep-data-model/docs/ReplayStatus.md
diff --git a/go-packages/meep-ctrl-engine-client/docs/ScenarioInfo.md b/go-packages/meep-data-model/docs/Sandbox.md
similarity index 76%
rename from go-packages/meep-ctrl-engine-client/docs/ScenarioInfo.md
rename to go-packages/meep-data-model/docs/Sandbox.md
index 576166745b0de18d707f310077859a2aa7910bdb..30750a5df9957d060a5f334717e289da7f55084b 100644
--- a/go-packages/meep-ctrl-engine-client/docs/ScenarioInfo.md
+++ b/go-packages/meep-data-model/docs/Sandbox.md
@@ -1,9 +1,9 @@
-# ScenarioInfo
+# Sandbox
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
-**Name** | **string** | Scenario name | [optional] [default to null]
+**Name** | **string** | Sandbox name | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/go-packages/meep-data-model/docs/SandboxConfig.md b/go-packages/meep-data-model/docs/SandboxConfig.md
new file mode 100644
index 0000000000000000000000000000000000000000..09c747e56966cd721d9a0534c7ee658d9408d981
--- /dev/null
+++ b/go-packages/meep-data-model/docs/SandboxConfig.md
@@ -0,0 +1,10 @@
+# SandboxConfig
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**ScenarioName** | **string** | Name of scenario to activate in sandbox | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-data-model/docs/SandboxList.md b/go-packages/meep-data-model/docs/SandboxList.md
new file mode 100644
index 0000000000000000000000000000000000000000..fd55857e9dabb850ee6389cc377ae562194542a4
--- /dev/null
+++ b/go-packages/meep-data-model/docs/SandboxList.md
@@ -0,0 +1,10 @@
+# SandboxList
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Sandboxes** | [**[]Sandbox**](Sandbox.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-ctrl-engine-client/docs/Scenario.md b/go-packages/meep-data-model/docs/Scenario.md
similarity index 100%
rename from go-packages/meep-ctrl-engine-client/docs/Scenario.md
rename to go-packages/meep-data-model/docs/Scenario.md
diff --git a/go-packages/meep-ctrl-engine-client/docs/ScenarioConfig.md b/go-packages/meep-data-model/docs/ScenarioConfig.md
similarity index 100%
rename from go-packages/meep-ctrl-engine-client/docs/ScenarioConfig.md
rename to go-packages/meep-data-model/docs/ScenarioConfig.md
diff --git a/go-packages/meep-ctrl-engine-client/docs/ScenarioList.md b/go-packages/meep-data-model/docs/ScenarioList.md
similarity index 100%
rename from go-packages/meep-ctrl-engine-client/docs/ScenarioList.md
rename to go-packages/meep-data-model/docs/ScenarioList.md
diff --git a/go-packages/meep-data-model/docs/ScenarioNode.md b/go-packages/meep-data-model/docs/ScenarioNode.md
new file mode 100644
index 0000000000000000000000000000000000000000..a03ab8ca7c03a8d57daa4cae96597cde1938d7e5
--- /dev/null
+++ b/go-packages/meep-data-model/docs/ScenarioNode.md
@@ -0,0 +1,13 @@
+# ScenarioNode
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Type_** | **string** | Node type | [optional] [default to null]
+**NodeDataUnion** | [***NodeDataUnion**](NodeDataUnion.md) | | [optional] [default to null]
+**Parent** | **string** | Parent node name | [optional] [default to null]
+**Children** | **[]string** | List of child node names | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-ctrl-engine-client/docs/ServiceConfig.md b/go-packages/meep-data-model/docs/ServiceConfig.md
similarity index 100%
rename from go-packages/meep-ctrl-engine-client/docs/ServiceConfig.md
rename to go-packages/meep-data-model/docs/ServiceConfig.md
diff --git a/go-packages/meep-ctrl-engine-client/docs/ServicePort.md b/go-packages/meep-data-model/docs/ServicePort.md
similarity index 100%
rename from go-packages/meep-ctrl-engine-client/docs/ServicePort.md
rename to go-packages/meep-data-model/docs/ServicePort.md
diff --git a/go-packages/meep-ctrl-engine-model/docs/Settings.md b/go-packages/meep-data-model/docs/Settings.md
similarity index 100%
rename from go-packages/meep-ctrl-engine-model/docs/Settings.md
rename to go-packages/meep-data-model/docs/Settings.md
diff --git a/go-packages/meep-ctrl-engine-client/docs/Zone.md b/go-packages/meep-data-model/docs/Zone.md
similarity index 100%
rename from go-packages/meep-ctrl-engine-client/docs/Zone.md
rename to go-packages/meep-data-model/docs/Zone.md
diff --git a/go-packages/meep-data-model/go.mod b/go-packages/meep-data-model/go.mod
new file mode 100644
index 0000000000000000000000000000000000000000..27df386a30e44973ad0c0dba0661bb48a436e159
--- /dev/null
+++ b/go-packages/meep-data-model/go.mod
@@ -0,0 +1,3 @@
+module github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model
+
+go 1.12
diff --git a/go-packages/meep-ctrl-engine-model/model_activation_info.go b/go-packages/meep-data-model/model_activation_info.go
similarity index 94%
rename from go-packages/meep-ctrl-engine-model/model_activation_info.go
rename to go-packages/meep-data-model/model_activation_info.go
index b637cafaa15d9291e6126f0682fa8a1bbe7a9097..df561accf0704522390b8d15f8658053be2d5c25 100644
--- a/go-packages/meep-ctrl-engine-model/model_activation_info.go
+++ b/go-packages/meep-data-model/model_activation_info.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
diff --git a/go-packages/meep-data-model/model_cellular_domain_config.go b/go-packages/meep-data-model/model_cellular_domain_config.go
new file mode 100644
index 0000000000000000000000000000000000000000..e2c530c3beda1effad460a428696476b22648311
--- /dev/null
+++ b/go-packages/meep-data-model/model_cellular_domain_config.go
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * MEEP Model
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 1.0.0
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package model
+
+// Cellular domain configuration information
+type CellularDomainConfig struct {
+ // Mobile Network Code part of PLMN identity as defined in ETSI TS 136 413
+ Mnc string `json:"mnc,omitempty"`
+ // Mobile Country Code part of PLMN identity as defined in ETSI TS 136 413
+ Mcc string `json:"mcc,omitempty"`
+ // The E-UTRAN Cell Identity as defined in ETSI TS 136 413 if no cellId is defined for the cell or if not applicable
+ DefaultCellId string `json:"defaultCellId,omitempty"`
+}
diff --git a/go-packages/meep-data-model/model_cellular_poa_config.go b/go-packages/meep-data-model/model_cellular_poa_config.go
new file mode 100644
index 0000000000000000000000000000000000000000..88b1341fc3d41ce5c04276f1d0796a7fbb336663
--- /dev/null
+++ b/go-packages/meep-data-model/model_cellular_poa_config.go
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * MEEP Model
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 1.0.0
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package model
+
+// Cellular POA configuration information
+type CellularPoaConfig struct {
+ // The E-UTRAN Cell Identity as defined in ETSI TS 136 413 including the ID of the eNB serving the cell
+ CellId string `json:"cellId,omitempty"`
+}
diff --git a/go-packages/meep-ctrl-engine-model/model_deployment.go b/go-packages/meep-data-model/model_deployment.go
similarity index 76%
rename from go-packages/meep-ctrl-engine-model/model_deployment.go
rename to go-packages/meep-data-model/model_deployment.go
index 786e922d09262adea62c6f88d4bc8f37de2c8d0a..da14ec39f6a07920f6f3ea6336c1fae51dce7b44 100644
--- a/go-packages/meep-ctrl-engine-model/model_deployment.go
+++ b/go-packages/meep-data-model/model_deployment.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -25,13 +25,14 @@ package model
// Network deployment object
type Deployment struct {
- // Latency in ms between domains
+ NetChar *NetworkCharacteristics `json:"netChar,omitempty"`
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar latency
InterDomainLatency int32 `json:"interDomainLatency,omitempty"`
- // Latency variation in ms between domains
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar latencyVariation
InterDomainLatencyVariation int32 `json:"interDomainLatencyVariation,omitempty"`
- // The limit of the traffic supported between domains
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar throughputUl and throughputDl
InterDomainThroughput int32 `json:"interDomainThroughput,omitempty"`
- // Packet lost (in terms of percentage) between domains
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar packetLoss
InterDomainPacketLoss float64 `json:"interDomainPacketLoss,omitempty"`
// Key/Value Pair Map (string, string)
Meta map[string]string `json:"meta,omitempty"`
diff --git a/go-packages/meep-ctrl-engine-model/model_domain.go b/go-packages/meep-data-model/model_domain.go
similarity index 66%
rename from go-packages/meep-ctrl-engine-model/model_domain.go
rename to go-packages/meep-data-model/model_domain.go
index b1d42d7790ea321f90c21af9a77569cd6796d5c2..6f2a7d41e528b862e3b218c96a95809421c19149 100644
--- a/go-packages/meep-ctrl-engine-model/model_domain.go
+++ b/go-packages/meep-data-model/model_domain.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -30,18 +30,20 @@ type Domain struct {
// Domain name
Name string `json:"name,omitempty"`
// Domain type
- Type_ string `json:"type,omitempty"`
- // Latency in ms between zones within domain
+ Type_ string `json:"type,omitempty"`
+ NetChar *NetworkCharacteristics `json:"netChar,omitempty"`
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar latency
InterZoneLatency int32 `json:"interZoneLatency,omitempty"`
- // Latency variation in ms between zones within domain
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar latencyVariation
InterZoneLatencyVariation int32 `json:"interZoneLatencyVariation,omitempty"`
- // The limit of the traffic supported between zones within the domain
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar throughputUl and throughputDl
InterZoneThroughput int32 `json:"interZoneThroughput,omitempty"`
- // Packet lost (in terms of percentage) between zones within the domain
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar packetLoss
InterZonePacketLoss float64 `json:"interZonePacketLoss,omitempty"`
// Key/Value Pair Map (string, string)
Meta map[string]string `json:"meta,omitempty"`
// Key/Value Pair Map (string, string)
- UserMeta map[string]string `json:"userMeta,omitempty"`
- Zones []Zone `json:"zones,omitempty"`
+ UserMeta map[string]string `json:"userMeta,omitempty"`
+ CellularDomainConfig *CellularDomainConfig `json:"cellularDomainConfig,omitempty"`
+ Zones []Zone `json:"zones,omitempty"`
}
diff --git a/go-packages/meep-ctrl-engine-model/model_egress_service.go b/go-packages/meep-data-model/model_egress_service.go
similarity index 95%
rename from go-packages/meep-ctrl-engine-model/model_egress_service.go
rename to go-packages/meep-data-model/model_egress_service.go
index 4d6eb9e546c916feaac9ab93c7e41f7d09e0ce6e..d478b68552935dafe8c93a5676efeb48bfce6cf4 100644
--- a/go-packages/meep-ctrl-engine-model/model_egress_service.go
+++ b/go-packages/meep-data-model/model_egress_service.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
diff --git a/go-packages/meep-ctrl-engine-model/model_event.go b/go-packages/meep-data-model/model_event.go
similarity index 89%
rename from go-packages/meep-ctrl-engine-model/model_event.go
rename to go-packages/meep-data-model/model_event.go
index cd0bb83b7846e50c3acd5b403fbb39292c497933..0cb9a7b191089ab135bf16c71e553a6389163b95 100644
--- a/go-packages/meep-ctrl-engine-model/model_event.go
+++ b/go-packages/meep-data-model/model_event.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -29,8 +29,8 @@ type Event struct {
Name string `json:"name,omitempty"`
// Event type
Type_ string `json:"type,omitempty"`
- EventNetworkCharacteristicsUpdate *EventNetworkCharacteristicsUpdate `json:"eventNetworkCharacteristicsUpdate,omitempty"`
EventMobility *EventMobility `json:"eventMobility,omitempty"`
+ EventNetworkCharacteristicsUpdate *EventNetworkCharacteristicsUpdate `json:"eventNetworkCharacteristicsUpdate,omitempty"`
EventPoasInRange *EventPoasInRange `json:"eventPoasInRange,omitempty"`
- EventOther *EventOther `json:"eventOther,omitempty"`
+ EventScenarioUpdate *EventScenarioUpdate `json:"eventScenarioUpdate,omitempty"`
}
diff --git a/go-packages/meep-ctrl-engine-model/model_event_list.go b/go-packages/meep-data-model/model_event_list.go
similarity index 94%
rename from go-packages/meep-ctrl-engine-model/model_event_list.go
rename to go-packages/meep-data-model/model_event_list.go
index 913f793bb70a6b9a943a46906b01ffc1dd1b069e..001e89ac8fee0aad3e1b02a4ee87c6d3aeff84a2 100644
--- a/go-packages/meep-ctrl-engine-model/model_event_list.go
+++ b/go-packages/meep-data-model/model_event_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
diff --git a/go-packages/meep-ctrl-engine-model/model_event_mobility.go b/go-packages/meep-data-model/model_event_mobility.go
similarity index 94%
rename from go-packages/meep-ctrl-engine-model/model_event_mobility.go
rename to go-packages/meep-data-model/model_event_mobility.go
index c7e3cf615a053e4556210a348d89436d8ccce4fd..83bff5261d354998aa448e5fd155b58e9c59b846 100644
--- a/go-packages/meep-ctrl-engine-model/model_event_mobility.go
+++ b/go-packages/meep-data-model/model_event_mobility.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
diff --git a/go-packages/meep-ctrl-engine-model/model_event_network_characteristics_update.go b/go-packages/meep-data-model/model_event_network_characteristics_update.go
similarity index 72%
rename from go-packages/meep-ctrl-engine-model/model_event_network_characteristics_update.go
rename to go-packages/meep-data-model/model_event_network_characteristics_update.go
index 0eb07d3f4b48a5c65cc2ec3d9af7160d0953ba01..bc80d3dafed20c643184be0526a192eef79e1e42 100644
--- a/go-packages/meep-ctrl-engine-model/model_event_network_characteristics_update.go
+++ b/go-packages/meep-data-model/model_event_network_characteristics_update.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -28,13 +28,6 @@ type EventNetworkCharacteristicsUpdate struct {
// Name of the network element to be updated
ElementName string `json:"elementName,omitempty"`
// Type of the network element to be updated
- ElementType string `json:"elementType,omitempty"`
- // Latency in ms
- Latency int32 `json:"latency,omitempty"`
- // Latency variation in ms
- LatencyVariation int32 `json:"latencyVariation,omitempty"`
- // Throughput limit
- Throughput int32 `json:"throughput,omitempty"`
- // Packet loss percentage
- PacketLoss float64 `json:"packetLoss,omitempty"`
+ ElementType string `json:"elementType,omitempty"`
+ NetChar *NetworkCharacteristics `json:"netChar,omitempty"`
}
diff --git a/go-packages/meep-ctrl-engine-model/model_event_poas_in_range.go b/go-packages/meep-data-model/model_event_poas_in_range.go
similarity index 94%
rename from go-packages/meep-ctrl-engine-model/model_event_poas_in_range.go
rename to go-packages/meep-data-model/model_event_poas_in_range.go
index d0f4713042382ed5954eebfb1d96606dc887057f..f0149975696df8690335643f284f783e647d0e50 100644
--- a/go-packages/meep-ctrl-engine-model/model_event_poas_in_range.go
+++ b/go-packages/meep-data-model/model_event_poas_in_range.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
diff --git a/go-packages/meep-data-model/model_event_scenario_update.go b/go-packages/meep-data-model/model_event_scenario_update.go
new file mode 100644
index 0000000000000000000000000000000000000000..dea96a196f45446304a4b76779e04fd02b38a826
--- /dev/null
+++ b/go-packages/meep-data-model/model_event_scenario_update.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * MEEP Model
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 1.0.0
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package model
+
+// Scenario Update Event object. Supported Actions: NOTE: Current backend implementation supports only a limited subset of scenario update event functionality (add/remove UE only).
+type EventScenarioUpdate struct {
+ // Action to perform on provided scenario node
+ Action string `json:"action,omitempty"`
+ Node *ScenarioNode `json:"node,omitempty"`
+}
diff --git a/go-packages/meep-ctrl-engine-model/model_external_config.go b/go-packages/meep-data-model/model_external_config.go
similarity index 95%
rename from go-packages/meep-ctrl-engine-model/model_external_config.go
rename to go-packages/meep-data-model/model_external_config.go
index 79b4a7a9f62f0385fbff9b2722e0617bb7029dd9..1d52020a417ee7b072d0c0d8f2d4120e1b62972a 100644
--- a/go-packages/meep-ctrl-engine-model/model_external_config.go
+++ b/go-packages/meep-data-model/model_external_config.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
diff --git a/go-packages/meep-data-model/model_geo_data.go b/go-packages/meep-data-model/model_geo_data.go
new file mode 100644
index 0000000000000000000000000000000000000000..a7257dd76b4b48386491ec478ed1c863f7d51954
--- /dev/null
+++ b/go-packages/meep-data-model/model_geo_data.go
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * MEEP Model
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 1.0.0
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package model
+
+// Geographic data
+type GeoData struct {
+ Location *Point `json:"location,omitempty"`
+ // Optional - Radius (in meters) around the location
+ Radius float32 `json:"radius,omitempty"`
+ Path *LineString `json:"path,omitempty"`
+ // End-of-Path mode: The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Default Port** The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt)\
+ \ **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** [Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type &\
+ \ Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Note** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** Events: Supported Actions: NOTE: Current backend implementation supports only a limited subset\
+ \ of scenario update event functionality (add/remove UE only)."
+ example: {}
+ ScenarioNode:
+ type: "object"
+ properties:
+ type:
+ type: "string"
+ description: "Node type"
+ enum:
+ - "UE"
+ nodeDataUnion:
+ $ref: "#/definitions/NodeDataUnion"
+ parent:
+ type: "string"
+ description: "Parent node name"
+ children:
+ type: "array"
+ description: "List of child node names"
+ items:
+ type: "string"
+ description: "Scenario node object"
+ example: {}
+ NodeDataUnion:
+ type: "object"
+ properties:
+ physicalLocation:
+ $ref: "#/definitions/PhysicalLocation"
+ description: "Union of node data objects\nNOTE: Only one of the following objects\
+ \ must be filled"
+ example: {}
ReplayFileList:
type: "object"
properties:
@@ -1251,146 +1209,6 @@ definitions:
description: "User description of the replay file"
description: "Scenario information"
example: {}
- PodsStatus:
- type: "object"
- properties:
- podStatus:
- type: "array"
- items:
- $ref: "#/definitions/PodStatus"
- description: "List of all pods status"
- example: {}
- PodStatus:
- type: "object"
- properties:
- name:
- type: "string"
- description: "Pod name"
- namespace:
- type: "string"
- description: "Pod namespace"
- meepApp:
- type: "string"
- description: "Pod process name"
- meepOrigin:
- type: "string"
- description: "Pod origin(core, scenario)"
- meepScenario:
- type: "string"
- description: "Pod scenario name"
- phase:
- type: "string"
- description: "Pod phase"
- podInitialized:
- type: "string"
- description: "Pod initialized (true/false)"
- podReady:
- type: "string"
- description: "Pod ready (true/false)"
- podScheduled:
- type: "string"
- description: "Pod scheduled (true/false)"
- podUnschedulable:
- type: "string"
- description: "Pod unschedulable (true/false)"
- podConditionError:
- type: "string"
- description: "Pod error message"
- containerStatusesMsg:
- type: "string"
- description: "Failed container error message"
- nbOkContainers:
- type: "string"
- description: "Number of containers that are up"
- nbTotalContainers:
- type: "string"
- description: "Number of total containers in the pod"
- nbPodRestart:
- type: "string"
- description: "Number of container failures leading to pod restarts"
- logicalState:
- type: "string"
- description: "State that is mapping the kubernetes api state"
- startTime:
- type: "string"
- description: "Pod creation time"
- example:
- podStatus:
- - podName: "mypod"
- namespace: "default"
- meepApp: "pod1"
- meepOrigin: "scenario"
- meepScenario: "myScenario"
- phase: "Running"
- podInitialized: "True"
- podReady: "False"
- podScheduled: "True"
- podUnschedulable: "False"
- podConditionError: "containers with unready status: [myshel]"
- nbOkContainers: "0"
- nbTotalContainers: "1"
- nbPodRestart: "15005"
- startTime: "2018-09-10 14:24:00 +0000 UTC"
-parameters:
- Name:
- name: "name"
- in: "path"
- description: "Scenario name"
- required: true
- type: "string"
- x-exportParamName: "Name"
- ReplayInfo:
- in: "body"
- name: "replayInfo"
- description: "Replay information"
- required: true
- schema:
- $ref: "http://localhost:8291/meep-model.yaml#/definitions/ReplayInfo"
- x-exportParamName: "ReplayInfo"
- Replay:
- name: "replay"
- in: "path"
- description: "Scenario events execution sequence"
- required: true
- x-exportParamName: "Replay"
- ReplayFileName:
- name: "replayFileName"
- in: "path"
- description: "Scenario events execution file name"
- required: true
- type: "string"
- x-exportParamName: "ReplayFileName"
- Scenario:
- in: "body"
- name: "scenario"
- description: "Scenario to add to MEEP store"
- required: true
- schema:
- $ref: "http://localhost:8291/meep-model.yaml#/definitions/Scenario"
- x-exportParamName: "Scenario"
- ActivationInfo:
- in: "body"
- name: "activationInfo"
- description: "Activation information"
- required: true
- schema:
- $ref: "http://localhost:8291/meep-model.yaml#/definitions/ActivationInfo"
- x-exportParamName: "ActivationInfo"
- EventType:
- name: "type"
- in: "path"
- description: "Event type"
- required: true
- type: "string"
- x-exportParamName: "Type_"
- Event:
- in: "body"
- name: "event"
- description: "Event to send to active scenario"
- required: true
- schema:
- $ref: "http://localhost:8291/meep-model.yaml#/definitions/Event"
- x-exportParamName: "Event"
responses:
Std200:
description: "OK"
diff --git a/go-packages/meep-ctrl-engine-client/api_scenario_execution.go b/go-packages/meep-sandbox-ctrl-client/api_active_scenario.go
similarity index 75%
rename from go-packages/meep-ctrl-engine-client/api_scenario_execution.go
rename to go-packages/meep-sandbox-ctrl-client/api_active_scenario.go
index a9ec38c33239471f58e2bc5979209bf0e3f14863..6ffa4f815e58ce9d0755bc531824d20f1a7264cd 100644
--- a/go-packages/meep-ctrl-engine-client/api_scenario_execution.go
+++ b/go-packages/meep-sandbox-ctrl-client/api_active_scenario.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** Events: **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** Supported Actions: NOTE: Current backend implementation supports only a limited subset of scenario update event functionality (add/remove UE only).
+type EventScenarioUpdate struct {
+ // Action to perform on provided scenario node
+ Action string `json:"action,omitempty"`
+ Node *ScenarioNode `json:"node,omitempty"`
+}
diff --git a/go-packages/meep-ctrl-engine-client/model_external_config.go b/go-packages/meep-sandbox-ctrl-client/model_external_config.go
similarity index 63%
rename from go-packages/meep-ctrl-engine-client/model_external_config.go
rename to go-packages/meep-sandbox-ctrl-client/model_external_config.go
index 8c0dec311463b49b2a303bfe8cc5f6fb7f5cad13..a9eea0f9047903b2c09210bbf26a3ceceb1d4e88 100644
--- a/go-packages/meep-ctrl-engine-client/model_external_config.go
+++ b/go-packages/meep-sandbox-ctrl-client/model_external_config.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details** **Default Port** **Micro-service** **Type & Usage** **Details** **Micro-service** **Type & Usage** **Details**
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
+
+## Overview
+This server was generated by the [swagger-codegen]
+(https://github.com/swagger-api/swagger-codegen) project.
+By using the [OpenAPI-Spec](https://github.com/OAI/OpenAPI-Specification) from a remote server, you can easily generate a server stub.
+-
+
+To see how to make this your own, look here:
+
+[README](https://github.com/swagger-api/swagger-codegen/blob/master/README.md)
+
+- API version: 1.0.0
+- Build date: 2020-06-28T22:53:29.466-04:00
+
+
+### Running the server
+To run the server, follow these simple steps:
+
+```
+go run main.go
+```
+
diff --git a/go-apps/meep-ctrl-engine/server/api_scenario_execution.go b/go-apps/meep-sandbox-ctrl/server/api_active_scenario.go
similarity index 66%
rename from go-apps/meep-ctrl-engine/server/api_scenario_execution.go
rename to go-apps/meep-sandbox-ctrl/server/api_active_scenario.go
index 50d252070dbc8ad35964c5fa42ffb0d89de42737..0cf2e00f0389efbb13a0dc13b80a6df212b967e1 100644
--- a/go-apps/meep-ctrl-engine/server/api_scenario_execution.go
+++ b/go-apps/meep-sandbox-ctrl/server/api_active_scenario.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -43,11 +43,6 @@ func GetActiveScenario(w http.ResponseWriter, r *http.Request) {
ceGetActiveScenario(w, r)
}
-// SendEvent - Send event to active (deployed) scenario
-func SendEvent(w http.ResponseWriter, r *http.Request) {
- ceSendEvent(w, r)
-}
-
// TerminateScenario - Terminate active (deployed) scenario
func TerminateScenario(w http.ResponseWriter, r *http.Request) {
ceTerminateScenario(w, r)
diff --git a/go-apps/meep-ctrl-engine/server/api_event_replay.go b/go-apps/meep-sandbox-ctrl/server/api_event_replay.go
similarity index 74%
rename from go-apps/meep-ctrl-engine/server/api_event_replay.go
rename to go-apps/meep-sandbox-ctrl/server/api_event_replay.go
index 19cb3c6152e2af76fd9121031589576b92d6b7e1..8713cbd3a1463409eed9f6cbacd9de86623504a4 100644
--- a/go-apps/meep-ctrl-engine/server/api_event_replay.go
+++ b/go-apps/meep-sandbox-ctrl/server/api_event_replay.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -56,10 +56,6 @@ func GetReplayStatus(w http.ResponseWriter, r *http.Request) {
ceGetReplayStatus(w, r)
}
-func StopReplayFile(w http.ResponseWriter, r *http.Request) {
- ceStopReplayFile(w, r)
-}
-
func LoopReplay(w http.ResponseWriter, r *http.Request) {
ceLoopReplay(w, r)
}
@@ -67,3 +63,7 @@ func LoopReplay(w http.ResponseWriter, r *http.Request) {
func PlayReplayFile(w http.ResponseWriter, r *http.Request) {
cePlayReplayFile(w, r)
}
+
+func StopReplayFile(w http.ResponseWriter, r *http.Request) {
+ ceStopReplayFile(w, r)
+}
diff --git a/go-apps/meep-sandbox-ctrl/server/api_events.go b/go-apps/meep-sandbox-ctrl/server/api_events.go
new file mode 100644
index 0000000000000000000000000000000000000000..a013c5dafe4a2a847ba18e2666a3ba2b489d5383
--- /dev/null
+++ b/go-apps/meep-sandbox-ctrl/server/api_events.go
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Sandbox Controller REST API
+ *
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+import (
+ "net/http"
+)
+
+// SendEvent - Send event to active (deployed) scenario
+func SendEvent(w http.ResponseWriter, r *http.Request) {
+ ceSendEvent(w, r)
+}
diff --git a/go-apps/meep-sandbox-ctrl/server/logger.go b/go-apps/meep-sandbox-ctrl/server/logger.go
new file mode 100644
index 0000000000000000000000000000000000000000..6a324ef383fb60368f7375bc0a63b29bd1299b14
--- /dev/null
+++ b/go-apps/meep-sandbox-ctrl/server/logger.go
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Sandbox Controller REST API
+ *
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package server
+
+import (
+ "log"
+ "net/http"
+ "time"
+)
+
+func Logger(inner http.Handler, name string) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ start := time.Now()
+
+ inner.ServeHTTP(w, r)
+
+ log.Printf(
+ "%s %s %s %s",
+ r.Method,
+ r.RequestURI,
+ name,
+ time.Since(start),
+ )
+ })
+}
diff --git a/go-apps/meep-ctrl-engine/server/routers.go b/go-apps/meep-sandbox-ctrl/server/routers.go
similarity index 59%
rename from go-apps/meep-ctrl-engine/server/routers.go
rename to go-apps/meep-sandbox-ctrl/server/routers.go
index 6ff6b2f074784aff66522adef6c56723e398fc8c..1455fe372e9d1177db327ab276afa6d7709aaca3 100644
--- a/go-apps/meep-ctrl-engine/server/routers.go
+++ b/go-apps/meep-sandbox-ctrl/server/routers.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -44,7 +44,9 @@ type Routes []Route
func NewRouter() *mux.Router {
router := mux.NewRouter().StrictSlash(true)
for _, route := range routes {
- var handler http.Handler = Logger(route.HandlerFunc, route.Name)
+ var handler http.Handler = route.HandlerFunc
+ handler = Logger(handler, route.Name)
+ // handler = httpLog.LogRx(handler, "")
router.
Methods(route.Method).
@@ -53,7 +55,8 @@ func NewRouter() *mux.Router {
Handler(handler)
}
- router.PathPrefix("/").Handler(http.StripPrefix("/", http.FileServer(http.Dir("./static/"))))
+ // Path prefix router order is important
+ router.PathPrefix("/api/").Handler(http.StripPrefix("/api/", http.FileServer(http.Dir("./swagger"))))
return router
}
@@ -66,161 +69,112 @@ var routes = Routes{
Route{
"Index",
"GET",
- "/v1/",
+ "/sandbox-ctrl/v1/",
Index,
},
+ Route{
+ "ActivateScenario",
+ strings.ToUpper("Post"),
+ "/sandbox-ctrl/v1/active/{name}",
+ ActivateScenario,
+ },
+
+ Route{
+ "GetActiveNodeServiceMaps",
+ strings.ToUpper("Get"),
+ "/sandbox-ctrl/v1/active/serviceMaps",
+ GetActiveNodeServiceMaps,
+ },
+
+ Route{
+ "GetActiveScenario",
+ strings.ToUpper("Get"),
+ "/sandbox-ctrl/v1/active",
+ GetActiveScenario,
+ },
+
+ Route{
+ "TerminateScenario",
+ strings.ToUpper("Delete"),
+ "/sandbox-ctrl/v1/active",
+ TerminateScenario,
+ },
+
Route{
"CreateReplayFile",
strings.ToUpper("Post"),
- "/v1/replay/{name}",
+ "/sandbox-ctrl/v1/replay/{name}",
CreateReplayFile,
},
Route{
"CreateReplayFileFromScenarioExec",
strings.ToUpper("Post"),
- "/v1/replay/{name}/generate",
+ "/sandbox-ctrl/v1/replay/{name}/generate",
CreateReplayFileFromScenarioExec,
},
Route{
"DeleteReplayFile",
strings.ToUpper("Delete"),
- "/v1/replay/{name}",
+ "/sandbox-ctrl/v1/replay/{name}",
DeleteReplayFile,
},
Route{
"DeleteReplayFileList",
strings.ToUpper("Delete"),
- "/v1/replay",
+ "/sandbox-ctrl/v1/replay",
DeleteReplayFileList,
},
- Route{
- "GetReplayStatus",
- strings.ToUpper("Get"),
- "/v1/replaystatus",
- GetReplayStatus,
- },
-
Route{
"GetReplayFile",
strings.ToUpper("Get"),
- "/v1/replay/{name}",
+ "/sandbox-ctrl/v1/replay/{name}",
GetReplayFile,
},
Route{
"GetReplayFileList",
strings.ToUpper("Get"),
- "/v1/replay",
+ "/sandbox-ctrl/v1/replay",
GetReplayFileList,
},
+ Route{
+ "GetReplayStatus",
+ strings.ToUpper("Get"),
+ "/sandbox-ctrl/v1/replaystatus",
+ GetReplayStatus,
+ },
+
Route{
"LoopReplay",
strings.ToUpper("Post"),
- "/v1/replay/{name}/loop",
+ "/sandbox-ctrl/v1/replay/{name}/loop",
LoopReplay,
},
Route{
"PlayReplayFile",
strings.ToUpper("Post"),
- "/v1/replay/{name}/play",
+ "/sandbox-ctrl/v1/replay/{name}/play",
PlayReplayFile,
},
Route{
"StopReplayFile",
strings.ToUpper("Post"),
- "/v1/replay/{name}/stop",
+ "/sandbox-ctrl/v1/replay/{name}/stop",
StopReplayFile,
},
- Route{
- "GetStates",
- strings.ToUpper("Get"),
- "/v1/states",
- GetStates,
- },
-
- Route{
- "CreateScenario",
- strings.ToUpper("Post"),
- "/v1/scenarios/{name}",
- CreateScenario,
- },
-
- Route{
- "DeleteScenario",
- strings.ToUpper("Delete"),
- "/v1/scenarios/{name}",
- DeleteScenario,
- },
-
- Route{
- "DeleteScenarioList",
- strings.ToUpper("Delete"),
- "/v1/scenarios",
- DeleteScenarioList,
- },
-
- Route{
- "GetScenario",
- strings.ToUpper("Get"),
- "/v1/scenarios/{name}",
- GetScenario,
- },
-
- Route{
- "GetScenarioList",
- strings.ToUpper("Get"),
- "/v1/scenarios",
- GetScenarioList,
- },
-
- Route{
- "SetScenario",
- strings.ToUpper("Put"),
- "/v1/scenarios/{name}",
- SetScenario,
- },
-
- Route{
- "ActivateScenario",
- strings.ToUpper("Post"),
- "/v1/active/{name}",
- ActivateScenario,
- },
-
- Route{
- "GetActiveNodeServiceMaps",
- strings.ToUpper("Get"),
- "/v1/active/serviceMaps",
- GetActiveNodeServiceMaps,
- },
-
- Route{
- "GetActiveScenario",
- strings.ToUpper("Get"),
- "/v1/active",
- GetActiveScenario,
- },
-
Route{
"SendEvent",
strings.ToUpper("Post"),
- "/v1/events/{type}",
+ "/sandbox-ctrl/v1/events/{type}",
SendEvent,
},
-
- Route{
- "TerminateScenario",
- strings.ToUpper("Delete"),
- "/v1/active",
- TerminateScenario,
- },
}
diff --git a/go-apps/meep-ctrl-engine/server/ctrl-engine.go b/go-apps/meep-sandbox-ctrl/server/sandbox-ctrl.go
similarity index 56%
rename from go-apps/meep-ctrl-engine/server/ctrl-engine.go
rename to go-apps/meep-sandbox-ctrl/server/sandbox-ctrl.go
index 335210f4a3bc2b4eac8fc838e9ac764b0bac02b7..2792a051f244c7a8b8fbaaaf74a94690ecdb9d09 100644
--- a/go-apps/meep-ctrl-engine/server/ctrl-engine.go
+++ b/go-apps/meep-sandbox-ctrl/server/sandbox-ctrl.go
@@ -20,8 +20,8 @@ import (
"encoding/json"
"errors"
"fmt"
- "io/ioutil"
"net/http"
+ "os"
"sort"
"strconv"
"strings"
@@ -30,343 +30,234 @@ import (
"github.com/gorilla/mux"
couch "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-couch"
- ceModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model"
+ dataModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model"
+ httpLog "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-http-logger"
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"
+ mq "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq"
replay "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-replay-manager"
- watchdog "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog"
+ ss "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-sandbox-store"
)
type Scenario struct {
Name string `json:"name,omitempty"`
}
+type SandboxCtrl struct {
+ sandboxName string
+ mqGlobal *mq.MsgQueue
+ mqLocal *mq.MsgQueue
+ scenarioStore *couch.Connector
+ replayStore *couch.Connector
+ modelCfg mod.ModelCfg
+ activeModel *mod.Model
+ metricStore *ms.MetricStore
+ replayMgr *replay.ReplayMgr
+ sandboxStore *ss.SandboxStore
+}
+
const scenarioDBName = "scenarios"
const replayDBName = "replays"
-const moduleName string = "meep-ctrl-engine"
-const moduleMonEngine string = "mon-engine"
-
-const eventTypeMobility = "MOBILITY"
-const eventTypeNetCharUpdate = "NETWORK-CHARACTERISTICS-UPDATE"
-const eventTypePoasInRange = "POAS-IN-RANGE"
-const eventTypeOther = "OTHER"
-
-var scenarioStore *couch.Connector
-var replayStore *couch.Connector
-
-var virtWatchdog *watchdog.Watchdog
-var rc *redis.Connector
-var activeModel *mod.Model
-var metricStore *ms.MetricStore
-var replayMgr *replay.ReplayMgr
-
-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 {
-
- innerMap := map[string]bool{
- "meep-couchdb": false,
- "meep-ctrl-engine": false,
- "meep-loc-serv": false,
- "meep-metricbeat": false,
- "meep-metrics-engine": false,
- "meep-mg-manager": false,
- "meep-mon-engine": false,
- "meep-tc-engine": false,
- "meep-webhook": false,
- "virt-engine": false,
- }
- return innerMap
-}
+const moduleName = "meep-sandbox-ctrl"
+
+// MQ payload fields
+const fieldSandboxName = "sandbox-name"
+const fieldScenarioName = "scenario-name"
+
+// Event types
+const (
+ eventTypeMobility = "MOBILITY"
+ eventTypeNetCharUpdate = "NETWORK-CHARACTERISTICS-UPDATE"
+ eventTypePoasInRange = "POAS-IN-RANGE"
+ eventTypeScenarioUpdate = "SCENARIO-UPDATE"
+)
-// CtrlEngineInit Initializes the Controller Engine
-func CtrlEngineInit() (err error) {
- log.Debug("CtrlEngineInit")
+// Declare as variables to enable overwrite in test
+var couchDBAddr string = "http://meep-couchdb-svc-couchdb.default.svc.cluster.local:5984/"
+var redisDBAddr string = "meep-redis-master.default.svc.cluster.local:6379"
+var influxDBAddr string = "http://meep-influxdb.default.svc.cluster.local:8086"
- // Make Scenario DB connection
- scenarioStore, err = couch.NewConnector(couchDBAddr, scenarioDBName)
- if err != nil {
- log.Error("Failed connection to Scenario DB. Error: ", err)
- return err
- }
- log.Info("Connected to Scenario DB")
+// Sandbox Controller
+var sbxCtrl *SandboxCtrl
- // Retrieve scenario list from DB
- _, scenarioList, err := scenarioStore.GetDocList()
- if err != nil {
- log.Error(err.Error())
- return err
- }
+// Init Initializes the Sandbox Controller
+func Init() (err error) {
+ log.Debug("Init")
- // 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")
- }
+ // Create new Sandbox Controller
+ sbxCtrl = new(SandboxCtrl)
- // Update scenario in DB
- rev, err := scenarioStore.UpdateDoc(s.Name, validScenario)
- if err != nil {
- return errors.New("Failed to update scenario with error: " + err.Error())
- }
- log.Debug("Scenario updated with rev: ", rev)
- }
+ // Retrieve Sandbox name from environment variable
+ sbxCtrl.sandboxName = strings.TrimSpace(os.Getenv("MEEP_SANDBOX_NAME"))
+ if sbxCtrl.sandboxName == "" {
+ err = errors.New("MEEP_SANDBOX_NAME env variable not set")
+ log.Error(err.Error())
+ return err
}
+ log.Info("MEEP_SANDBOX_NAME: ", sbxCtrl.sandboxName)
- // Create new active scenario model
- activeModel, err = mod.NewModel(mod.DbAddress, moduleName, "activeScenario")
+ // Create Global message queue
+ sbxCtrl.mqGlobal, err = mq.NewMsgQueue(mq.GetGlobalName(), moduleName, sbxCtrl.sandboxName, redisDBAddr)
if err != nil {
- log.Error("Failed to create model: ", err.Error())
+ log.Error("Failed to create Message Queue with error: ", err)
return err
}
+ log.Info("Global Message Queue created")
- // Make Replay DB connection
- replayStore, err = couch.NewConnector(couchDBAddr, replayDBName)
+ // Create Local message queue
+ sbxCtrl.mqLocal, err = mq.NewMsgQueue(mq.GetLocalName(sbxCtrl.sandboxName), moduleName, sbxCtrl.sandboxName, redisDBAddr)
if err != nil {
- log.Error("Failed connection to Replay DB. Error: ", err)
+ log.Error("Failed to create Message Queue with error: ", err)
return err
}
- log.Info("Connected to Replay DB")
+ log.Info("Local Message Queue created")
- // Connect to Redis DB - This one used for Pod status
- rc, err = redis.NewConnector(redisDBAddr, 0)
+ // Create new active scenario model
+ sbxCtrl.modelCfg = mod.ModelCfg{
+ Name: "activeScenario",
+ Namespace: sbxCtrl.sandboxName,
+ Module: moduleName,
+ UpdateCb: activeScenarioUpdateCb,
+ DbAddr: mod.DbAddress,
+ }
+ sbxCtrl.activeModel, err = mod.NewModel(sbxCtrl.modelCfg)
if err != nil {
- log.Error("Failed connection to Redis: ", err)
+ log.Error("Failed to create model: ", err.Error())
return err
}
- // Setup for virt-engine monitoring
- virtWatchdog, err = watchdog.NewWatchdog(redisDBAddr, "meep-virt-engine")
+ // Make Scenario DB connection
+ sbxCtrl.scenarioStore, err = couch.NewConnector(couchDBAddr, scenarioDBName)
if err != nil {
- log.Error("Failed to initialize virt-engine watchdog. Error: ", err)
+ log.Error("Failed connection to Scenario DB. Error: ", err)
return err
}
- err = virtWatchdog.Start(time.Second, 3*time.Second)
+ log.Info("Connected to Scenario DB")
+
+ // Make Replay DB connection
+ sbxCtrl.replayStore, err = couch.NewConnector(couchDBAddr, replayDBName)
if err != nil {
- log.Error("Failed to start virt-engine watchdog. Error: ", err)
+ log.Error("Failed connection to Replay DB. Error: ", err)
return err
}
+ log.Info("Connected to Replay DB")
// Connect to Metric Store
- metricStore, err = ms.NewMetricStore("", influxDBAddr, redisDBAddr)
+ sbxCtrl.metricStore, err = ms.NewMetricStore("", sbxCtrl.sandboxName, influxDBAddr, redisDBAddr)
if err != nil {
log.Error("Failed connection to Redis: ", err)
return err
}
// Setup for replay manager
- replayMgr, err = replay.NewReplayMgr("meep-ctrl-engine-replay")
+ sbxCtrl.replayMgr, err = replay.NewReplayMgr("meep-sandbox-ctrl-replay")
if err != nil {
log.Error("Failed to initialize replay manager. Error: ", err)
return err
}
- return nil
-}
-
-// Create a new scenario in the scenario store
-// POST /scenario/{name}
-func ceCreateScenario(w http.ResponseWriter, r *http.Request) {
- log.Debug("ceCreateScenario")
-
- // Get scenario name from request parameters
- vars := mux.Vars(r)
- scenarioName := vars["name"]
- log.Debug("Scenario name: ", scenarioName)
-
- // Retrieve scenario from request body
- if r.Body == nil {
- err := errors.New("Request body is missing")
- log.Error(err.Error())
- http.Error(w, err.Error(), http.StatusBadRequest)
- return
- }
- b, err := ioutil.ReadAll(r.Body)
+ // Connect to Sandbox Store
+ sbxCtrl.sandboxStore, err = ss.NewSandboxStore(redisDBAddr)
if err != nil {
- log.Error(err.Error())
- http.Error(w, err.Error(), http.StatusBadRequest)
- 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
- rev, err := scenarioStore.AddDoc(scenarioName, validScenario)
- if err != nil {
- log.Error(err.Error())
- http.Error(w, err.Error(), http.StatusConflict)
- return
- }
- log.Debug("Scenario added with rev: ", rev)
-
- // OK
- w.Header().Set("Content-Type", "application/json; charset=UTF-8")
- w.WriteHeader(http.StatusOK)
-}
-
-// Delete scenario from scenario store
-// DELETE /scenarios/{name}
-func ceDeleteScenario(w http.ResponseWriter, r *http.Request) {
- log.Debug("ceDeleteScenario")
-
- // Get scenario name from request parameters
- vars := mux.Vars(r)
- scenarioName := vars["name"]
- log.Debug("Scenario name: ", scenarioName)
-
- // Remove scenario from DB
- err := scenarioStore.DeleteDoc(scenarioName)
- if err != nil {
- log.Error(err.Error())
- http.Error(w, err.Error(), http.StatusNotFound)
- return
+ log.Error("Failed connection to Sandbox Store: ", err.Error())
+ return err
}
+ log.Info("Connected to Sandbox Store")
- // OK
- w.Header().Set("Content-Type", "application/json; charset=UTF-8")
- w.WriteHeader(http.StatusOK)
+ return nil
}
-// Remove all scenarios from sceanrio store
-// DELETE /scenarios
-func ceDeleteScenarioList(w http.ResponseWriter, r *http.Request) {
- log.Debug("ceDeleteScenarioList")
+// Run Starts the Sandbox Controller
+func Run() (err error) {
- // Remove all scenario from DB
- err := scenarioStore.DeleteAllDocs()
- if err != nil {
- log.Error(err.Error())
- http.Error(w, err.Error(), http.StatusNotFound)
- return
+ // Activate scenario on sandbox startup if required, otherwise wait for activation request
+ if sbox, err := sbxCtrl.sandboxStore.Get(sbxCtrl.sandboxName); err == nil && sbox != nil {
+ if sbox.ScenarioName != "" {
+ err = activateScenario(sbox.ScenarioName)
+ if err != nil {
+ log.Error("Failed to activate scenario with err: ", err.Error())
+ } else {
+ log.Info("Successfully activated scenario: ", sbox.ScenarioName)
+ _ = httpLog.ReInit(moduleName, sbxCtrl.sandboxName, sbox.ScenarioName, redisDBAddr, influxDBAddr)
+ }
+ }
}
- w.Header().Set("Content-Type", "application/json; charset=UTF-8")
- w.WriteHeader(http.StatusOK)
+ return nil
}
-// Retrieve scenario from scenario store
-// GET /scenarios/{name}
-func ceGetScenario(w http.ResponseWriter, r *http.Request) {
- log.Debug("ceGetScenario")
-
- // Get scenario name from request parameters
- vars := mux.Vars(r)
- scenarioName := vars["name"]
- log.Debug("Scenario name: ", scenarioName)
-
- // Validate scenario name
+// Activate the provided scenario
+func activateScenario(scenarioName string) (err error) {
+ // Verify scenario name
if scenarioName == "" {
- log.Debug("Invalid scenario name")
- http.Error(w, "Invalid scenario name "+scenarioName, http.StatusBadRequest)
- return
+ err = errors.New("Empty scenario name")
+ return err
}
- // Retrieve scenario from DB
- var scenario []byte
- scenario, err := scenarioStore.GetDoc(false, scenarioName)
- if err != nil {
- log.Error(err.Error())
- http.Error(w, err.Error(), http.StatusNotFound)
- return
+ // Create new model object
+ if sbxCtrl.activeModel == nil {
+ sbxCtrl.activeModel, err = mod.NewModel(sbxCtrl.modelCfg)
+ if err != nil {
+ log.Error("Failed to create model: ", err.Error())
+ return err
+ }
}
- s, err := mod.JSONMarshallScenario(scenario)
- if err != nil {
- log.Error(err.Error())
- http.Error(w, err.Error(), http.StatusInternalServerError)
- return
+ // Make sure scenario is not already deployed
+ if sbxCtrl.activeModel.Active {
+ err = errors.New("Scenario already active")
+ return err
}
- // Send response
- w.Header().Set("Content-Type", "application/json; charset=UTF-8")
- w.WriteHeader(http.StatusOK)
- fmt.Fprint(w, s)
-}
-
-// Retrieve all scenarios from scenario store
-// GET /scenarios
-func ceGetScenarioList(w http.ResponseWriter, r *http.Request) {
- log.Debug("ceGetScenarioList")
-
- // Retrieve scenario list from DB
- _, scenarioList, err := scenarioStore.GetDocList()
+ // Retrieve scenario to activate from DB
+ var scenario []byte
+ scenario, err = sbxCtrl.scenarioStore.GetDoc(false, scenarioName)
if err != nil {
- log.Error(err.Error())
- http.Error(w, err.Error(), http.StatusNotFound)
- return
+ log.Error("Failed to retrieve scenario from store with err: ", err.Error())
+ return err
}
- sl, err := mod.JSONMarshallScenarioList(scenarioList)
+ // Set Metrics Store
+ err = sbxCtrl.metricStore.SetStore(scenarioName)
if err != nil {
- log.Error(err.Error())
- http.Error(w, err.Error(), http.StatusInternalServerError)
- return
+ log.Error("Failed to set scenario metrics store with err: ", err.Error())
+ return err
}
- w.Header().Set("Content-Type", "application/json; charset=UTF-8")
- w.WriteHeader(http.StatusOK)
- fmt.Fprint(w, sl)
-}
-
-// Update scenario in scenario store
-// PUT /scenarios/{name}
-func ceSetScenario(w http.ResponseWriter, r *http.Request) {
- log.Debug("ceSetScenario")
-
- // Get scenario name from request parameters
- vars := mux.Vars(r)
- scenarioName := vars["name"]
- log.Debug("Scenario name: ", scenarioName)
-
- // Retrieve scenario from request body
- if r.Body == nil {
- err := errors.New("Request body is missing")
- log.Error(err.Error())
- http.Error(w, err.Error(), http.StatusBadRequest)
- return
+ // Activate scenario
+ err = sbxCtrl.activeModel.SetScenario(scenario)
+ if err != nil {
+ log.Error("Failed to set active scenario with err: ", err.Error())
+ return err
}
- b, err := ioutil.ReadAll(r.Body)
+ err = sbxCtrl.activeModel.Activate()
if err != nil {
- log.Error(err.Error())
- http.Error(w, err.Error(), http.StatusBadRequest)
- return
+ log.Error("Failed to activate scenario with err: ", err.Error())
+ return err
}
- // Validate scenario
- validScenario, _, err := mod.ValidateScenario(b)
+ // Send Activation message to Virt Engine on Global Message Queue
+ msg := sbxCtrl.mqGlobal.CreateMsg(mq.MsgScenarioActivate, mq.TargetAll, mq.TargetAll)
+ msg.Payload[fieldSandboxName] = sbxCtrl.sandboxName
+ msg.Payload[fieldScenarioName] = scenarioName
+ log.Debug("TX MSG: ", mq.PrintMsg(msg))
+ err = sbxCtrl.mqGlobal.SendMsg(msg)
if err != nil {
- log.Error(err.Error())
- http.Error(w, err.Error(), http.StatusBadRequest)
- return
+ log.Error("Failed to send message. Error: ", err.Error())
+ return err
}
- // Update scenario in DB
- rev, err := scenarioStore.UpdateDoc(scenarioName, validScenario)
+ // Send Activation message on local Message Queue
+ msg = sbxCtrl.mqLocal.CreateMsg(mq.MsgScenarioActivate, mq.TargetAll, sbxCtrl.sandboxName)
+ log.Debug("TX MSG: ", mq.PrintMsg(msg))
+ err = sbxCtrl.mqLocal.SendMsg(msg)
if err != nil {
- log.Error(err.Error())
- http.Error(w, err.Error(), http.StatusNotFound)
- return
+ log.Error("Failed to send message. Error: ", err.Error())
+ return err
}
- log.Debug("Scenario updated with rev: ", rev)
- // OK
- w.Header().Set("Content-Type", "application/json; charset=UTF-8")
- w.WriteHeader(http.StatusOK)
+ return nil
}
// Activate a scenario
@@ -379,9 +270,9 @@ func ceActivateScenario(w http.ResponseWriter, r *http.Request) {
scenarioName := vars["name"]
log.Debug("Scenario name: ", scenarioName)
- if activeModel == nil {
+ if sbxCtrl.activeModel == nil {
var err error
- activeModel, err = mod.NewModel(mod.DbAddress, moduleName, "activeScenario")
+ sbxCtrl.activeModel, err = mod.NewModel(sbxCtrl.modelCfg)
if err != nil {
log.Error("Failed to create model: ", err.Error())
http.Error(w, err.Error(), http.StatusInternalServerError)
@@ -390,7 +281,7 @@ func ceActivateScenario(w http.ResponseWriter, r *http.Request) {
}
// Make sure scenario is not already deployed
- if activeModel.Active {
+ if sbxCtrl.activeModel.Active {
log.Error("Scenario already active")
http.Error(w, "Scenario already active", http.StatusBadRequest)
return
@@ -398,7 +289,7 @@ func ceActivateScenario(w http.ResponseWriter, r *http.Request) {
// Retrieve scenario to activate from DB
var scenario []byte
- scenario, err := scenarioStore.GetDoc(false, scenarioName)
+ scenario, err := sbxCtrl.scenarioStore.GetDoc(false, scenarioName)
if err != nil {
log.Error(err.Error())
http.Error(w, err.Error(), http.StatusNotFound)
@@ -406,7 +297,7 @@ func ceActivateScenario(w http.ResponseWriter, r *http.Request) {
}
// Set Metrics Store
- err = metricStore.SetStore(scenarioName)
+ err = sbxCtrl.metricStore.SetStore(scenarioName)
if err != nil {
log.Error(err.Error())
http.Error(w, err.Error(), http.StatusInternalServerError)
@@ -414,21 +305,41 @@ func ceActivateScenario(w http.ResponseWriter, r *http.Request) {
}
// Activate scenario & publish
- err = activeModel.SetScenario(scenario)
+ err = sbxCtrl.activeModel.SetScenario(scenario)
if err != nil {
log.Error(err.Error())
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
- err = activeModel.Activate()
+ err = sbxCtrl.activeModel.Activate()
if err != nil {
log.Error(err.Error())
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
+ _ = httpLog.ReInit(moduleName, sbxCtrl.sandboxName, scenarioName, redisDBAddr, influxDBAddr)
+
+ // Send Activation message to Virt Engine on Global Message Queue
+ msg := sbxCtrl.mqGlobal.CreateMsg(mq.MsgScenarioActivate, mq.TargetAll, mq.TargetAll)
+ msg.Payload[fieldSandboxName] = sbxCtrl.sandboxName
+ msg.Payload[fieldScenarioName] = scenarioName
+ log.Debug("TX MSG: ", mq.PrintMsg(msg))
+ err = sbxCtrl.mqGlobal.SendMsg(msg)
+ if err != nil {
+ log.Error("Failed to send message. Error: ", err.Error())
+ }
+
+ // Send Activation message on local Message Queue
+ msg = sbxCtrl.mqLocal.CreateMsg(mq.MsgScenarioActivate, mq.TargetAll, sbxCtrl.sandboxName)
+ log.Debug("TX MSG: ", mq.PrintMsg(msg))
+ err = sbxCtrl.mqLocal.SendMsg(msg)
+ if err != nil {
+ log.Error("Failed to send message. Error: ", err.Error())
+ }
+
if r.Body != nil {
- var actInfo ceModel.ActivationInfo
+ var actInfo dataModel.ActivationInfo
decoder := json.NewDecoder(r.Body)
err = decoder.Decode(&actInfo)
if err != nil {
@@ -443,7 +354,7 @@ func ceActivateScenario(w http.ResponseWriter, r *http.Request) {
return
}
- err = replayMgr.Start(actInfo.ReplayFileName, events, false, false)
+ err = sbxCtrl.replayMgr.Start(actInfo.ReplayFileName, events, false, false)
if err != nil {
log.Error(err.Error())
@@ -463,12 +374,12 @@ func ceActivateScenario(w http.ResponseWriter, r *http.Request) {
func ceGetActiveScenario(w http.ResponseWriter, r *http.Request) {
log.Debug("CEGetActiveScenario")
- if activeModel == nil || !activeModel.Active {
+ if sbxCtrl.activeModel == nil || !sbxCtrl.activeModel.Active {
http.Error(w, "No scenario is active", http.StatusNotFound)
return
}
- scenario, err := activeModel.GetScenario()
+ scenario, err := sbxCtrl.activeModel.GetScenario()
if err != nil {
log.Error(err.Error())
http.Error(w, err.Error(), http.StatusInternalServerError)
@@ -485,9 +396,9 @@ func ceGetActiveScenario(w http.ResponseWriter, r *http.Request) {
// GET /active/serviceMaps
// NOTE: query parameters 'node', 'type' and 'service' may be specified to filter results
func ceGetActiveNodeServiceMaps(w http.ResponseWriter, r *http.Request) {
- var filteredList *[]ceModel.NodeServiceMaps
+ var filteredList *[]dataModel.NodeServiceMaps
- if activeModel == nil || !activeModel.Active {
+ if sbxCtrl.activeModel == nil || !sbxCtrl.activeModel.Active {
http.Error(w, "No scenario is active", http.StatusNotFound)
return
}
@@ -498,14 +409,14 @@ func ceGetActiveNodeServiceMaps(w http.ResponseWriter, r *http.Request) {
direction := query.Get("type")
service := query.Get("service")
- svcMaps := activeModel.GetServiceMaps()
+ svcMaps := sbxCtrl.activeModel.GetServiceMaps()
// Filter only requested service mappings from node service map list
if node == "" && direction == "" && service == "" {
// Any node & service
filteredList = svcMaps
// filteredList = &nodeServiceMapsList
} else {
- filteredList = new([]ceModel.NodeServiceMaps)
+ filteredList = new([]dataModel.NodeServiceMaps)
// Loop through full list and filter out unrequested results
for _, nodeServiceMaps := range *svcMaps {
@@ -522,7 +433,7 @@ func ceGetActiveNodeServiceMaps(w http.ResponseWriter, r *http.Request) {
}
// Loop through Ingress maps
- var svcMap ceModel.NodeServiceMaps
+ var svcMap dataModel.NodeServiceMaps
svcMap.Node = nodeServiceMaps.Node
for _, ingressServiceMap := range nodeServiceMaps.IngressServiceMap {
if direction != "" && direction != "ingress" {
@@ -571,20 +482,38 @@ func ceGetActiveNodeServiceMaps(w http.ResponseWriter, r *http.Request) {
func ceTerminateScenario(w http.ResponseWriter, r *http.Request) {
log.Debug("ceTerminateScenario")
- if activeModel == nil || !activeModel.Active {
+ if sbxCtrl.activeModel == nil || !sbxCtrl.activeModel.Active {
http.Error(w, "No scenario is active", http.StatusNotFound)
return
}
- err := activeModel.Deactivate()
+ err := sbxCtrl.activeModel.Deactivate()
if err != nil {
log.Error("Failed to deactivate: ", err.Error())
http.Error(w, err.Error(), http.StatusNotFound)
return
}
+ // Send Terminate message on local Message Queue
+ msg := sbxCtrl.mqLocal.CreateMsg(mq.MsgScenarioTerminate, mq.TargetAll, sbxCtrl.sandboxName)
+ log.Debug("TX MSG: ", mq.PrintMsg(msg))
+ err = sbxCtrl.mqLocal.SendMsg(msg)
+ if err != nil {
+ log.Error("Failed to send message. Error: ", err.Error())
+ }
+
+ // Send Terminate message to Virt Engine on Global Message Queue
+ msg = sbxCtrl.mqGlobal.CreateMsg(mq.MsgScenarioTerminate, mq.TargetAll, mq.TargetAll)
+ msg.Payload[fieldSandboxName] = sbxCtrl.sandboxName
+ msg.Payload[fieldScenarioName] = ""
+ log.Debug("TX MSG: ", mq.PrintMsg(msg))
+ err = sbxCtrl.mqGlobal.SendMsg(msg)
+ if err != nil {
+ log.Error("Failed to send message. Error: ", err.Error())
+ }
+
// Use new model instance
- activeModel, err = mod.NewModel(mod.DbAddress, moduleName, "activeScenario")
+ sbxCtrl.activeModel, err = mod.NewModel(sbxCtrl.modelCfg)
if err != nil {
log.Error("Failed to create model: ", err.Error())
http.Error(w, err.Error(), http.StatusInternalServerError)
@@ -592,14 +521,14 @@ func ceTerminateScenario(w http.ResponseWriter, r *http.Request) {
}
// Set Metrics Store
- err = metricStore.SetStore("")
+ err = sbxCtrl.metricStore.SetStore("")
if err != nil {
log.Error(err.Error())
}
//force stop replay manager
- if replayMgr.IsStarted() {
- _ = replayMgr.ForceStop()
+ if sbxCtrl.replayMgr.IsStarted() {
+ _ = sbxCtrl.replayMgr.ForceStop()
}
// Send response
@@ -612,7 +541,7 @@ func ceTerminateScenario(w http.ResponseWriter, r *http.Request) {
func ceSendEvent(w http.ResponseWriter, r *http.Request) {
log.Debug("ceSendEvent")
- if activeModel == nil || !activeModel.Active {
+ if sbxCtrl.activeModel == nil || !sbxCtrl.activeModel.Active {
http.Error(w, "No scenario is active", http.StatusNotFound)
return
}
@@ -629,7 +558,7 @@ func ceSendEvent(w http.ResponseWriter, r *http.Request) {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
- var event ceModel.Event
+ var event dataModel.Event
decoder := json.NewDecoder(r.Body)
err := decoder.Decode(&event)
if err != nil {
@@ -648,8 +577,8 @@ func ceSendEvent(w http.ResponseWriter, r *http.Request) {
err, httpStatus, description = sendEventNetworkCharacteristics(event)
case eventTypePoasInRange:
err, httpStatus, description = sendEventPoasInRange(event)
- case eventTypeOther:
- //ignore the event
+ case eventTypeScenarioUpdate:
+ err, httpStatus, description = sendEventScenarioUpdate(event)
default:
err = errors.New("Unsupported event type")
httpStatus = http.StatusBadRequest
@@ -667,7 +596,7 @@ func ceSendEvent(w http.ResponseWriter, r *http.Request) {
var metric ms.EventMetric
metric.Event = string(eventJSONStr)
metric.Description = description
- err = metricStore.SetEventMetric(eventType, metric)
+ err = sbxCtrl.metricStore.SetEventMetric(eventType, metric)
}
if err != nil {
log.Error("Failed to set event metric")
@@ -678,137 +607,30 @@ func ceSendEvent(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
}
-// Retrieve POD states
-// GET /states
-func ceGetStates(w http.ResponseWriter, r *http.Request) {
-
- subKey := ""
- var podsStatus ceModel.PodsStatus
- var podsStatusInReply ceModel.PodsStatus
-
- // Retrieve client ID & service name from query parameters
- query := r.URL.Query()
- longParam := query.Get("long")
- typeParam := query.Get("type")
-
- detailed := false
- if longParam == "true" {
- detailed = true
- }
-
- if typeParam == "" {
- subKey = "MO-scenario:"
- } else {
- subKey = "MO-" + typeParam + ":"
- }
-
- //values for pod name
- keyName := moduleMonEngine + "*" + subKey + "*"
-
- //get will be unique... but reusing the generic function
- var err error
- if detailed {
- // err = RedisDBForEachEntry(keyName, getPodDetails, &podsStatus)
- err = rc.ForEachEntry(keyName, getPodDetails, &podsStatus)
- } else {
- // err = RedisDBForEachEntry(keyName, getPodStatesOnly, &podsStatus)
- err = rc.ForEachEntry(keyName, getPodStatesOnly, &podsStatus)
- }
-
- if err != nil {
- log.Error(err.Error())
- http.Error(w, err.Error(), http.StatusInternalServerError)
- return
- }
-
- if typeParam == "core" {
- // ***** virt-engine is not a pod yet, but we need to make sure it is started to have a functional system
- var podStatus ceModel.PodStatus
- podStatus.Name = "virt-engine"
- if virtWatchdog.IsAlive() {
- podStatus.LogicalState = "Running"
- } else {
- podStatus.LogicalState = "NotRunning"
- }
- podsStatus.PodStatus = append(podsStatus.PodStatus, podStatus)
- // ***** virt-engine running or not code END
-
- corePods := getCorePodsList()
- uniqueCorePodsInReply := make(map[string]ceModel.PodStatus)
-
- //loop through each of them by name
- for _, statusPod := range podsStatus.PodStatus {
- for corePod := range corePods {
- if strings.Contains(statusPod.Name, corePod) {
- corePods[corePod] = true
- //filter for reporting one pod for each core pod type (we send the RUNNING one if any, otherwise we send whatever the failed one we have)
- storedUniqueCorePod := uniqueCorePodsInReply[corePod]
- if storedUniqueCorePod.Name != "" {
- if storedUniqueCorePod.LogicalState != "Running" && storedUniqueCorePod.LogicalState != statusPod.LogicalState {
- uniqueCorePodsInReply[corePod] = statusPod
- }
- } else {
- uniqueCorePodsInReply[corePod] = statusPod
- }
-
- break
- }
- }
- }
-
- for _, uniqueCorePod := range uniqueCorePodsInReply {
- podsStatusInReply.PodStatus = append(podsStatusInReply.PodStatus, uniqueCorePod)
- }
-
- //loop through the list of pods to see which one might be missing
- for corePod := range corePods {
- if !corePods[corePod] {
- var podStatus ceModel.PodStatus
- podStatus.Name = corePod
- podStatus.LogicalState = "NotAvailable"
- podsStatusInReply.PodStatus = append(podsStatusInReply.PodStatus, podStatus)
- }
- }
- }
-
- w.Header().Set("Content-Type", "application/json; charset=UTF-8")
-
- // Format response
- jsonResponse, err := json.Marshal(podsStatus)
- if err != nil {
- log.Error(err.Error())
- http.Error(w, err.Error(), http.StatusInternalServerError)
- return
- }
-
- // Send response
- w.WriteHeader(http.StatusOK)
- fmt.Fprint(w, string(jsonResponse))
-}
-
-// ------------------
-
-func sendEventNetworkCharacteristics(event ceModel.Event) (error, int, string) {
+func sendEventNetworkCharacteristics(event dataModel.Event) (error, int, string) {
if event.EventNetworkCharacteristicsUpdate == nil {
err := errors.New("Malformed request: missing EventNetworkCharacteristicsUpdate")
return err, http.StatusBadRequest, ""
}
- netChar := event.EventNetworkCharacteristicsUpdate
- description := "[" + netChar.ElementName + "] update " +
- "latency=" + strconv.Itoa(int(netChar.Latency)) + "ms " +
- "jitter=" + strconv.Itoa(int(netChar.LatencyVariation)) + "ms " +
- "throughput=" + strconv.Itoa(int(netChar.Throughput)) + "Mbps " +
- "packet-loss=" + strconv.FormatFloat(netChar.PacketLoss, 'f', -1, 64) + "% "
+ netCharEvent := event.EventNetworkCharacteristicsUpdate
- err := activeModel.UpdateNetChar(netChar)
+ description := "[" + netCharEvent.ElementName + "] update " +
+ "latency=" + strconv.Itoa(int(netCharEvent.NetChar.Latency)) + "ms " +
+ "jitter=" + strconv.Itoa(int(netCharEvent.NetChar.LatencyVariation)) + "ms " +
+ "distribution=" + netCharEvent.NetChar.LatencyDistribution + " " +
+ "throughputDl=" + strconv.Itoa(int(netCharEvent.NetChar.ThroughputDl)) + "Mbps " +
+ "throughputUl=" + strconv.Itoa(int(netCharEvent.NetChar.ThroughputUl)) + "Mbps " +
+ "packet-loss=" + strconv.FormatFloat(netCharEvent.NetChar.PacketLoss, 'f', -1, 64) + "% "
+
+ err := sbxCtrl.activeModel.UpdateNetChar(netCharEvent)
if err != nil {
return err, http.StatusInternalServerError, ""
}
return nil, -1, description
}
-func sendEventMobility(event ceModel.Event) (error, int, string) {
+func sendEventMobility(event dataModel.Event) (error, int, string) {
if event.EventMobility == nil {
err := errors.New("Malformed request: missing EventMobility")
return err, http.StatusBadRequest, ""
@@ -818,12 +640,12 @@ func sendEventMobility(event ceModel.Event) (error, int, string) {
destName := event.EventMobility.Dest
description := "[" + elemName + "] move to " + destName
- oldNL, newNL, err := activeModel.MoveNode(elemName, destName)
+ oldNL, newNL, err := sbxCtrl.activeModel.MoveNode(elemName, destName)
if err != nil {
return err, http.StatusInternalServerError, ""
}
log.WithFields(log.Fields{
- "meep.log.component": "ctrl-engine",
+ "meep.log.component": "sandbox-ctrl",
"meep.log.msgType": "mobilityEvent",
"meep.log.oldPoa": oldNL,
"meep.log.newPoa": newNL,
@@ -834,12 +656,12 @@ func sendEventMobility(event ceModel.Event) (error, int, string) {
return nil, -1, description
}
-func sendEventPoasInRange(event ceModel.Event) (error, int, string) {
+func sendEventPoasInRange(event dataModel.Event) (error, int, string) {
if event.EventPoasInRange == nil {
err := errors.New("Malformed request: missing EventPoasInRange")
return err, http.StatusBadRequest, ""
}
- var ue *ceModel.PhysicalLocation
+ var ue *dataModel.PhysicalLocation
// Retrieve UE name
ueName := event.EventPoasInRange.Ue
@@ -852,12 +674,12 @@ func sendEventPoasInRange(event ceModel.Event) (error, int, string) {
// Find UE
log.Debug("Searching for UE in active scenario")
- n := activeModel.GetNode(ueName)
+ n := sbxCtrl.activeModel.GetNode(ueName)
if n == nil {
err := errors.New("Node not found " + ueName)
return err, http.StatusNotFound, ""
}
- ue, ok := n.(*ceModel.PhysicalLocation)
+ ue, ok := n.(*dataModel.PhysicalLocation)
if !ok {
ue = nil
} else if ue.Type_ != "UE" {
@@ -874,7 +696,7 @@ func sendEventPoasInRange(event ceModel.Event) (error, int, string) {
ue.NetworkLocationsInRange = poasInRange
//Publish updated scenario
- err := activeModel.Activate()
+ err := sbxCtrl.activeModel.Activate()
if err != nil {
return err, http.StatusInternalServerError, ""
}
@@ -890,49 +712,55 @@ func sendEventPoasInRange(event ceModel.Event) (error, int, string) {
return nil, -1, description
}
-func getPodDetails(key string, fields map[string]string, userData interface{}) error {
+// sendEventScenarioUpdate - Process a scenario update event
+func sendEventScenarioUpdate(event dataModel.Event) (error, int, string) {
+ var err error
+ var description string
- podsStatus := userData.(*ceModel.PodsStatus)
- var podStatus ceModel.PodStatus
- if fields["meepApp"] != "" {
- podStatus.Name = fields["meepApp"]
- } else {
- podStatus.Name = fields["name"]
- }
-
- podStatus.Namespace = fields["namespace"]
- podStatus.MeepApp = fields["meepApp"]
- podStatus.MeepOrigin = fields["meepOrigin"]
- podStatus.MeepScenario = fields["meepScenario"]
- podStatus.Phase = fields["phase"]
- podStatus.PodInitialized = fields["initialised"]
- podStatus.PodScheduled = fields["scheduled"]
- podStatus.PodReady = fields["ready"]
- podStatus.PodUnschedulable = fields["unschedulable"]
- podStatus.PodConditionError = fields["condition-error"]
- podStatus.NbOkContainers = fields["nbOkContainers"]
- podStatus.NbTotalContainers = fields["nbTotalContainers"]
- podStatus.NbPodRestart = fields["nbPodRestart"]
- podStatus.LogicalState = fields["logicalState"]
- podStatus.StartTime = fields["startTime"]
-
- podsStatus.PodStatus = append(podsStatus.PodStatus, podStatus)
- return nil
-}
+ if event.EventScenarioUpdate == nil {
+ err := errors.New("Malformed request: missing EventScenarioUpdate")
+ return err, http.StatusBadRequest, ""
+ }
+ if event.EventScenarioUpdate.Node == nil {
+ err := errors.New("Malformed request: missing Node")
+ return err, http.StatusBadRequest, ""
+ }
-func getPodStatesOnly(key string, fields map[string]string, userData interface{}) error {
- podsStatus := userData.(*ceModel.PodsStatus)
- var podStatus ceModel.PodStatus
- if fields["meepApp"] != "" {
- podStatus.Name = fields["meepApp"]
- } else {
- podStatus.Name = fields["name"]
+ // Perform necessary action on scenario
+ switch event.EventScenarioUpdate.Action {
+ case mod.ScenarioAdd:
+ err = sbxCtrl.activeModel.AddScenarioNode(event.EventScenarioUpdate.Node)
+ if err == nil {
+
+ description = "Added node [" + getScenarioNodeName(event.EventScenarioUpdate.Node) + "]"
+ }
+
+ case mod.ScenarioRemove:
+ err = sbxCtrl.activeModel.RemoveScenarioNode(event.EventScenarioUpdate.Node)
+ if err == nil {
+ description = "Removed node [" + getScenarioNodeName(event.EventScenarioUpdate.Node) + "]"
+ }
+
+ default:
+ err = errors.New("Unsupported scenario update action: " + event.EventScenarioUpdate.Action)
}
- podStatus.LogicalState = fields["logicalState"]
- podsStatus.PodStatus = append(podsStatus.PodStatus, podStatus)
+ if err != nil {
+ return err, http.StatusInternalServerError, ""
+ }
+ return nil, -1, description
+}
- return nil
+// Retrieve element name from type-specific structure
+func getScenarioNodeName(node *dataModel.ScenarioNode) string {
+ name := ""
+ if node.Type_ == mod.NodeTypeUE {
+ if node.NodeDataUnion != nil && node.NodeDataUnion.PhysicalLocation != nil {
+ pl := node.NodeDataUnion.PhysicalLocation
+ name = pl.Name
+ }
+ }
+ return name
}
// Equal tells whether a and b contain the same elements.
@@ -962,7 +790,7 @@ func ceCreateReplayFile(w http.ResponseWriter, r *http.Request) {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
- var replay ceModel.Replay
+ var replay dataModel.Replay
decoder := json.NewDecoder(r.Body)
err := decoder.Decode(&replay)
if err != nil {
@@ -981,7 +809,7 @@ func ceCreateReplayFile(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
}
-func storeReplay(replay ceModel.Replay, replayFileName string) error {
+func storeReplay(replay dataModel.Replay, replayFileName string) error {
validJsonReplay, err := json.Marshal(replay)
if err != nil {
@@ -991,15 +819,15 @@ func storeReplay(replay ceModel.Replay, replayFileName string) error {
//check if file exists and either update/overwrite or create
rev := ""
- _, err = replayStore.GetDoc(false, replayFileName)
+ _, err = sbxCtrl.replayStore.GetDoc(false, replayFileName)
if err != nil {
- rev, err = replayStore.AddDoc(replayFileName, validJsonReplay)
+ rev, err = sbxCtrl.replayStore.AddDoc(replayFileName, validJsonReplay)
if err != nil {
log.Error(err.Error())
return err
}
} else {
- rev, err = replayStore.UpdateDoc(replayFileName, validJsonReplay)
+ rev, err = sbxCtrl.replayStore.UpdateDoc(replayFileName, validJsonReplay)
if err != nil {
log.Error(err.Error())
return err
@@ -1010,12 +838,12 @@ func storeReplay(replay ceModel.Replay, replayFileName string) error {
return nil
}
-func loadReplay(replayFileName string) (ceModel.Replay, error) {
+func loadReplay(replayFileName string) (dataModel.Replay, error) {
var replay []byte
- var events ceModel.Replay
+ var events dataModel.Replay
- replay, err := replayStore.GetDoc(false, replayFileName)
+ replay, err := sbxCtrl.replayStore.GetDoc(false, replayFileName)
if err != nil {
log.Error(err.Error())
return events, err
@@ -1042,7 +870,7 @@ func ceCreateReplayFileFromScenarioExec(w http.ResponseWriter, r *http.Request)
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
- var replayInfo ceModel.ReplayInfo
+ var replayInfo dataModel.ReplayInfo
decoder := json.NewDecoder(r.Body)
err := decoder.Decode(&replayInfo)
if err != nil {
@@ -1052,7 +880,7 @@ func ceCreateReplayFileFromScenarioExec(w http.ResponseWriter, r *http.Request)
}
var tmpMetricStore *ms.MetricStore
- tmpMetricStore, err = ms.NewMetricStore(replayInfo.ScenarioName, influxDBAddr, redisDBAddr)
+ tmpMetricStore, err = ms.NewMetricStore(replayInfo.ScenarioName, sbxCtrl.sandboxName, influxDBAddr, redisDBAddr)
if err != nil {
log.Error("Failed creating tmp metricStore: ", err)
return
@@ -1065,7 +893,7 @@ func ceCreateReplayFileFromScenarioExec(w http.ResponseWriter, r *http.Request)
return
}
- var replay ceModel.Replay
+ var replay dataModel.Replay
replay.Description = replayInfo.Description
var time0 time.Time
@@ -1075,7 +903,7 @@ func ceCreateReplayFileFromScenarioExec(w http.ResponseWriter, r *http.Request)
//browsing through the list in reverse (end first (oldest element))
metricStoreEntry := eml[i]
- var replayEvent ceModel.ReplayEvent
+ var replayEvent dataModel.ReplayEvent
eventTime, _ := time.Parse(log.LoggerTimeStampFormat, metricStoreEntry.Time.(string))
var currentRelativeTime int32
if nbEvents == 0 {
@@ -1087,7 +915,7 @@ func ceCreateReplayFileFromScenarioExec(w http.ResponseWriter, r *http.Request)
}
nbEvents++
- var event ceModel.Event
+ var event dataModel.Event
err = json.Unmarshal([]byte(metricStoreEntry.Event), &event)
if err != nil {
@@ -1119,7 +947,7 @@ func ceDeleteReplayFile(w http.ResponseWriter, r *http.Request) {
log.Debug("Replay name: ", replayFileName)
// Remove replay file from DB
- err := replayStore.DeleteDoc(replayFileName)
+ err := sbxCtrl.replayStore.DeleteDoc(replayFileName)
if err != nil {
log.Error(err.Error())
http.Error(w, err.Error(), http.StatusNotFound)
@@ -1136,7 +964,7 @@ func ceDeleteReplayFileList(w http.ResponseWriter, r *http.Request) {
log.Debug("ceDeleteReplayFileList")
// Remove all scenario from DB
- err := replayStore.DeleteAllDocs()
+ err := sbxCtrl.replayStore.DeleteAllDocs()
if err != nil {
log.Error(err.Error())
http.Error(w, err.Error(), http.StatusNotFound)
@@ -1157,7 +985,7 @@ func ceGetReplayFile(w http.ResponseWriter, r *http.Request) {
// Retrieve replay from DB
var b []byte
- b, err := replayStore.GetDoc(false, replayFileName)
+ b, err := sbxCtrl.replayStore.GetDoc(false, replayFileName)
if err != nil {
log.Error(err.Error())
http.Error(w, err.Error(), http.StatusNotFound)
@@ -1180,7 +1008,7 @@ func ceGetReplayFile(w http.ResponseWriter, r *http.Request) {
func ceGetReplayFileList(w http.ResponseWriter, r *http.Request) {
// Retrieve replay file names list from DB
//var replayFileNameList []string
- replayFileNameList, _, err := replayStore.GetDocList()
+ replayFileNameList, _, err := sbxCtrl.replayStore.GetDocList()
if err != nil {
log.Error(err.Error())
http.Error(w, err.Error(), http.StatusNotFound)
@@ -1201,7 +1029,7 @@ func ceGetReplayFileList(w http.ResponseWriter, r *http.Request) {
func ceGetReplayStatus(w http.ResponseWriter, r *http.Request) {
// Get Replay Manager status
- status, err := replayMgr.GetStatus()
+ status, err := sbxCtrl.replayMgr.GetStatus()
if err != nil {
http.Error(w, err.Error(), http.StatusNotFound)
return
@@ -1232,7 +1060,7 @@ func ceLoopReplay(w http.ResponseWriter, r *http.Request) {
return
}
- err = replayMgr.Start(replayFileName, events, true, true)
+ err = sbxCtrl.replayMgr.Start(replayFileName, events, true, true)
if err == nil {
w.WriteHeader(http.StatusOK)
} else {
@@ -1253,7 +1081,7 @@ func cePlayReplayFile(w http.ResponseWriter, r *http.Request) {
return
}
- err = replayMgr.Start(replayFileName, events, false, true)
+ err = sbxCtrl.replayMgr.Start(replayFileName, events, false, true)
if err == nil {
w.WriteHeader(http.StatusOK)
@@ -1268,7 +1096,7 @@ func ceStopReplayFile(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
replayFileName := vars["name"]
- success := replayMgr.Stop(replayFileName)
+ success := sbxCtrl.replayMgr.Stop(replayFileName)
if success {
w.WriteHeader(http.StatusOK)
@@ -1277,3 +1105,14 @@ func ceStopReplayFile(w http.ResponseWriter, r *http.Request) {
}
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
}
+
+func activeScenarioUpdateCb() {
+
+ // Send Update message on local Message Queue
+ msg := sbxCtrl.mqLocal.CreateMsg(mq.MsgScenarioUpdate, mq.TargetAll, sbxCtrl.sandboxName)
+ log.Debug("TX MSG: ", mq.PrintMsg(msg))
+ err := sbxCtrl.mqLocal.SendMsg(msg)
+ if err != nil {
+ log.Error("Failed to send message. Error: ", err.Error())
+ }
+}
diff --git a/go-apps/meep-sandbox-ctrl/server/sandbox-ctrl_test.go b/go-apps/meep-sandbox-ctrl/server/sandbox-ctrl_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..84a98cfaae9e8ce8e12842a360c8ce044da056a1
--- /dev/null
+++ b/go-apps/meep-sandbox-ctrl/server/sandbox-ctrl_test.go
@@ -0,0 +1,333 @@
+/*
+ * Copyright (c) 2019 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package server
+
+import (
+ "bytes"
+ "encoding/json"
+ "errors"
+ "fmt"
+ "io"
+ "net/http"
+ "net/http/httptest"
+ "testing"
+ "time"
+
+ dataModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model"
+ log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
+ mod "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model"
+ "github.com/gorilla/mux"
+)
+
+const scenario1Name string = "test-sandbox-ctrl-1"
+
+// const testScenario1 string = `
+// {"name":"test-sandbox-ctrl-1","deployment":{"interDomainLatency":50,"interDomainLatencyVariation":5,"interDomainThroughput":1000,"domains":[{"id":"PUBLIC","name":"PUBLIC","type":"PUBLIC","interZoneLatency":6,"interZoneLatencyVariation":2,"interZoneThroughput":1000000,"zones":[{"id":"PUBLIC-COMMON","name":"PUBLIC-COMMON","type":"COMMON","interFogLatency":2,"interFogLatencyVariation":1,"interFogThroughput":1000000,"interEdgeLatency":3,"interEdgeLatencyVariation":1,"interEdgeThroughput":1000000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000000,"networkLocations":[{"id":"PUBLIC-COMMON-DEFAULT","name":"PUBLIC-COMMON-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"cloud1","name":"cloud1","type":"DC","processes":[{"id":"cloud1-iperf","name":"cloud1-iperf","type":"CLOUD-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT","commandExe":"/bin/bash","serviceConfig":{"name":"cloud1-iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"cloud1-svc","name":"cloud1-svc","type":"CLOUD-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=cloud1-svc, MGM_APP_ID=cloud1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"cloud1-svc","ports":[{"protocol":"TCP","port":80}]}}]}]}]}]},{"id":"operator1","name":"operator1","type":"OPERATOR","interZoneLatency":15,"interZoneLatencyVariation":3,"interZoneThroughput":1000,"zones":[{"id":"operator1-COMMON","name":"operator1-COMMON","type":"COMMON","interFogLatency":2,"interFogLatencyVariation":1,"interFogThroughput":1000000,"interEdgeLatency":3,"interEdgeLatencyVariation":1,"interEdgeThroughput":1000000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000000,"networkLocations":[{"id":"operator1-COMMON-DEFAULT","name":"operator1-COMMON-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1}]},{"id":"zone1","name":"zone1","type":"ZONE","interFogLatency":10,"interFogLatencyVariation":2,"interFogThroughput":1000,"interEdgeLatency":12,"interEdgeLatencyVariation":2,"interEdgeThroughput":1000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000,"networkLocations":[{"id":"zone1-DEFAULT","name":"zone1-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"zone1-edge1","name":"zone1-edge1","type":"EDGE","processes":[{"id":"zone1-edge1-iperf","name":"zone1-edge1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT","commandExe":"/bin/bash","serviceConfig":{"name":"zone1-edge1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone1-edge1-svc","name":"zone1-edge1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-edge1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone1-edge1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]}]},{"id":"zone1-poa1","name":"zone1-poa1","type":"POA","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":1000,"physicalLocations":[{"id":"zone1-fog1","name":"zone1-fog1","type":"FOG","processes":[{"id":"zone1-fog1-iperf","name":"zone1-fog1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT;","commandExe":"/bin/bash","serviceConfig":{"name":"zone1-fog1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone1-fog1-svc","name":"zone1-fog1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-fog1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone1-fog1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]},{"id":"ue1","name":"ue1","type":"UE","processes":[{"id":"ue1-iperf","name":"ue1-iperf","type":"UE-APP","image":"gophernet/iperf-client","commandArguments":"-c, export; iperf -u -c $IPERF_SERVICE_HOST -p $IPERF_SERVICE_PORT -t 3600 -b 50M;","commandExe":"/bin/bash"}]},{"id":"ue2-ext","name":"ue2-ext","type":"UE","isExternal":true,"processes":[{"id":"ue2-svc","name":"ue2-svc","type":"UE-APP","isExternal":true,"externalConfig":{"ingressServiceMap":[{"name":"svc","port":80,"externalPort":31111,"protocol":"TCP"},{"name":"iperf","port":80,"externalPort":31222,"protocol":"UDP"},{"name":"cloud1-svc","port":80,"externalPort":31112,"protocol":"TCP"},{"name":"cloud1-iperf","port":80,"externalPort":31223,"protocol":"UDP"}]}}]}]},{"id":"zone1-poa2","name":"zone1-poa2","type":"POA","terminalLinkLatency":10,"terminalLinkLatencyVariation":2,"terminalLinkThroughput":50}]},{"id":"zone2","name":"zone2","type":"ZONE","interFogLatency":10,"interFogLatencyVariation":2,"interFogThroughput":1000,"interEdgeLatency":12,"interEdgeLatencyVariation":2,"interEdgeThroughput":1000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000,"networkLocations":[{"id":"zone2-DEFAULT","name":"zone2-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"zone2-edge1","name":"zone2-edge1","type":"EDGE","processes":[{"id":"zone2-edge1-iperf","name":"zone2-edge1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT;","commandExe":"/bin/bash","serviceConfig":{"name":"zone2-edge1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone2-edge1-svc","name":"zone2-edge1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone2-edge1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone2-edge1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]}]},{"id":"zone2-poa1","name":"zone2-poa1","type":"POA","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":20}]}]}]}}
+// `
+
+const scenario2Name string = "test-sandbox-ctrl-2"
+
+// const testScenario2 string = `
+// {"name":"test-sandbox-ctrl-2","deployment":{"interDomainLatency":50,"interDomainLatencyVariation":5,"interDomainThroughput":1000,"domains":[{"id":"PUBLIC","name":"PUBLIC","type":"PUBLIC","interZoneLatency":6,"interZoneLatencyVariation":2,"interZoneThroughput":1000000,"zones":[{"id":"PUBLIC-COMMON","name":"PUBLIC-COMMON","type":"COMMON","interFogLatency":2,"interFogLatencyVariation":1,"interFogThroughput":1000000,"interEdgeLatency":3,"interEdgeLatencyVariation":1,"interEdgeThroughput":1000000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000000,"networkLocations":[{"id":"PUBLIC-COMMON-DEFAULT","name":"PUBLIC-COMMON-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"cloud1","name":"cloud1","type":"DC","processes":[{"id":"cloud1-iperf","name":"cloud1-iperf","type":"CLOUD-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT","commandExe":"/bin/bash","serviceConfig":{"name":"cloud1-iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"cloud1-svc","name":"cloud1-svc","type":"CLOUD-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=cloud1-svc, MGM_APP_ID=cloud1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"cloud1-svc","ports":[{"protocol":"TCP","port":80}]}}]}]}]}]},{"id":"operator1","name":"operator1","type":"OPERATOR","interZoneLatency":15,"interZoneLatencyVariation":3,"interZoneThroughput":1000,"zones":[{"id":"operator1-COMMON","name":"operator1-COMMON","type":"COMMON","interFogLatency":2,"interFogLatencyVariation":1,"interFogThroughput":1000000,"interEdgeLatency":3,"interEdgeLatencyVariation":1,"interEdgeThroughput":1000000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000000,"networkLocations":[{"id":"operator1-COMMON-DEFAULT","name":"operator1-COMMON-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1}]},{"id":"zone1","name":"zone1","type":"ZONE","interFogLatency":10,"interFogLatencyVariation":2,"interFogThroughput":1000,"interEdgeLatency":12,"interEdgeLatencyVariation":2,"interEdgeThroughput":1000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000,"networkLocations":[{"id":"zone1-DEFAULT","name":"zone1-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"zone1-edge1","name":"zone1-edge1","type":"EDGE","processes":[{"id":"zone1-edge1-iperf","name":"zone1-edge1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT","commandExe":"/bin/bash","serviceConfig":{"name":"zone1-edge1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone1-edge1-svc","name":"zone1-edge1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-edge1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone1-edge1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]}]},{"id":"zone1-poa1","name":"zone1-poa1","type":"POA","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":1000,"physicalLocations":[{"id":"zone1-fog1","name":"zone1-fog1","type":"FOG","processes":[{"id":"zone1-fog1-iperf","name":"zone1-fog1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT;","commandExe":"/bin/bash","serviceConfig":{"name":"zone1-fog1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone1-fog1-svc","name":"zone1-fog1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-fog1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone1-fog1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]},{"id":"ue1","name":"ue1","type":"UE","processes":[{"id":"ue1-iperf","name":"ue1-iperf","type":"UE-APP","image":"gophernet/iperf-client","commandArguments":"-c, export; iperf -u -c $IPERF_SERVICE_HOST -p $IPERF_SERVICE_PORT -t 3600 -b 50M;","commandExe":"/bin/bash"}]},{"id":"ue2-ext","name":"ue2-ext","type":"UE","isExternal":true,"processes":[{"id":"ue2-svc","name":"ue2-svc","type":"UE-APP","isExternal":true,"externalConfig":{"ingressServiceMap":[{"name":"svc","port":80,"externalPort":31111,"protocol":"TCP"},{"name":"iperf","port":80,"externalPort":31222,"protocol":"UDP"},{"name":"cloud1-svc","port":80,"externalPort":31112,"protocol":"TCP"},{"name":"cloud1-iperf","port":80,"externalPort":31223,"protocol":"UDP"}]}}]}]},{"id":"zone1-poa2","name":"zone1-poa2","type":"POA","terminalLinkLatency":10,"terminalLinkLatencyVariation":2,"terminalLinkThroughput":50}]},{"id":"zone2","name":"zone2","type":"ZONE","interFogLatency":10,"interFogLatencyVariation":2,"interFogThroughput":1000,"interEdgeLatency":12,"interEdgeLatencyVariation":2,"interEdgeThroughput":1000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000,"networkLocations":[{"id":"zone2-DEFAULT","name":"zone2-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"zone2-edge1","name":"zone2-edge1","type":"EDGE","processes":[{"id":"zone2-edge1-iperf","name":"zone2-edge1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT;","commandExe":"/bin/bash","serviceConfig":{"name":"zone2-edge1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone2-edge1-svc","name":"zone2-edge1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone2-edge1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone2-edge1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]}]},{"id":"zone2-poa1","name":"zone2-poa1","type":"POA","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":20}]}]}]}}
+// `
+
+func TestSandboxCtrl(t *testing.T) {
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ fmt.Println("TestSandboxCtrl()")
+ couchDBAddr = "http://localhost:30985/"
+ influxDBAddr = "http://localhost:30986"
+ redisDBAddr = "localhost:30380"
+ mod.DbAddress = redisDBAddr
+ err := Init()
+ if err != nil {
+ t.Errorf("Error initializing sandbox-ctrl")
+ }
+
+ fmt.Println("Test ActivateScenario")
+ testActivateScenario(t)
+
+ fmt.Println("Test SendEvent")
+ testSendEvent(t)
+
+ fmt.Println("Test GetActive")
+ testGetActive(t)
+
+ fmt.Println("Test TerminateScenario")
+ testTerminateScenario(t)
+}
+
+func testActivateScenario(t *testing.T) {
+ vars := make(map[string]string)
+
+ // bad request
+ vars["name"] = "this-should-fail"
+ err := sendRequest(http.MethodPost, "/active", nil, vars, nil, http.StatusNotFound, ceActivateScenario)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ // activate scenario 1
+ vars["name"] = scenario1Name
+ err = sendRequest(http.MethodPost, "/active", nil, vars, nil, http.StatusOK, ceActivateScenario)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ // reactivation should fail
+ err = sendRequest(http.MethodPost, "/active", nil, vars, nil, http.StatusBadRequest, ceActivateScenario)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ // activate scenario 2 should fail
+ vars["name"] = scenario2Name
+ err = sendRequest(http.MethodPost, "/active", nil, vars, nil, http.StatusBadRequest, ceActivateScenario)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+}
+
+func testGetActive(t *testing.T) {
+ // get active scenario
+ err := sendRequest(http.MethodGet, "/active", nil, nil, nil, http.StatusOK, ceGetActiveScenario)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+}
+
+func testTerminateScenario(t *testing.T) {
+ // terminate scenario
+ err := sendRequest(http.MethodDelete, "/active", nil, nil, nil, http.StatusOK, ceTerminateScenario)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ // re-terminate should fail
+ err = sendRequest(http.MethodDelete, "/active", nil, nil, nil, http.StatusNotFound, ceTerminateScenario)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+}
+
+func testSendEvent(t *testing.T) {
+ vars := make(map[string]string)
+ vars["type"] = "MOBILITY"
+
+ // bad request - no body
+ err := sendRequest(http.MethodPost, "/events", nil, vars, nil, http.StatusBadRequest, ceSendEvent)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+
+ // bad request - incomplete
+ var ev dataModel.Event
+ ev.Name = "testEvent"
+ ev.Type_ = "MOBILITY"
+ j, err := json.Marshal(ev)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ fmt.Println(string(j))
+ err = sendRequest(http.MethodPost, "/events", bytes.NewBuffer(j), vars, nil, http.StatusBadRequest, ceSendEvent)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+
+ // bad request - not supported
+ vars["type"] = "NOT-A-VALID-TYPE"
+ j, err = json.Marshal(ev)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ fmt.Println(string(j))
+ err = sendRequest(http.MethodPost, "/events", bytes.NewBuffer(j), vars, nil, http.StatusBadRequest, ceSendEvent)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+
+ // invalid mobility destination
+ vars["type"] = "MOBILITY"
+ var me dataModel.EventMobility
+ me.ElementName = "ue1"
+ me.Dest = "invalid-dest"
+ ev.EventMobility = &me
+ j, err = json.Marshal(ev)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ fmt.Println(string(j))
+ err = sendRequest(http.MethodPost, "/events", bytes.NewBuffer(j), vars, nil, http.StatusInternalServerError, ceSendEvent)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+
+ // valid
+ me.Dest = "zone1-poa2"
+ j, err = json.Marshal(ev)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ fmt.Println(string(j))
+ err = sendRequest(http.MethodPost, "/events", bytes.NewBuffer(j), vars, nil, http.StatusOK, ceSendEvent)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+
+ // bad request - incomplete
+ vars["type"] = "NETWORK-CHARACTERISTICS-UPDATE"
+ ev.Type_ = "NETWORK-CHARACTERISTICS-UPDATE"
+ ev.EventMobility = nil
+ j, err = json.Marshal(ev)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ fmt.Println(string(j))
+ err = sendRequest(http.MethodPost, "/events", bytes.NewBuffer(j), vars, nil, http.StatusBadRequest, ceSendEvent)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+
+ // bad request - invalid element name
+ var nc dataModel.EventNetworkCharacteristicsUpdate
+ nc.ElementName = "not-an-element"
+ ev.EventNetworkCharacteristicsUpdate = &nc
+ j, err = json.Marshal(ev)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ fmt.Println(string(j))
+ err = sendRequest(http.MethodPost, "/events", bytes.NewBuffer(j), vars, nil, http.StatusInternalServerError, ceSendEvent)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+
+ // valid request
+ nc.ElementName = "zone1-poa1"
+ nc.NetChar.Latency = 2
+ j, err = json.Marshal(ev)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ fmt.Println(string(j))
+ err = sendRequest(http.MethodPost, "/events", bytes.NewBuffer(j), vars, nil, http.StatusInternalServerError, ceSendEvent)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+
+ // bad request - incomplete
+ vars["type"] = "POAS-IN-RANGE"
+ ev.Type_ = "POAS-IN-RANGE"
+ ev.EventNetworkCharacteristicsUpdate = nil
+ j, err = json.Marshal(ev)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ fmt.Println(string(j))
+ err = sendRequest(http.MethodPost, "/events", bytes.NewBuffer(j), vars, nil, http.StatusBadRequest, ceSendEvent)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+
+ // valid request
+ var pir dataModel.EventPoasInRange
+ pir.Ue = "ue1"
+ pir.PoasInRange = append(pir.PoasInRange, "zone1-poa1")
+ ev.EventPoasInRange = &pir
+ j, err = json.Marshal(ev)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ fmt.Println(string(j))
+ err = sendRequest(http.MethodPost, "/events", bytes.NewBuffer(j), vars, nil, http.StatusOK, ceSendEvent)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+
+ // invalid UE
+ pir.Ue = "not-a-valid-ue"
+ pir.PoasInRange = append(pir.PoasInRange, "zone1-poa1")
+ ev.EventPoasInRange = &pir
+ j, err = json.Marshal(ev)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ fmt.Println(string(j))
+ err = sendRequest(http.MethodPost, "/events", bytes.NewBuffer(j), vars, nil, http.StatusNotFound, ceSendEvent)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+
+ // not a physical location
+ pir.Ue = "zone1-poa1"
+ pir.PoasInRange = append(pir.PoasInRange, "zone1-poa1")
+ ev.EventPoasInRange = &pir
+ j, err = json.Marshal(ev)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ fmt.Println(string(j))
+ err = sendRequest(http.MethodPost, "/events", bytes.NewBuffer(j), vars, nil, http.StatusNotFound, ceSendEvent)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+
+ // physical location not a UE
+ pir.Ue = "zone1-fog1"
+ pir.PoasInRange = append(pir.PoasInRange, "zone1-poa1")
+ ev.EventPoasInRange = &pir
+ j, err = json.Marshal(ev)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+ fmt.Println(string(j))
+ err = sendRequest(http.MethodPost, "/events", bytes.NewBuffer(j), vars, nil, http.StatusNotFound, ceSendEvent)
+ if err != nil {
+ t.Errorf(err.Error())
+ }
+}
+
+func sendRequest(method string, url string, body io.Reader, vars map[string]string, query map[string]string, code int, f http.HandlerFunc) error {
+ req, err := http.NewRequest(method, url, body)
+ if err != nil || req == nil {
+ return err
+ }
+ if vars != nil {
+ req = mux.SetURLVars(req, vars)
+ }
+ if query != nil {
+ q := req.URL.Query()
+ for k, v := range query {
+ q.Add(k, v)
+ }
+ req.URL.RawQuery = q.Encode()
+ }
+
+ // We create a ResponseRecorder (which satisfies http.ResponseWriter) to record the response.
+ rr := httptest.NewRecorder()
+ handler := http.HandlerFunc(f)
+
+ // Our handlers satisfy http.Handler, so we can call their ServeHTTP method
+ // directly and pass in our Request and ResponseRecorder.
+ handler.ServeHTTP(rr, req)
+
+ time.Sleep(50 * time.Millisecond)
+
+ // Check the status code is what we expect.
+ if status := rr.Code; status != code {
+ s := fmt.Sprintf("Wrong status code - got %v want %v", status, code)
+ return errors.New(s)
+ }
+ return nil
+}
diff --git a/go-apps/meep-tc-engine/go.mod b/go-apps/meep-tc-engine/go.mod
index 6dd36401a36f549508f8564b2b33d0879d26f978..efe01ce998cee9d7c225281c7e4ec404333e13d6 100644
--- a/go-apps/meep-tc-engine/go.mod
+++ b/go-apps/meep-tc-engine/go.mod
@@ -3,10 +3,12 @@ module github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-tc-engine
go 1.12
require (
- github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mg-manager-model v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-net-char-mgr v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis v0.0.0
github.com/gogo/protobuf v1.2.1 // indirect
@@ -32,10 +34,12 @@ require (
)
replace (
- github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model => ../../go-packages/meep-ctrl-engine-model
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr => ../../go-packages/meep-data-key-mgr
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model => ../../go-packages/meep-data-model
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger => ../../go-packages/meep-logger
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mg-manager-model => ../../go-packages/meep-mg-manager-model
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model => ../../go-packages/meep-model
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq => ../../go-packages/meep-mq
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-net-char-mgr => ../../go-packages/meep-net-char-mgr
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis => ../../go-packages/meep-redis
)
diff --git a/go-apps/meep-tc-engine/go.sum b/go-apps/meep-tc-engine/go.sum
index 38df7298738d184aa4ba103e44614870bee2e798..96ad50c5db2886ae2d2f62596e666a7792a85817 100644
--- a/go-apps/meep-tc-engine/go.sum
+++ b/go-apps/meep-tc-engine/go.sum
@@ -1,19 +1,14 @@
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db h1:Zkf5kwhxdW0xV7WM/crqIcOP5LCFGnAmumWSFAewJ74=
github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db/go.mod h1:RU+6d0CNIRSp6yo1mXLIIrnFa/3LHhvcDVLVJyovptM=
github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351 h1:1u1XrfCBnY+GijnyU6O1k4odp5TnqZQTsp5v7+n/E4Y=
github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351/go.mod h1:HxwfbuElTuGf+/uKZfjJrCnv0BmmpkPJDI7gBwj1KkM=
github.com/RyanCarrier/dijkstra v0.0.0-20190726134004-b51cadb5ae52 h1:trnwuu/Q8T59kgRjXcSDBODnyZP9wes+bnLn0lx4PgM=
github.com/RyanCarrier/dijkstra v0.0.0-20190726134004-b51cadb5ae52/go.mod h1:DdR6ymcLl8+sN/XOVNjnYO1NDYfgHskGjreZUDuQCTY=
-github.com/RyanCarrier/dijkstra-1 v0.0.0-20170512020943-0e5801a26345 h1:fgSpoKViTSqRb4hjDNj10ig5wUvO0CayCzFdLf6fuRM=
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/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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/go-redis/redis v6.15.2+incompatible h1:9SpNVG76gr6InJGxoZ6IuuxaCOQwDAhzyXg+Bs+0Sb4=
github.com/go-redis/redis v6.15.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
@@ -29,7 +24,6 @@ github.com/googleapis/gnostic v0.2.0 h1:l6N3VoaVzTncYYW+9yOz2LJJammFZGBO13sqgEhp
github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc h1:f8eY6cV/x1x+HLjOp4r72s/31/V2aTUtg5oKRRPf8/Q=
github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
@@ -37,27 +31,21 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
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=
github.com/mattomatic/dijkstra v0.0.0-20130617153013-6f6d134eb237/go.mod h1:UOnLAUmVG5paym8pD3C4B9BQylUDC2vXFJJpT7JrlEA=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo=
github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME=
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
-github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a h1:Igim7XhdOpBnWPuYJ70XcNpq8q3BCACtVgNfoJxOV7g=
golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
@@ -68,7 +56,6 @@ golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73r
golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a h1:tImsplftrFpALCYumobsd0K86vlAs/eXGFms2txfJfA=
golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -81,13 +68,10 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
diff --git a/go-apps/meep-tc-engine/tc-engine.go b/go-apps/meep-tc-engine/tc-engine.go
index 2455b854a5266744ab0172bf18eec97b560ed674..b118174e7bc4d23fd291ab8866ed4c0c61abfeb0 100644
--- a/go-apps/meep-tc-engine/tc-engine.go
+++ b/go-apps/meep-tc-engine/tc-engine.go
@@ -20,15 +20,18 @@ import (
"encoding/json"
"errors"
"fmt"
+ "os"
"strconv"
"strings"
"sync"
"time"
- ceModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model"
+ dkm "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr"
+ dataModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model"
log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
mgModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mg-manager-model"
mod "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model"
+ mq "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq"
ncm "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-net-char-mgr"
redis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis"
@@ -37,8 +40,11 @@ import (
"k8s.io/client-go/rest"
)
-const moduleTcEngine string = "tc-engine"
-const moduleMgManager string = "mg-manager"
+const moduleName string = "meep-tc-engine"
+const moduleTcSidecar string = "meep-tc-sidecar"
+
+const tcEngineKey string = "tc-engine:"
+const mgManagerKey string = "mg-manager:"
const typeNet string = "net"
const typeLb string = "lb"
@@ -55,11 +61,9 @@ const fieldLbSvcName string = "lb-svc-name"
const fieldLbSvcIp string = "lb-svc-ip"
const fieldLbSvcPort string = "lb-svc-port"
-const channelMgManagerLb string = moduleMgManager + "-" + typeLb
-const channelTcNet string = moduleTcEngine + "-" + typeNet
-const channelTcLb string = moduleTcEngine + "-" + typeLb
-
const COMMON_CORRELATION = 50
+const DEFAULT_DISTRIBUTION = "normal"
+
const THROUGHPUT_UNIT = 1000000 //convert from Mbps to bps
const (
@@ -70,7 +74,7 @@ const (
const DEFAULT_NET_CHAR_DB = 0
const DEFAULT_LB_RULES_DB = 0
-const redisAddr string = "meep-redis-master:6379"
+const redisAddr string = "meep-redis-master.default.svc.cluster.local:6379"
// NetElem -
// NextUniqueNumber is reserving 2 spaces for each unique number to apply
@@ -96,6 +100,7 @@ type FilterInfo struct {
Latency int
LatencyVariation int
LatencyCorrelation int
+ Distribution string
PacketLoss int
DataRate int
}
@@ -147,20 +152,25 @@ type PodInfo struct {
// NetCharStore -
type NetCharStore struct {
- rc *redis.Connector
+ baseKey string
+ rc *redis.Connector
}
// LbRulesStore -
type LbRulesStore struct {
- rc *redis.Connector
+ baseKey string
+ rc *redis.Connector
}
// TcEngine -
type TcEngine struct {
+ sandboxName string
+ mqLocal *mq.MsgQueue
activeModel *mod.Model
netCharStore *NetCharStore
lbRulesStore *LbRulesStore
netCharMgr ncm.NetCharMgr
+ handlerId int
// Flag & Counters used to indicate when TC Engine is ready to
tcEngineState int
@@ -204,8 +214,32 @@ func Init() (err error) {
tce.svcCount = 0
tce.nextTransactionId = 1
+ // Retrieve Sandbox name from environment variable
+ tce.sandboxName = strings.TrimSpace(os.Getenv("MEEP_SANDBOX_NAME"))
+ if tce.sandboxName == "" {
+ err = errors.New("MEEP_SANDBOX_NAME env variable not set")
+ log.Error(err.Error())
+ return err
+ }
+ log.Info("MEEP_SANDBOX_NAME: ", tce.sandboxName)
+
+ // Create message queue
+ tce.mqLocal, err = mq.NewMsgQueue(mq.GetLocalName(tce.sandboxName), moduleName, tce.sandboxName, redisAddr)
+ if err != nil {
+ log.Error("Failed to create Message Queue with error: ", err)
+ return err
+ }
+ log.Info("Message Queue created")
+
// Create new Model
- tce.activeModel, err = mod.NewModel(redisAddr, moduleTcEngine, "activeScenario")
+ modelCfg := mod.ModelCfg{
+ Name: "activeScenario",
+ Namespace: tce.sandboxName,
+ Module: moduleName,
+ UpdateCb: nil,
+ DbAddr: mod.DbAddress,
+ }
+ tce.activeModel, err = mod.NewModel(modelCfg)
if err != nil {
log.Error("Failed to create model: ", err.Error())
return err
@@ -213,6 +247,7 @@ func Init() (err error) {
// Open Network Characteristics Store
tce.netCharStore = new(NetCharStore)
+ tce.netCharStore.baseKey = dkm.GetKeyRoot(tce.sandboxName) + tcEngineKey
tce.netCharStore.rc, err = redis.NewConnector(redisAddr, DEFAULT_NET_CHAR_DB)
if err != nil {
log.Error("Failed connection to Net Char Store Redis DB. Error: ", err)
@@ -221,10 +256,11 @@ func Init() (err error) {
log.Info("Connected to Net Char Store redis DB")
// Flush any remaining TC Engine rules
- tce.netCharStore.rc.DBFlush(moduleTcEngine)
+ tce.netCharStore.rc.DBFlush(tce.netCharStore.baseKey)
// Open Load Balancing Rules Store
tce.lbRulesStore = new(LbRulesStore)
+ tce.lbRulesStore.baseKey = dkm.GetKeyRoot(tce.sandboxName) + mgManagerKey
tce.lbRulesStore.rc, err = redis.NewConnector(redisAddr, DEFAULT_LB_RULES_DB)
if err != nil {
log.Error("Failed connection to LB Rules Store Redis DB. Error: ", err)
@@ -233,7 +269,7 @@ func Init() (err error) {
log.Info("Connected to LB Rules Store redis DB")
// Create new Network Characteristics Manager instance
- tce.netCharMgr, err = ncm.NewNetChar("default", redisAddr)
+ tce.netCharMgr, err = ncm.NewNetChar(moduleName, tce.sandboxName, redisAddr)
if err != nil {
log.Error("Failed to create a netChar object. Error: ", err)
return err
@@ -248,45 +284,46 @@ func Init() (err error) {
}
// Run - MEEP TC Engine execution
-func Run() error {
+func Run() (err error) {
- // Listen for Active Scenario updates
- err := tce.activeModel.Listen(eventHandler)
+ // Register Message Queue handler
+ handler := mq.MsgHandler{Handler: msgHandler, UserData: nil}
+ tce.handlerId, err = tce.mqLocal.RegisterHandler(handler)
if err != nil {
- log.Error("Failed to listen for model updates: ", err.Error())
+ log.Error("Failed to listen for sandbox updates: ", err.Error())
return err
}
- // Listen for LB Rules updates
- go func() {
- err := tce.lbRulesStore.rc.Subscribe(channelMgManagerLb)
- if err != nil {
- log.Error("Failed to subscribe to Pub/Sub events. Error: ", err)
- return
- }
- _ = tce.lbRulesStore.rc.Listen(eventHandler)
- }()
-
return nil
}
-func eventHandler(channel string, payload string) {
+// Message Queue handler
+func msgHandler(msg *mq.Msg, userData interface{}) {
mutex.Lock()
- // Handle Message according to Rx Channel
- switch channel {
- case mod.ActiveScenarioEvents:
- log.Debug("Event received on channel: ", mod.ActiveScenarioEvents, " payload: ", payload)
+ defer mutex.Unlock()
+
+ switch msg.Message {
+ case mq.MsgScenarioActivate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ processActiveScenarioUpdate()
+ case mq.MsgScenarioUpdate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
processActiveScenarioUpdate()
- case channelMgManagerLb:
- log.Debug("Event received on channel: ", channelMgManagerLb, " payload: ", payload)
+ case mq.MsgScenarioTerminate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ processActiveScenarioUpdate()
+ case mq.MsgMgLbRulesUpdate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
processMgSvcMapUpdate()
default:
- log.Warn("Unsupported channel")
+ log.Trace("Ignoring unsupported message: ", mq.PrintMsg(msg))
}
- mutex.Unlock()
}
func processActiveScenarioUpdate() {
+ // Sync with active scenario store
+ tce.activeModel.UpdateScenario()
+
// Stop scenario if not active
scenarioName = tce.activeModel.GetScenarioName()
if scenarioName == "" {
@@ -315,7 +352,7 @@ func processMgSvcMapUpdate() {
}
// Retrieve LB rules from DB
- jsonNetElemList, err := tce.lbRulesStore.rc.JSONGetEntry(moduleMgManager+":"+typeLb, ".")
+ jsonNetElemList, err := tce.lbRulesStore.rc.JSONGetEntry(tce.lbRulesStore.baseKey+typeLb, ".")
if err != nil {
log.Error(err.Error())
return
@@ -346,9 +383,13 @@ func processMgSvcMapUpdate() {
// Apply new MG Service mapping rules
applyMgSvcMapping()
- // Publish update to TC Sidecars for enforcement
- log.Debug("TX-MSG [", channelTcLb, "] ", "")
- _ = tce.netCharStore.rc.Publish(channelTcLb, "")
+ // Send TC LB Rules update message to TC Sidecars for enforcement
+ msg := tce.mqLocal.CreateMsg(mq.MsgTcLbRulesUpdate, moduleTcSidecar, tce.sandboxName)
+ log.Debug("TX MSG: ", mq.PrintMsg(msg))
+ err = tce.mqLocal.SendMsg(msg)
+ if err != nil {
+ log.Error("Failed to send message. Error: ", err.Error())
+ }
}
func addPod(name string) {
@@ -383,10 +424,21 @@ func stopScenario() {
scenarioName = ""
- tce.netCharStore.rc.DBFlush(moduleTcEngine)
+ tce.netCharStore.rc.DBFlush(tce.netCharStore.baseKey)
- _ = tce.netCharStore.rc.Publish(channelTcNet, "delAll")
- _ = tce.netCharStore.rc.Publish(channelTcLb, "delAll")
+ // Send message to clear TC LB & Net Rules
+ msg := tce.mqLocal.CreateMsg(mq.MsgTcNetRulesUpdate, moduleTcSidecar, tce.sandboxName)
+ log.Debug("TX MSG: ", mq.PrintMsg(msg))
+ err := tce.mqLocal.SendMsg(msg)
+ if err != nil {
+ log.Error("Failed to send message. Error: ", err.Error())
+ }
+ msg = tce.mqLocal.CreateMsg(mq.MsgTcLbRulesUpdate, moduleTcSidecar, tce.sandboxName)
+ log.Debug("TX MSG: ", mq.PrintMsg(msg))
+ err = tce.mqLocal.SendMsg(msg)
+ if err != nil {
+ log.Error("Failed to send message. Error: ", err.Error())
+ }
tce.netCharMgr.Stop()
}
@@ -403,7 +455,7 @@ func processScenario(model *mod.Model) error {
err := errors.New("Error finding process: " + name)
return err
}
- proc, ok := node.(*ceModel.Process)
+ proc, ok := node.(*dataModel.Process)
if !ok {
err := errors.New("Error casting process: " + name)
return err
@@ -442,10 +494,10 @@ func processScenario(model *mod.Model) error {
userChartGroup := strings.Split(proc.UserChartGroup, ":")
// Retrieve service ports
- var servicePorts []ceModel.ServicePort
+ var servicePorts []dataModel.ServicePort
port, err := strconv.ParseInt(userChartGroup[2], 10, 32)
if err == nil {
- var servicePort ceModel.ServicePort
+ var servicePort dataModel.ServicePort
servicePort.Port = int32(port)
servicePort.Protocol = userChartGroup[3]
servicePorts = append(servicePorts, servicePort)
@@ -475,8 +527,8 @@ func processScenario(model *mod.Model) error {
egressSvcMap.Protocol = service.Protocol
podInfo.EgressSvcMapList[egressSvcMap.SvcName] = egressSvcMap
- var servicePorts []ceModel.ServicePort
- var servicePort ceModel.ServicePort
+ var servicePorts []dataModel.ServicePort
+ var servicePort dataModel.ServicePort
servicePort.Port = service.Port
servicePort.Protocol = service.Protocol
servicePorts = append(servicePorts, servicePort)
@@ -489,7 +541,7 @@ func processScenario(model *mod.Model) error {
}
// Create & store new service & MG service information
-func addServiceInfo(svcName string, svcPorts []ceModel.ServicePort, mgSvcName string, nodeName string) {
+func addServiceInfo(svcName string, svcPorts []dataModel.ServicePort, mgSvcName string, nodeName string) {
// Add service instance service map
addSvc(svcName)
@@ -535,23 +587,23 @@ func addServiceInfo(svcName string, svcPorts []ceModel.ServicePort, mgSvcName st
func updateDbState(transactionId int) {
var dbState = make(map[string]interface{})
dbState["transactionIdStored"] = transactionId
- keyName := moduleTcEngine + ":" + typeNet + ":dbState"
+ keyName := tce.netCharStore.baseKey + typeNet + ":dbState"
_ = tce.netCharStore.rc.SetEntry(keyName, dbState)
}
-func netCharUpdate(dstName string, srcName string, rate float64, latency float64, latencyVariation float64, packetLoss float64) {
+func netCharUpdate(dstName string, srcName string, rate float64, latency float64, latencyVariation float64, distribution string, packetLoss float64) {
mutex.Lock()
+ defer mutex.Unlock()
+
// Retrieve flow filter info
dstElement, found := netElemMap[dstName]
if !found {
log.Error("Failed to find flow destination: ", dstName)
- mutex.Unlock()
return
}
filterInfo, found := dstElement.FilterInfoMap[srcName]
if !found {
log.Error("Failed to find flow source: ", srcName)
- mutex.Unlock()
return
}
@@ -560,21 +612,28 @@ func netCharUpdate(dstName string, srcName string, rate float64, latency float64
filterInfo.LatencyVariation = int(latencyVariation)
filterInfo.PacketLoss = int(100 * packetLoss)
filterInfo.DataRate = int(THROUGHPUT_UNIT * rate)
+ filterInfo.Distribution = strings.ToLower(distribution)
_ = setShapingRule(filterInfo)
- mutex.Unlock()
}
func updateComplete() {
mutex.Lock()
+ defer mutex.Unlock()
+
// Update the Db for state information (only transactionId for now)
updateDbState(tce.nextTransactionId)
- // Publish update to TC Sidecars for enforcement
- transactionIdStr := strconv.Itoa(tce.nextTransactionId)
- log.Debug("TX-MSG [", channelTcNet, "] ", transactionIdStr)
- _ = tce.netCharStore.rc.Publish(channelTcNet, transactionIdStr)
+ // Send TC Net Rules update message to TC Sidecars for enforcement
+ msg := tce.mqLocal.CreateMsg(mq.MsgTcNetRulesUpdate, moduleTcSidecar, tce.sandboxName)
+ msg.Payload["transaction-id"] = strconv.Itoa(tce.nextTransactionId)
+ log.Debug("TX MSG: ", mq.PrintMsg(msg))
+ err := tce.mqLocal.SendMsg(msg)
+ if err != nil {
+ log.Error("Failed to send message. Error: ", err.Error())
+ }
+
+ // Increment transaction ID
tce.nextTransactionId++
- mutex.Unlock()
}
func setFilterInfoRules() {
@@ -602,6 +661,7 @@ func setFilterInfoRules() {
filterInfo.Latency = 0
filterInfo.LatencyVariation = 0
filterInfo.LatencyCorrelation = COMMON_CORRELATION
+ filterInfo.Distribution = DEFAULT_DISTRIBUTION
filterInfo.PacketLoss = 0
filterInfo.DataRate = 0
@@ -629,7 +689,7 @@ func setFilterRule(filterInfo *FilterInfo) error {
m_filter["ifb_uniqueId"] = uniqueId
m_filter["filter_uniqueId"] = uniqueId
- keyName := moduleTcEngine + ":" + typeNet + ":" + filterInfo.PodName + ":filter:" + uniqueId
+ keyName := tce.netCharStore.baseKey + typeNet + ":" + filterInfo.PodName + ":filter:" + uniqueId
err := tce.netCharStore.rc.SetEntry(keyName, m_filter)
if err != nil {
return err
@@ -644,11 +704,12 @@ func setShapingRule(filterInfo *FilterInfo) error {
m_shape["delay"] = strconv.FormatInt(int64(filterInfo.Latency), 10)
m_shape["delayVariation"] = strconv.FormatInt(int64(filterInfo.LatencyVariation), 10)
m_shape["delayCorrelation"] = strconv.FormatInt(int64(filterInfo.LatencyCorrelation), 10)
+ m_shape["distribution"] = filterInfo.Distribution
m_shape["packetLoss"] = strconv.FormatInt(int64(filterInfo.PacketLoss), 10)
m_shape["dataRate"] = strconv.FormatInt(int64(filterInfo.DataRate), 10)
m_shape["ifb_uniqueId"] = uniqueId
- keyName := moduleTcEngine + ":" + typeNet + ":" + filterInfo.PodName + ":shape:" + uniqueId
+ keyName := tce.netCharStore.baseKey + typeNet + ":" + filterInfo.PodName + ":shape:" + uniqueId
err := tce.netCharStore.rc.SetEntry(keyName, m_shape)
if err != nil {
return err
@@ -680,7 +741,7 @@ func applyMgSvcMapping() {
fields[fieldLbSvcPort] = portInfo.Port
// Make unique key
- key := moduleTcEngine + ":" + typeLb + ":" + podInfo.Name + ":" +
+ key := tce.netCharStore.baseKey + typeLb + ":" + podInfo.Name + ":" +
svcInfo.MgSvc.Name + ":" + strconv.Itoa(int(portInfo.Port))
keys[key] = true
@@ -715,7 +776,7 @@ func applyMgSvcMapping() {
fields[fieldLbSvcPort] = svcMap.SvcPort
// Make unique key
- key := moduleTcEngine + ":" + typeLb + ":" + podInfo.Name + ":" +
+ key := tce.netCharStore.baseKey + typeLb + ":" + podInfo.Name + ":" +
svcMap.SvcName + ":" + strconv.Itoa(int(svcMap.NodePort))
keys[key] = true
@@ -737,7 +798,7 @@ func applyMgSvcMapping() {
fields[fieldLbSvcPort] = svcMap.SvcPort
// Make unique key
- key := moduleTcEngine + ":" + typeLb + ":" + podInfo.Name + ":" +
+ key := tce.netCharStore.baseKey + typeLb + ":" + podInfo.Name + ":" +
svcMap.SvcName + ":" + strconv.Itoa(int(svcMap.SvcPort))
keys[key] = true
@@ -747,7 +808,7 @@ func applyMgSvcMapping() {
}
// Remove old DB entries
- keyName := moduleTcEngine + ":" + typeLb + ":*"
+ keyName := tce.netCharStore.baseKey + typeLb + ":*"
err := tce.netCharStore.rc.ForEachEntry(keyName, removeEntryHandler, &keys)
if err != nil {
log.Error("Failed to remove old entries with err: ", err)
@@ -796,7 +857,7 @@ func getPlatformInfo() {
log.Debug("Checking for Pod IPs. podCountReq: ", tce.podCountReq, " podCount:", tce.podCount)
log.Info("update on the mappings(pod): ", podIPMap)
// Retrieve all pods from k8s api with scenario label
- pods, err := clientset.CoreV1().Pods("").List(
+ pods, err := clientset.CoreV1().Pods(tce.sandboxName).List(
metav1.ListOptions{LabelSelector: fmt.Sprintf("meepScenario=%s", scenarioName)})
if err != nil {
log.Error("Failed to retrieve pods from k8s API Server. Error: ", err)
@@ -828,7 +889,7 @@ func getPlatformInfo() {
log.Info("update on the mappings(svc): ", svcIPMap)
// Retrieve all services from k8s api with scenario label
- services, err := clientset.CoreV1().Services("").List(
+ services, err := clientset.CoreV1().Services(tce.sandboxName).List(
metav1.ListOptions{})
if err != nil {
log.Error("Failed to retrieve services from k8s API Server. Error: ", err)
diff --git a/go-apps/meep-tc-sidecar/destination.go b/go-apps/meep-tc-sidecar/destination.go
index 3c2e20558b4fd4c9d9f137c7d303f61b74ccbbf9..9e72c391473c9fafcf9e196d53802a4371dc053f 100644
--- a/go-apps/meep-tc-sidecar/destination.go
+++ b/go-apps/meep-tc-sidecar/destination.go
@@ -28,8 +28,6 @@ import (
ms "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-metric-store"
)
-const moduleMetrics string = "metrics"
-
type history struct {
received int
lost int
diff --git a/go-apps/meep-tc-sidecar/go.mod b/go-apps/meep-tc-sidecar/go.mod
index 25d745a714f8a958846da7becd52e254cb53f40a..1d23c67613cc09515fb92b07911ddcd478ac9b10 100644
--- a/go-apps/meep-tc-sidecar/go.mod
+++ b/go-apps/meep-tc-sidecar/go.mod
@@ -3,8 +3,10 @@ module github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-tc-sidecar
go 1.12
require (
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr 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-mq v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis v0.0.0
github.com/coreos/go-iptables v0.4.0
github.com/gogo/protobuf v1.2.1 // indirect
@@ -24,7 +26,9 @@ require (
)
replace (
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr => ../../go-packages/meep-data-key-mgr
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-mq => ../../go-packages/meep-mq
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis => ../../go-packages/meep-redis
)
diff --git a/go-apps/meep-tc-sidecar/go.sum b/go-apps/meep-tc-sidecar/go.sum
index 2f2c536b812b7295e232e45282b75fa7b60f8e46..f32f6dd6190dd17a3270bb0236987f5e38b476df 100644
--- a/go-apps/meep-tc-sidecar/go.sum
+++ b/go-apps/meep-tc-sidecar/go.sum
@@ -1,54 +1,40 @@
-github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db h1:Zkf5kwhxdW0xV7WM/crqIcOP5LCFGnAmumWSFAewJ74=
github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db/go.mod h1:RU+6d0CNIRSp6yo1mXLIIrnFa/3LHhvcDVLVJyovptM=
github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351 h1:1u1XrfCBnY+GijnyU6O1k4odp5TnqZQTsp5v7+n/E4Y=
github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351/go.mod h1:HxwfbuElTuGf+/uKZfjJrCnv0BmmpkPJDI7gBwj1KkM=
github.com/coreos/go-iptables v0.4.0 h1:wh4UbVs8DhLUbpyq97GLJDKrQMjEDD63T1xE4CrsKzQ=
github.com/coreos/go-iptables v0.4.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU=
-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/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/go-redis/redis v6.15.2+incompatible h1:9SpNVG76gr6InJGxoZ6IuuxaCOQwDAhzyXg+Bs+0Sb4=
github.com/go-redis/redis v6.15.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE=
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
-github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
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/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
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/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo=
github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME=
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
-github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -57,15 +43,11 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
-gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
k8s.io/api v0.0.0-20181204000039-89a74a8d264d h1:HQoGWsWUe/FmRcX9BU440AAMnzBFEf+DBo4nbkQlNzs=
k8s.io/api v0.0.0-20181204000039-89a74a8d264d/go.mod h1:iuAfoD4hCxJ8Onx9kaTIt30j7jUFS00AXQi6QMi99vA=
@@ -77,5 +59,4 @@ k8s.io/kubernetes v1.13.4 h1:gQqFv/pH8hlbznLXQUsi8s5zqYnv0slmUDl/yVA0EWc=
k8s.io/kubernetes v1.13.4/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk=
k8s.io/utils v0.0.0-20190221042446-c2654d5206da h1:ElyM7RPonbKnQqOcw7dG2IK5uvQQn3b/WPHqD5mBvP4=
k8s.io/utils v0.0.0-20190221042446-c2654d5206da/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0=
-sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs=
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
diff --git a/go-apps/meep-tc-sidecar/main.go b/go-apps/meep-tc-sidecar/main.go
index 75b53210126dc7389bd044871e4ac06d64c76a49..0afb914fcbfd17d957568eec74241bd3761bfc0f 100644
--- a/go-apps/meep-tc-sidecar/main.go
+++ b/go-apps/meep-tc-sidecar/main.go
@@ -22,12 +22,16 @@ import (
"math/rand"
"os"
"os/exec"
+ "os/signal"
"strings"
"sync"
+ "syscall"
"time"
+ dkm "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr"
log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
ms "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-metric-store"
+ mq "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq"
redis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis"
ipt "github.com/coreos/go-iptables/iptables"
@@ -35,16 +39,17 @@ import (
k8s_exec "k8s.io/utils/exec"
)
-const moduleTcEngine string = "tc-engine"
+const moduleName string = "meep-tc-sidecar"
+
+const tcEngineKey string = "tc-engine:"
+const metricsKey string = "metrics:"
+
const typeNet string = "net"
const typeLb string = "lb"
const typeMeSvc string = "ME-SVC"
const typeIngressSvc string = "INGRESS-SVC"
const typeEgressSvc string = "EGRESS-SVC"
-const channelTcNet string = moduleTcEngine + "-" + typeNet
-const channelTcLb string = moduleTcEngine + "-" + typeLb
-
const meepPrefix string = "MEEP-"
const svcPrefix string = "SVC-"
const mePrefix string = meepPrefix + "ME-"
@@ -96,14 +101,16 @@ var opts = struct {
// NetChar
type NetChar struct {
- Latency string
- Jitter string
- PacketLoss string
- Throughput string
+ Latency string
+ Jitter string
+ PacketLoss string
+ Throughput string
+ Distribution string
}
var pinger *Pinger
var PodName string
+var sandboxName string
var ipTbl *ipt.IPTables
var letters = []rune(capLetters)
@@ -117,48 +124,75 @@ var measurementsRunning = false
var flushRequired = false
var firstTimePass = true
-const redisAddr = "meep-redis-master:6379"
-const influxDBAddr = "http://meep-influxdb:8086"
+const redisAddr = "meep-redis-master.default.svc.cluster.local:6379"
+const influxDBAddr = "http://meep-influxdb.default.svc.cluster.local:8086"
+var mqLocal *mq.MsgQueue
+var handlerId int
var rc *redis.Connector
var metricStore *ms.MetricStore
+var baseKey string
+var metricsBaseKey string
const DEFAULT_SIDECAR_DB = 0
var nbAppliedOperations = 0
-// Run - MEEP Sidecar execution
-func main() {
- // Initialize MEEP Sidecar
- err := initMeepSidecar()
- if err != nil {
- log.Error("Failed to initialize MEEP Sidecar")
- return
- }
- log.Info("Successfully initialized MEEP Sidecar")
+func init() {
+ // Log as JSON instead of the default ASCII formatter.
+ //log.MeepJSONLogInit("meep-tc-sidecar")
+ log.MeepTextLogInit("meep-tc-sidecar")
+}
- // Refresh TC rules to match DB state
- refreshNetCharRules()
+func main() {
+ log.Info(os.Args)
+ log.Info("Starting TC Sidecar")
+
+ // Start signal handler
+ run := true
+ go func() {
+ sigchan := make(chan os.Signal, 10)
+ signal.Notify(sigchan, syscall.SIGINT, syscall.SIGTERM)
+ <-sigchan
+ log.Info("Program killed !")
+ // do last actions and wait for all write operations to end
+ run = false
+ }()
+
+ // Initialize & Start TC Engine
+ go func() {
+ err := initMeepSidecar()
+ if err != nil {
+ log.Error("Failed to initialize TC Sidecar")
+ run = false
+ return
+ }
- // Refresh LB IPtables rules to match DB state
- refreshLbRules()
+ err = runMeepSidecar()
+ if err != nil {
+ log.Error("Failed to start TC Sidecar")
+ run = false
+ return
+ }
+ }()
- // Listen for subscribed events. Provide event handler method.
- _ = rc.Listen(eventHandler)
+ // Main loop
+ count := 0
+ for {
+ if !run {
+ log.Info("Ran for ", count, " seconds")
+ break
+ }
+ time.Sleep(time.Second)
+ count++
+ }
}
// initMeepSidecar - MEEP Sidecar initialization
-func initMeepSidecar() error {
- var err error
-
- // Log as JSON instead of the default ASCII formatter.
- log.MeepTextLogInit("meep-tc-sidecar")
-
+func initMeepSidecar() (err error) {
// Seed random using current time
rand.Seed(time.Now().UnixNano())
- // Initialize global variables
-
// Retrieve Environment variables
PodName = strings.TrimSpace(os.Getenv("MEEP_POD_NAME"))
if PodName == "" {
@@ -167,6 +201,14 @@ func initMeepSidecar() error {
}
log.Info("MEEP_POD_NAME: ", PodName)
+ sandboxName = strings.TrimSpace(os.Getenv("MEEP_SANDBOX_NAME"))
+ if sandboxName == "" {
+ err = errors.New("MEEP_SANDBOX_NAME env variable not set")
+ log.Error(err.Error())
+ return err
+ }
+ log.Info("MEEP_SANDBOX_NAME: ", sandboxName)
+
scenarioName := strings.TrimSpace(os.Getenv("MEEP_SCENARIO_NAME"))
if scenarioName == "" {
log.Error("MEEP_SCENARIO_NAME not set. Exiting.")
@@ -174,6 +216,14 @@ func initMeepSidecar() error {
}
log.Info("MEEP_SCENARIO_NAME: ", scenarioName)
+ // Create message queue
+ mqLocal, err = mq.NewMsgQueue(mq.GetLocalName(sandboxName), moduleName, sandboxName, redisAddr)
+ if err != nil {
+ log.Error("Failed to create Message Queue with error: ", err)
+ return err
+ }
+ log.Info("Message Queue created")
+
// Create IPtables client
ipTbl, err = ipt.New()
if err != nil {
@@ -182,6 +232,12 @@ func initMeepSidecar() error {
}
log.Info("Successfully created new IPTables client")
+ // Set base store key
+ baseKey = dkm.GetKeyRoot(sandboxName) + tcEngineKey
+
+ // Set metrics base store key
+ metricsBaseKey = dkm.GetKeyRoot(sandboxName) + metricsKey
+
// Connect to Redis DB
rc, err = redis.NewConnector(redisAddr, DEFAULT_SIDECAR_DB)
if err != nil {
@@ -191,22 +247,12 @@ func initMeepSidecar() error {
log.Info("Connected to redis DB")
// Connect to Metric Store
- metricStore, err = ms.NewMetricStore(scenarioName, influxDBAddr, redisAddr)
+ metricStore, err = ms.NewMetricStore(scenarioName, sandboxName, influxDBAddr, redisAddr)
if err != nil {
log.Error("Failed connection to Redis: ", err)
return err
}
- // Subscribe to Pub-Sub events for MEEP TC & LB
- // NOTE: Current implementation is RedisDB Pub-Sub
- err = rc.Subscribe(channelTcNet, channelTcLb)
- if err != nil {
- log.Error("Failed to subscribe to Pub/Sub events. Error: ", err)
- return err
- }
-
- log.Info("Successfully subscribed to Pub/Sub events")
-
semLatencyMap.Lock()
latestLatencyResultsMap = make(map[string]int32)
semLatencyMap.Unlock()
@@ -214,30 +260,37 @@ func initMeepSidecar() error {
return nil
}
-func eventHandler(channel string, payload string) {
- // Handle Message according to Rx Channel
- switch channel {
+// runMeepSidecar - Start TC Sidecar
+func runMeepSidecar() (err error) {
+ // Refresh TC rules to match DB state
+ refreshNetCharRules()
- // MEEP TC Network Characteristic Channel
- case channelTcNet:
- log.Debug("Event received on channel: ", channelTcNet, " payload: ", payload)
- processNetCharMsg(payload)
- // MEEP TC LB Channel
- case channelTcLb:
- log.Debug("Event received on channel: ", channelTcLb, " payload: ", payload)
- processLbMsg(payload)
- default:
- log.Warn("Unsupported channel", " payload: ", payload)
+ // Refresh LB IPtables rules to match DB state
+ refreshLbRules()
+
+ // Register Message Queue handler
+ handler := mq.MsgHandler{Handler: msgHandler, UserData: nil}
+ handlerId, err = mqLocal.RegisterHandler(handler)
+ if err != nil {
+ log.Error("Failed to listen for sandbox updates: ", err.Error())
+ return err
}
-}
-func processNetCharMsg(payload string) {
- refreshNetCharRules()
+ return nil
}
-func processLbMsg(payload string) {
- // NOTE: Payload contains no information yet. For now reevaluate LB rules on every received event.
- refreshLbRules()
+// Message Queue handler
+func msgHandler(msg *mq.Msg, userData interface{}) {
+ switch msg.Message {
+ case mq.MsgTcLbRulesUpdate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ refreshLbRules()
+ case mq.MsgTcNetRulesUpdate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ refreshNetCharRules()
+ default:
+ log.Trace("Ignoring unsupported message: ", mq.PrintMsg(msg))
+ }
}
func refreshNetCharRules() {
@@ -344,7 +397,7 @@ func refreshLbRules() {
// Apply pod-specific LB rules stored in DB
flushRequired = false
- keyName := moduleTcEngine + ":" + typeLb + ":" + PodName + ":*"
+ keyName := baseKey + typeLb + ":" + PodName + ":*"
err = rc.ForEachEntry(keyName, refreshLbRulesHandler, &chainMap)
if err != nil {
log.Error("Failed to search and process pod-specific MEEP LB rules. Error: ", err)
@@ -611,12 +664,10 @@ func workRxTxPackets() {
tputStats[u.remoteName] = u.processRxTx(qdiscResults["ifb"+u.ifbNumber])
}
- key := moduleMetrics + ":" + PodName + ":throughput"
-
+ key := metricsBaseKey + PodName + ":throughput"
if rc.EntryExists(key) {
_ = rc.SetEntry(key, tputStats)
}
-
semOptsDests.Unlock()
time.Sleep(opts.trafficInterval)
@@ -670,7 +721,7 @@ func workLogRxTxData() {
func createPing() ([]podShortElement, error) {
var podsToPing []podShortElement
- keyName := moduleTcEngine + ":" + typeNet + ":" + PodName + ":filter*"
+ keyName := baseKey + typeNet + ":" + PodName + ":filter*"
err := rc.ForEachEntry(keyName, createPingHandler, &podsToPing)
if err != nil {
return nil, err
@@ -691,7 +742,7 @@ func createPingHandler(key string, fields map[string]string, userData interface{
}
func createIfbs() error {
- keyName := moduleTcEngine + ":" + typeNet + ":" + PodName + ":shape*"
+ keyName := baseKey + typeNet + ":" + PodName + ":shape*"
err := rc.ForEachEntry(keyName, createIfbsHandler, nil)
if err != nil {
return err
@@ -714,7 +765,7 @@ func createIfbsHandler(key string, fields map[string]string, userData interface{
}
func createFilters() error {
- keyName := moduleTcEngine + ":" + typeNet + ":" + PodName + ":filter*"
+ keyName := baseKey + typeNet + ":" + PodName + ":filter*"
err := rc.ForEachEntry(keyName, createFiltersHandler, nil)
if err != nil {
return err
@@ -750,7 +801,7 @@ func createFiltersHandler(key string, fields map[string]string, userData interfa
func deleteUnusedFilters() {
for index, filterNumber := range filters {
- keyName := moduleTcEngine + ":" + typeNet + ":" + PodName + ":filter:" + filterNumber
+ keyName := baseKey + typeNet + ":" + PodName + ":filter:" + filterNumber
if !rc.EntryExists(keyName) {
log.Debug("filter removed: ", filterNumber)
// Remove old filter
@@ -762,7 +813,7 @@ func deleteUnusedFilters() {
func deleteUnusedIfbs() {
for index, ifbNumber := range ifbs {
- keyName := moduleTcEngine + ":" + typeNet + ":" + PodName + ":shape:" + ifbNumber
+ keyName := baseKey + typeNet + ":" + PodName + ":shape:" + ifbNumber
if !rc.EntryExists(keyName) {
log.Debug("ifb removed: ", ifbNumber)
// Remove associated Ifb
@@ -830,6 +881,8 @@ func cmdSetIfb(shape map[string]string) (bool, error) {
delay := shape["delay"]
delayVariation := shape["delayVariation"]
delayCorrelation := shape["delayCorrelation"]
+ distribution := shape["distribution"]
+
loss := shape["packetLoss"]
var lossInteger string
var lossFraction string
@@ -849,9 +902,17 @@ func cmdSetIfb(shape map[string]string) (bool, error) {
dataRate := shape["dataRate"]
//tc qdisc change dev $ifb$ifbnumber handle 1:0 root netem delay $delay$ms loss $loss$prcent
- normalDistributionStr := ""
+ distributionStr := ""
if delayVariation != "0" {
- normalDistributionStr = "distribution normal"
+ if distribution != "" {
+ //special case for uniform, which is not specifying a distribution (respecting netem description of a uniform distribution)
+ if distribution != "uniform" {
+ distributionStr = "distribution " + distribution
+ }
+ } else {
+ distributionStr = "distribution normal"
+ distribution = "normal"
+ }
}
nc := netcharMap[ifbNumber]
@@ -860,8 +921,8 @@ func cmdSetIfb(shape map[string]string) (bool, error) {
netcharMap[ifbNumber] = nc
}
//only apply if an update is needed
- if nc.Latency != delay || nc.Jitter != delayVariation || nc.PacketLoss != loss || nc.Throughput != dataRate {
- str := "tc qdisc change dev ifb" + ifbNumber + " handle 1:0 root netem delay " + delay + "ms " + delayVariation + "ms " + delayCorrelation + "% " + normalDistributionStr + " loss " + lossInteger + "." + lossFraction + "%"
+ if nc.Latency != delay || nc.Jitter != delayVariation || nc.PacketLoss != loss || nc.Throughput != dataRate || (delayVariation != "0" && nc.Distribution != distribution) {
+ str := "tc qdisc change dev ifb" + ifbNumber + " handle 1:0 root netem delay " + delay + "ms " + delayVariation + "ms " + delayCorrelation + "% " + distributionStr + " loss " + lossInteger + "." + lossFraction + "%"
if dataRate != "" && dataRate != "0" {
str = str + " rate " + dataRate + "bit"
}
@@ -871,11 +932,13 @@ func cmdSetIfb(shape map[string]string) (bool, error) {
return false, err
}
+ log.Info("Tc log update: ", str)
//store the new values
nc.Latency = delay
nc.Jitter = delayVariation
nc.PacketLoss = loss
nc.Throughput = dataRate
+ nc.Distribution = distribution
return true, nil
}
diff --git a/go-apps/meep-virt-engine/Dockerfile b/go-apps/meep-virt-engine/Dockerfile
index 0414384dfb93a0d2d82ca64f454b5ddf05c1cb05..0bb701c4879aa011fa93c1c7f729903bcee0cbe3 100644
--- a/go-apps/meep-virt-engine/Dockerfile
+++ b/go-apps/meep-virt-engine/Dockerfile
@@ -12,6 +12,25 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-FROM debian
+FROM debian:9.6-slim
+
+COPY ./meep-gis-engine /templates/sandbox/meep-gis-engine
+COPY ./meep-loc-serv /templates/sandbox/meep-loc-serv
+COPY ./meep-metrics-engine /templates/sandbox/meep-metrics-engine
+COPY ./meep-mg-manager /templates/sandbox/meep-mg-manager
+COPY ./meep-rnis /templates/sandbox/meep-rnis
+COPY ./meep-sandbox-ctrl /templates/sandbox/meep-sandbox-ctrl
+COPY ./meep-tc-engine /templates/sandbox/meep-tc-engine
+COPY ./meep-virt-chart-templates /templates/scenario/meep-virt-chart-templates
+COPY ./entrypoint.sh /entrypoint.sh
COPY ./meep-virt-engine /meep-virt-engine
-ENTRYPOINT ["/meep-virt-engine"]
+
+ENV HELM_VERSION="v2.16.1"
+RUN mkdir -p /active \
+ && apt-get update \
+ && apt-get install -y wget \
+ && wget -q https://storage.googleapis.com/kubernetes-helm/helm-${HELM_VERSION}-linux-amd64.tar.gz -O - | tar -xzO linux-amd64/helm > /usr/local/bin/helm \
+ && chmod +x /usr/local/bin/helm \
+ && chmod +x /entrypoint.sh
+
+ENTRYPOINT ["/entrypoint.sh"]
diff --git a/go-apps/meep-virt-engine/entrypoint.sh b/go-apps/meep-virt-engine/entrypoint.sh
new file mode 100644
index 0000000000000000000000000000000000000000..ced28300c08b776d31aa704734cb0483a9349b8c
--- /dev/null
+++ b/go-apps/meep-virt-engine/entrypoint.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+set -e
+
+# Configure & update helm repo
+helm init --client-only
+helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com/
+helm repo update
+
+# Start virt engine
+exec /meep-virt-engine
\ No newline at end of file
diff --git a/go-apps/meep-virt-engine/go.mod b/go-apps/meep-virt-engine/go.mod
index c770853b939172d00a689d6c5e8775f3db7bf0ae..e80bab8085c2f5bf1bc07a30ecdb4de07a40452b 100644
--- a/go-apps/meep-virt-engine/go.mod
+++ b/go-apps/meep-virt-engine/go.mod
@@ -3,18 +3,19 @@ module github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-virt-engine
go 1.12
require (
- github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog v0.0.0
)
-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-data-key-mgr => ../../go-packages/meep-data-key-mgr
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model => ../../go-packages/meep-data-model
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger => ../../go-packages/meep-logger
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model => ../../go-packages/meep-model
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq => ../../go-packages/meep-mq
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis => ../../go-packages/meep-redis
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog => ../../go-packages/meep-watchdog
+)
diff --git a/go-apps/meep-virt-engine/go.sum b/go-apps/meep-virt-engine/go.sum
index c326c142e2393dbaa1940ce1f8564a3ffd03df44..9732dbf4c424063d621d57782e6d4f08f858097d 100644
--- a/go-apps/meep-virt-engine/go.sum
+++ b/go-apps/meep-virt-engine/go.sum
@@ -1,55 +1,36 @@
-github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db h1:Zkf5kwhxdW0xV7WM/crqIcOP5LCFGnAmumWSFAewJ74=
github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db/go.mod h1:RU+6d0CNIRSp6yo1mXLIIrnFa/3LHhvcDVLVJyovptM=
github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351 h1:1u1XrfCBnY+GijnyU6O1k4odp5TnqZQTsp5v7+n/E4Y=
github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351/go.mod h1:HxwfbuElTuGf+/uKZfjJrCnv0BmmpkPJDI7gBwj1KkM=
github.com/RyanCarrier/dijkstra v0.0.0-20190726134004-b51cadb5ae52 h1:trnwuu/Q8T59kgRjXcSDBODnyZP9wes+bnLn0lx4PgM=
github.com/RyanCarrier/dijkstra v0.0.0-20190726134004-b51cadb5ae52/go.mod h1:DdR6ymcLl8+sN/XOVNjnYO1NDYfgHskGjreZUDuQCTY=
-github.com/RyanCarrier/dijkstra-1 v0.0.0-20170512020943-0e5801a26345 h1:fgSpoKViTSqRb4hjDNj10ig5wUvO0CayCzFdLf6fuRM=
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/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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/go-redis/redis v6.15.2+incompatible h1:9SpNVG76gr6InJGxoZ6IuuxaCOQwDAhzyXg+Bs+0Sb4=
github.com/go-redis/redis v6.15.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
-github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
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=
github.com/mattomatic/dijkstra v0.0.0-20130617153013-6f6d134eb237/go.mod h1:UOnLAUmVG5paym8pD3C4B9BQylUDC2vXFJJpT7JrlEA=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo=
github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME=
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-golang.org/x/net v0.0.0-20180906233101-161cd47e91fd h1:nTDtHvHSdCn1m6ITfMRqtOd/9+7a3s8RBNOZ3eYZzJA=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e h1:o3PsSEY8E4eXWkXrIP9YJALUkVZqzHJT5DOasTyn8Vs=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
-gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/go-apps/meep-virt-engine/helm/delete.go b/go-apps/meep-virt-engine/helm/delete.go
index 5ba11dccc7c78e70a4497bbab5ea93f127da2d59..650b96d4655638c8f720b693e7f4d0d86d892257 100644
--- a/go-apps/meep-virt-engine/helm/delete.go
+++ b/go-apps/meep-virt-engine/helm/delete.go
@@ -24,13 +24,14 @@ import (
func deleteReleases(charts []Chart) error {
for _, c := range charts {
- go deleteRelease(c)
+ deleteRelease(c)
}
return nil
}
func deleteRelease(chart Chart) {
+ log.Debug("Deleting release: " + chart.ReleaseName)
var cmd = exec.Command("helm", "delete", chart.ReleaseName, "--purge")
out, err := cmd.CombinedOutput()
if err != nil {
diff --git a/go-apps/meep-virt-engine/helm/helm.go b/go-apps/meep-virt-engine/helm/helm.go
index 2db8ac231f671568e1c8531be71b16015b691980..fbc1a56ca649f998be6dbfd725e8e999f98e146a 100644
--- a/go-apps/meep-virt-engine/helm/helm.go
+++ b/go-apps/meep-virt-engine/helm/helm.go
@@ -16,20 +16,6 @@
package helm
-import (
- "fmt"
-
- log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
-)
-
-const (
- StateIdle = "IDLE"
- StateInstalling = "INSTALLING"
- StateDeleting = "DELETING"
-)
-
-var state string = StateIdle
-
func GetReleasesName() ([]Release, error) {
return getReleasesName()
}
@@ -39,31 +25,9 @@ func GetReleases() ([]Release, error) {
}
func InstallCharts(charts []Chart) error {
- if state == StateIdle {
- state = StateInstalling
- go func() {
- log.Debug("Installing ", len(charts), " Charts...")
- _ = installCharts(charts)
- log.Debug("Charts installed (", len(charts), ")")
- state = StateIdle
- }()
- return nil
- }
- err := fmt.Errorf("Service busy [%s]", state)
- return err
+ return runTask(Install, charts)
}
func DeleteReleases(charts []Chart) error {
- if state == StateIdle {
- state = StateDeleting
- go func() {
- log.Debug("Deleting ", len(charts), " Releases...")
- _ = deleteReleases(charts)
- log.Debug("Releases deleted (", len(charts), ")")
- state = StateIdle
- }()
- return nil
- }
- err := fmt.Errorf("Service busy [%s]", state)
- return err
+ return runTask(Delete, charts)
}
diff --git a/go-apps/meep-virt-engine/helm/install.go b/go-apps/meep-virt-engine/helm/install.go
index bdcc26b58e252ff94f83d18be0fb717e26c01f33..8c0de72a4bdbd9655b6b6cac2a28b4f777fdfc47 100644
--- a/go-apps/meep-virt-engine/helm/install.go
+++ b/go-apps/meep-virt-engine/helm/install.go
@@ -25,18 +25,21 @@ import (
)
func installCharts(charts []Chart) error {
-
err := ensureReleases(charts)
if err != nil {
return err
}
- err = install(charts)
- if err != nil {
- // Cleanup release
- cleanReleases(charts)
+ for _, chart := range charts {
+ err := install(chart)
+ if err != nil {
+ log.Info("Cleaning installed releases")
+ cleanReleases(charts)
+ return err
+ }
}
- return err
+
+ return nil
}
func ensureReleases(charts []Chart) error {
@@ -54,22 +57,30 @@ func ensureReleases(charts []Chart) error {
return nil
}
-func install(charts []Chart) error {
- for _, c := range charts {
- var cmd *exec.Cmd
- if strings.Trim(c.ValuesFile, " ") == "" {
- cmd = exec.Command("helm", "install", "--name", c.ReleaseName, "--set",
- "fullnameOverride="+c.ReleaseName, c.Location, "--replace")
- } else {
- cmd = exec.Command("helm", "install", "--name", c.ReleaseName, "--set",
- "fullnameOverride="+c.ReleaseName, c.Location, "-f", c.ValuesFile, "--replace")
- }
- out, err := cmd.CombinedOutput()
- if err != nil {
- log.Error("Failed to install Release [" + c.ReleaseName + "] at " + c.Location)
- log.Error("Error(", err.Error(), "): ", string(out))
- return err
- }
+func install(chart Chart) error {
+ log.Debug("Installing chart: " + chart.ReleaseName)
+ var cmd *exec.Cmd
+ if strings.Trim(chart.ValuesFile, " ") == "" {
+ cmd = exec.Command("helm", "install",
+ "--name", chart.ReleaseName,
+ "--namespace", chart.Namespace,
+ "--set", "nameOverride="+chart.Name,
+ "--set", "fullnameOverride="+chart.Name,
+ chart.Location, "--replace")
+ } else {
+ cmd = exec.Command("helm", "install",
+ "--name", chart.ReleaseName,
+ "--namespace", chart.Namespace,
+ "--set", "nameOverride="+chart.Name,
+ "--set", "fullnameOverride="+chart.Name,
+ "-f", chart.ValuesFile,
+ chart.Location, "--replace")
+ }
+ out, err := cmd.CombinedOutput()
+ if err != nil {
+ log.Error("Failed to install Release [" + chart.ReleaseName + "] at " + chart.Location)
+ log.Error("Error(", err.Error(), "): ", string(out))
+ return err
}
return nil
}
@@ -78,7 +89,6 @@ func cleanReleases(charts []Chart) {
var toClean []Chart
var cnt int
releases, _ := GetReleasesName()
- // ensure that releases do not exist
for _, c := range charts {
for _, r := range releases {
@@ -90,6 +100,6 @@ func cleanReleases(charts []Chart) {
}
if cnt > 0 {
- _ = DeleteReleases(toClean)
+ _ = deleteReleases(toClean)
}
}
diff --git a/go-apps/meep-virt-engine/helm/util.go b/go-apps/meep-virt-engine/helm/util.go
index 28c6108040c0eff0b19c7fd8085bc878d7c6bb39..d1e0b7b145b4a02391a3d53a7ca72395ef3aa717 100644
--- a/go-apps/meep-virt-engine/helm/util.go
+++ b/go-apps/meep-virt-engine/helm/util.go
@@ -23,8 +23,9 @@ import (
)
type Chart struct {
- ChartName string
+ Name string
ReleaseName string
+ Namespace string
Location string
ValuesFile string
}
diff --git a/go-apps/meep-virt-engine/helm/worker.go b/go-apps/meep-virt-engine/helm/worker.go
new file mode 100644
index 0000000000000000000000000000000000000000..42b929d3e7007d473252a04ab986bc928e1e60a4
--- /dev/null
+++ b/go-apps/meep-virt-engine/helm/worker.go
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package helm
+
+import (
+ log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
+)
+
+type Task string
+
+const (
+ Install Task = "INSTALL"
+ Delete Task = "DELETE"
+)
+
+type Job struct {
+ task Task
+ charts []Chart
+}
+
+var queue *chan Job = nil
+
+func startWorker() {
+ if queue != nil {
+ return
+ }
+ queueChan := make(chan Job, 5)
+ queue = &queueChan
+
+ go func() {
+ for job := range queueChan {
+ switch job.task {
+ case Install:
+ log.Debug("Installing ", len(job.charts), " Charts...")
+ _ = installCharts(job.charts)
+ log.Debug("Charts installed (", len(job.charts), ")")
+
+ case Delete:
+ log.Debug("Deleting ", len(job.charts), " Releases...")
+ _ = deleteReleases(job.charts)
+ log.Debug("Releases deleted (", len(job.charts), ")")
+ }
+ }
+ queue = nil
+ }()
+}
+
+func runTask(task Task, charts []Chart) error {
+ startWorker()
+ var job Job = Job{task: task, charts: charts}
+ *queue <- job
+ return nil
+}
diff --git a/go-apps/meep-virt-engine/main.go b/go-apps/meep-virt-engine/main.go
index f381b920584a9949d0a8bf29dc878f359933e3b3..d72c76edc2a54f64403b640f589099dee3bf22b3 100644
--- a/go-apps/meep-virt-engine/main.go
+++ b/go-apps/meep-virt-engine/main.go
@@ -45,13 +45,23 @@ func main() {
run = false
}()
- err := server.VirtEngineInit()
+ // Initialize Virt Engine
+ err := server.Init()
if err != nil {
log.Error("Failed to initialize Virt. Engine")
run = false
return
}
+ // Start Virt Engine Event Handler thread
+ err = server.Run()
+ if err != nil {
+ log.Error("Failed to start Virt. Engine")
+ run = false
+ return
+ }
+
+ // Wait for process to exit
count := 0
for {
if !run {
diff --git a/go-apps/meep-virt-engine/server/chart_template.go b/go-apps/meep-virt-engine/server/chart-template.go
similarity index 72%
rename from go-apps/meep-virt-engine/server/chart_template.go
rename to go-apps/meep-virt-engine/server/chart-template.go
index 032c422b36c917a80351bfe6d3b3df2c22400b0a..afd2cac609c33db1462f17df4fc3a7e3c8dbf4bf 100644
--- a/go-apps/meep-virt-engine/server/chart_template.go
+++ b/go-apps/meep-virt-engine/server/chart-template.go
@@ -19,14 +19,13 @@ package server
import (
"errors"
"os"
- "os/user"
"path/filepath"
"strconv"
"strings"
"text/template"
"github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-virt-engine/helm"
- ceModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model"
+ dataModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model"
log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
mod "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model"
)
@@ -106,34 +105,45 @@ type EgressServiceTemplate struct {
// ScenarioTemplate -helm values.yaml template
type ScenarioTemplate struct {
- Deployment DeploymentTemplate
- Service ServiceTemplate
- External ExternalTemplate
- NamespaceName string
+ Deployment DeploymentTemplate
+ Service ServiceTemplate
+ External ExternalTemplate
+ Namespace string
+}
+
+// SandboxTemplate -helm values.yaml template
+type SandboxTemplate struct {
+ SandboxName string
+ Namespace string
+ HostUrl string
+ AltServer string
}
// Service map
var serviceMap map[string]string
// Deploy - Generate charts & deploy
-func Deploy(model *mod.Model) error {
- charts, err := generateCharts(model)
+func Deploy(sandboxName string, model *mod.Model) error {
+
+ // Create scenario charts
+ charts, err := generateScenarioCharts(sandboxName, model)
if err != nil {
- log.Debug("Error creating scenario templates: ", err)
+ log.Debug("Error creating scenario charts: ", err)
return err
}
- log.Debug("Created ", len(charts), " charts")
+ log.Debug("Created ", len(charts), " scenario charts")
+ // Deploy all charts
err = deployCharts(charts)
if err != nil {
- log.Error("Error deploying scenario templates: ", err)
+ log.Error("Error deploying charts: ", err)
return err
}
return nil
}
-func generateCharts(model *mod.Model) (charts []helm.Chart, err error) {
+func generateScenarioCharts(sandboxName string, model *mod.Model) (charts []helm.Chart, err error) {
serviceMap = map[string]string{}
procNames := model.GetNodeNames("CLOUD-APP")
@@ -145,7 +155,7 @@ func generateCharts(model *mod.Model) (charts []helm.Chart, err error) {
err = errors.New("Error finding process: " + name)
return nil, err
}
- proc, ok := node.(*ceModel.Process)
+ proc, ok := node.(*dataModel.Process)
if !ok {
err = errors.New("Error casting process: " + name)
return nil, err
@@ -161,7 +171,7 @@ func generateCharts(model *mod.Model) (charts []helm.Chart, err error) {
setScenarioDefaults(&scenarioTemplate)
// Fill general scenario template information
- scenarioTemplate.NamespaceName = scenarioName
+ scenarioTemplate.Namespace = scenarioName
deploymentTemplate.Name = proc.Name
// Create charts
@@ -169,8 +179,8 @@ func generateCharts(model *mod.Model) (charts []helm.Chart, err error) {
log.Debug("Processing user-defined chart for element[", proc.Name, "]")
// Add user-defined chart
- nc := newChart(scenarioName+"-"+proc.Name, getFullPath(proc.UserChartLocation),
- getFullPath(proc.UserChartAlternateValues))
+ nc := newChart(proc.Name, sandboxName, scenarioName,
+ getFullPath(proc.UserChartLocation), getFullPath(proc.UserChartAlternateValues))
charts = append(charts, nc)
log.Debug("user chart added ", len(charts))
@@ -196,15 +206,14 @@ func generateCharts(model *mod.Model) (charts []helm.Chart, err error) {
portTemplate.Protocol = userChartGroup[3]
serviceTemplate.Ports = append(serviceTemplate.Ports, portTemplate)
- // Create chart files
- chartLocation, err := templateChart(scenarioTemplate)
+ // Create virt-engine chart for new group service
+ chartName := proc.Name + "-svc"
+ chartLocation, err := createChart(chartName, sandboxName, scenarioName, scenarioTemplate)
if err != nil {
log.Debug("yaml creation file process: ", err)
return nil, err
}
-
- // Create virt-engine chart for new group service
- c := newChart(scenarioName+"-"+proc.Name+"-svc", chartLocation, "")
+ c := newChart(chartName, sandboxName, scenarioName, chartLocation, "")
charts = append(charts, c)
log.Debug("chart added for user chart group service ", len(charts))
}
@@ -312,16 +321,15 @@ func generateCharts(model *mod.Model) (charts []helm.Chart, err error) {
}
}
- // Create chart files
- chartLocation, err := templateChart(scenarioTemplate)
+ // Create virt-engine chart
+ chartName := proc.Name
+ chartLocation, err := createChart(chartName, sandboxName, scenarioName, scenarioTemplate)
if err != nil {
log.Debug("yaml creation file process: ", err)
return nil, err
}
-
- // Create virt-engine chart
- newChart := newChart(scenarioName+"-"+proc.Name, chartLocation, "")
- charts = append(charts, newChart)
+ c := newChart(chartName, sandboxName, scenarioName, chartLocation, "")
+ charts = append(charts, c)
log.Debug("chart added ", len(charts))
}
}
@@ -330,7 +338,6 @@ func generateCharts(model *mod.Model) (charts []helm.Chart, err error) {
}
func deployCharts(charts []helm.Chart) error {
-
err := helm.InstallCharts(charts)
if err != nil {
return err
@@ -338,48 +345,71 @@ func deployCharts(charts []helm.Chart) error {
return nil
}
-func templateChart(scenarioTemplate ScenarioTemplate) (string, error) {
-
- homePath := os.Getenv("HOME")
-
- templateFilePath := homePath + "/.meep/template/values-template.yaml"
- templateDefaultDir := homePath + "/.meep/template/defaultDir"
+func createChart(chartName string, sandboxName string, scenarioName string, templateData interface{}) (string, error) {
+
+ // Determine source templates & destination chart location
+ var templateChart string
+ var outChart string
+ if scenarioName == "" {
+ templateChart = "/templates/sandbox/" + chartName
+ outChart = "/data/" + sandboxName + "/sandbox/" + chartName
+ } else {
+ templateChart = "/templates/scenario/meep-virt-chart-templates"
+ outChart = "/data/" + sandboxName + "/scenario/" + scenarioName + "/" + chartName
+ }
+ templateValues := templateChart + "/values-template.yaml"
+ outValues := outChart + "/values.yaml"
- t, err := template.ParseFiles(templateFilePath)
+ // Create template object from template values file
+ t, err := template.ParseFiles(templateValues)
if err != nil {
log.Error(err)
return "", err
}
- outputDirPath := homePath + "/.meep/active/" + scenarioTemplate.NamespaceName + "/" + scenarioTemplate.Deployment.Name
- log.Debug("Creation of the output path ", outputDirPath)
-
- _ = CopyDir(templateDefaultDir, outputDirPath)
+ // Remove old chart if it already exists
+ if _, err := os.Stat(outChart); err == nil {
+ log.Debug("Removing old chart from path: ", outChart)
+ os.RemoveAll(outChart)
+ }
- outputFilePath := outputDirPath + "/values.yaml"
+ // Create new chart folder
+ log.Debug("Creation of the output chart path: ", outChart)
+ _ = CopyDir(templateChart, outChart)
- //creation of output file
- f, err := os.Create(outputFilePath)
+ // Create new chart values file
+ f, err := os.Create(outValues)
if err != nil {
log.Debug("create file: ", err)
return "", err
}
- //filling the template output file
- err = t.Execute(f, scenarioTemplate)
+ // Fill new chart values file using template data
+ err = t.Execute(f, templateData)
if err != nil {
log.Debug("execute: ", err)
return "", err
}
f.Close()
- return outputDirPath, nil
+ return outChart, nil
}
-func newChart(name string, chartLocation string, valuesFile string) helm.Chart {
+func newChart(chartName string, sandboxName string, scenarioName string, chartLocation string, valuesFile string) helm.Chart {
var chart helm.Chart
- chart.ChartName = name
- chart.ReleaseName = "meep-" + name
+
+ // Create release name by adding sandbox + scenario prefix
+ prefix := "meep-"
+ sandboxPrefix := prefix + sandboxName + "-"
+ if scenarioName == "" {
+ prefix := "meep-"
+ chart.ReleaseName = sandboxPrefix + chartName[len(prefix):]
+ } else {
+ chart.ReleaseName = sandboxPrefix + scenarioName + "-" + chartName
+ }
+
+ chart.Name = chartName
+ chart.Namespace = sandboxName
chart.Location = chartLocation
chart.ValuesFile = valuesFile
return chart
@@ -407,19 +437,8 @@ func addExtSelector(externalTemplate *ExternalTemplate, selector string) {
func getFullPath(path string) string {
fullPath := path
-
- // Get home directory
- usr, err := user.Current()
- if err != nil {
- return fullPath
- }
- homeDir := usr.HomeDir
-
- // Replace ~ with home directory
- if path == "~" {
- fullPath = homeDir
- } else if strings.HasPrefix(path, "~/") {
- fullPath = filepath.Join(homeDir, path[2:])
+ if path != "" && !strings.HasPrefix(path, "/") {
+ fullPath = filepath.Join("/data/user-charts/", path)
}
return fullPath
}
@@ -479,3 +498,58 @@ func setCommand(deployment *DeploymentTemplate, command string, commandArgs stri
}
}
}
+
+func generateSandboxCharts(sandboxName string) (charts []helm.Chart, err error) {
+
+ // Create Sandbox template
+ var sandboxTemplate SandboxTemplate
+ sandboxTemplate.SandboxName = sandboxName
+ sandboxTemplate.Namespace = sandboxName
+ sandboxTemplate.HostUrl = ve.hostUrl
+ sandboxTemplate.AltServer = ve.altServer
+
+ // Create sandbox charts
+ for pod := range ve.sboxPods {
+ var chartLocation string
+ chartLocation, err = createChart(pod, sandboxName, "", sandboxTemplate)
+ if err != nil {
+ return
+ }
+ // validate if there is user value override
+ userValueFile := "/user-values/" + pod + ".yaml"
+ if _, err := os.Stat(userValueFile); err != nil {
+ // path/to/file does not exists
+ // Note: according to https://helm.sh/docs/chart_template_guide/values_files/
+ // the order of precedence is: (lowest) default values.yaml
+ // then user value file
+ // then individual --set params (highest)
+ // Therefore, --set flags may interfere with user overrides
+ userValueFile = ""
+ }
+
+ chart := newChart(pod, sandboxName, "", chartLocation, userValueFile)
+ charts = append(charts, chart)
+ }
+
+ return charts, nil
+}
+
+func deploySandbox(name string) error {
+
+ // Create sandbox charts
+ charts, err := generateSandboxCharts(name)
+ if err != nil {
+ log.Debug("Error creating sandbox charts: ", err)
+ return err
+ }
+ log.Debug("Created ", len(charts), " sandbox charts")
+
+ // Deploy all charts
+ err = deployCharts(charts)
+ if err != nil {
+ log.Error("Error deploying charts: ", err)
+ return err
+ }
+
+ return nil
+}
diff --git a/go-apps/meep-virt-engine/server/virt-engine.go b/go-apps/meep-virt-engine/server/virt-engine.go
index ea8fea0483c9841370d4944d3701553f0a1f8dc9..b7ec1eb6577544a132ecf0f83c7ff0885314dc98 100644
--- a/go-apps/meep-virt-engine/server/virt-engine.go
+++ b/go-apps/meep-virt-engine/server/virt-engine.go
@@ -17,120 +17,274 @@
package server
import (
+ "errors"
"os"
"strings"
- "time"
"github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-virt-engine/helm"
log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
mod "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model"
- watchdog "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog"
+ mq "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq"
+ wd "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog"
)
+const redisAddr string = "meep-redis-master:6379"
+
+// const retryTimerDuration = 10000
+
const moduleName string = "meep-virt-engine"
-const redisAddr string = "localhost:30379"
-const retryTimerDuration = 10000
+const moduleNamespace string = "default"
+
+// MQ payload fields
+const fieldSandboxName = "sandbox-name"
+
+// const fieldScenarioName = "scenario-name"
-var watchdogClient *watchdog.Pingee
-var activeModel *mod.Model
-var activeScenarioName string
+type VirtEngine struct {
+ wdPinger *wd.Pinger
+ mqGlobal *mq.MsgQueue
+ activeModels map[string]*mod.Model
+ activeScenarioNames map[string]string
+ hostUrl string
+ altServer string
+ handlerId int
+ sboxPods map[string]string
+}
+
+var ve *VirtEngine
-// VirtEngineInit - Initialize virtualization engine
-func VirtEngineInit() (err error) {
+// Init - Initialize virtualization engine
+func Init() (err error) {
log.Debug("Initializing MEEP Virtualization Engine")
+ ve = new(VirtEngine)
+ ve.activeModels = make(map[string]*mod.Model)
+ ve.activeScenarioNames = make(map[string]string)
+
+ // Retrieve sandbox pods list from environment variable
+ ve.sboxPods = make(map[string]string)
+ sboxPodsStr := strings.TrimSpace(os.Getenv("MEEP_SANDBOX_PODS"))
+ log.Info("MEEP_SANDBOX_PODS: ", sboxPodsStr)
+ if sboxPodsStr != "" {
+ sboxPodsList := strings.Split(sboxPodsStr, ",")
+ for _, pod := range sboxPodsList {
+ ve.sboxPods[pod] = pod
+ }
+ }
+ if len(ve.sboxPods) == 0 {
+ err = errors.New("MEEP_SANDBOX_PODS env variable does not contain sbox pod list")
+ log.Error(err.Error())
+ return err
+ }
+
+ // Retrieve Host Name from environment variable
+ ve.hostUrl = strings.TrimSpace(os.Getenv("MEEP_HOST_URL"))
+ if ve.hostUrl == "" {
+ err = errors.New("MEEP_HOST_URL env variable not set")
+ log.Error(err.Error())
+ return err
+ }
+ log.Info("MEEP_HOST_URL: ", ve.hostUrl)
+
+ // Retrieve Alt Server from environment variable
+ ve.altServer = strings.TrimSpace(os.Getenv("MEEP_ALT_SERVER"))
+ if ve.altServer == "" {
+ err = errors.New("MEEP_ALT_SERVER variable not set")
+ log.Error(err.Error())
+ return err
+ }
+ log.Info("MEEP_ALT_SERVER: ", ve.altServer)
+
+ // Create message queue
+ ve.mqGlobal, err = mq.NewMsgQueue(mq.GetGlobalName(), moduleName, moduleNamespace, redisAddr)
+ if err != nil {
+ log.Error("Failed to create Message Queue with error: ", err)
+ return err
+ }
+ log.Info("Message Queue created")
// Setup for liveness monitoring
- watchdogClient, err = watchdog.NewPingee(redisAddr, "meep-virt-engine")
+ ve.wdPinger, err = wd.NewPinger(moduleName, moduleNamespace, redisAddr)
if err != nil {
log.Error("Failed to initialize pigner. Error: ", err)
return err
}
- err = watchdogClient.Start()
+ err = ve.wdPinger.Start()
if err != nil {
log.Error("Failed watchdog client listen. Error: ", err)
return err
}
- // Listen for model updates
- activeModel, err = mod.NewModel(redisAddr, moduleName, "activeScenario")
+ // TODO -- Initialize Virt Engine state here
+
+ return nil
+}
+
+// Run - Start Virt Engine execution
+func Run() (err error) {
+ log.Debug("Starting MEEP Virtualization Engine")
+
+ // Register Message Queue handler
+ handler := mq.MsgHandler{Handler: msgHandler, UserData: nil}
+ ve.handlerId, err = ve.mqGlobal.RegisterHandler(handler)
if err != nil {
- log.Error("Failed to create model: ", err.Error())
+ log.Error("Failed to listen for sandbox updates: ", err.Error())
return err
}
- err = activeModel.Listen(eventHandler)
- if err != nil {
- log.Error("Failed to listening for model updates: ", err.Error())
- }
return nil
}
-func eventHandler(channel string, payload string) {
- // Handle Message according to Rx Channel
- switch channel {
-
- // MEEP Ctrl Engine active scenario update event
- case mod.ActiveScenarioEvents:
- log.Debug("Event received on channel: ", channel, " payload: ", payload)
- processActiveScenarioUpdate(payload)
+// Message Queue handler
+func msgHandler(msg *mq.Msg, userData interface{}) {
+ switch msg.Message {
+ case mq.MsgSandboxCreate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ createSandbox(msg.Payload[fieldSandboxName])
+ case mq.MsgSandboxDestroy:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ destroySandbox(msg.Payload[fieldSandboxName])
+ case mq.MsgScenarioActivate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ activateScenario(msg.Payload[fieldSandboxName])
+ case mq.MsgScenarioTerminate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ terminateScenario(msg.Payload[fieldSandboxName])
default:
- log.Warn("Unsupported channel event: ", channel, " payload: ", payload)
+ log.Trace("Ignoring unsupported message: ", mq.PrintMsg(msg))
}
}
-func processActiveScenarioUpdate(event string) {
- if event == mod.EventTerminate {
-
- //process right away and start a ticker to retry until everything is deleted
- _, _ = terminateScenario(activeScenarioName)
+func activateScenario(sandboxName string) {
+ // Get sandbox-specific active model
+ activeModel := ve.activeModels[sandboxName]
+ if activeModel == nil {
+ log.Error("No active model for sandbox: ", sandboxName)
+ return
+ }
- //starts a ticker
- ticker := time.NewTicker(retryTimerDuration * time.Millisecond)
+ // Sync with active scenario store
+ activeModel.UpdateScenario()
- go func() {
- for range ticker.C {
+ // Cache name for later deletion
+ ve.activeScenarioNames[sandboxName] = activeModel.GetScenarioName()
- err, chartsToDelete := terminateScenario(activeScenarioName)
+ // Deploy scenario
+ err := Deploy(sandboxName, activeModel)
+ if err != nil {
+ log.Error("Error creating charts: ", err)
+ return
+ }
+}
- if err == nil && chartsToDelete == 0 {
- activeScenarioName = ""
- ticker.Stop()
- return
- } else {
- //stay in the deletion process until everything is cleared
- log.Info("Number of charts remaining to be deleted: ", chartsToDelete)
- }
- }
- }()
- } else if event == mod.EventActivate {
- // Cache name for later deletion
- activeScenarioName = activeModel.GetScenarioName()
- activateScenario()
- } else {
- log.Debug("Reveived event: ", event, " - Do nothing")
+func terminateScenario(sandboxName string) {
+ // Get sandbox-specific active model
+ activeModel := ve.activeModels[sandboxName]
+ if activeModel == nil {
+ log.Error("No active model for sandbox: ", sandboxName)
+ return
}
+
+ // Sync with active scenario store
+ activeModel.UpdateScenario()
+
+ // Get cached scenario name
+ scenarioName := ve.activeScenarioNames[sandboxName]
+
+ // Process right away and start a ticker to retry until everything is deleted
+ _, chartsToDelete := deleteReleases(sandboxName, scenarioName)
+ log.Info("Number of charts to be deleted: ", chartsToDelete)
+ ve.activeScenarioNames[sandboxName] = ""
+
+ // ticker := time.NewTicker(retryTimerDuration * time.Millisecond)
+
+ // go func() {
+ // for range ticker.C {
+ // err, chartsToDelete := deleteReleases(sandboxName, scenarioName)
+ // if err == nil && chartsToDelete == 0 {
+ // // Remove model & cached scenario
+ // ve.activeScenarioNames[sandboxName] = ""
+ // ticker.Stop()
+ // return
+ // } else {
+ // // Stay in the deletion process until everything is cleared
+ // log.Info("Number of charts remaining to be deleted: ", chartsToDelete)
+ // }
+ // }
+ // }()
}
-func activateScenario() {
- err := Deploy(activeModel)
+func createSandbox(sandboxName string) {
+ var err error
+
+ // Create new Model instance
+ modelCfg := mod.ModelCfg{
+ Name: moduleName,
+ Namespace: sandboxName,
+ Module: moduleName,
+ DbAddr: redisAddr,
+ UpdateCb: nil,
+ }
+ ve.activeModels[sandboxName], err = mod.NewModel(modelCfg)
if err != nil {
- log.Error("Error creating charts: ", err)
+ log.Error("Failed to create model: ", err.Error())
+ return
+ }
+
+ // Deploy sandbox
+ err = deploySandbox(sandboxName)
+ if err != nil {
+ log.Error("Error deploying sandbox: ", err)
return
}
}
-func terminateScenario(name string) (error, int) {
- if name == "" {
+func destroySandbox(sandboxName string) {
+ // Process right away and start a ticker to retry until everything is deleted
+ _, chartsToDelete := deleteReleases(sandboxName, "")
+ log.Info("Number of charts to be deleted: ", chartsToDelete)
+ ve.activeScenarioNames[sandboxName] = ""
+ ve.activeModels[sandboxName] = nil
+
+ // ticker := time.NewTicker(retryTimerDuration * time.Millisecond)
+
+ // go func() {
+ // for range ticker.C {
+ // err, chartsToDelete := deleteReleases(sandboxName, "")
+ // if err == nil && chartsToDelete == 0 {
+ // // Remove modle & cached scenario
+ // ve.activeScenarioNames[sandboxName] = ""
+ // ve.activeModels[sandboxName] = nil
+ // ticker.Stop()
+ // return
+ // } else {
+ // // Stay in the deletion process until everything is cleared
+ // log.Info("Number of charts remaining to be deleted: ", chartsToDelete)
+ // }
+ // }
+ // }()
+}
+
+func deleteReleases(sandboxName string, scenarioName string) (error, int) {
+ if sandboxName == "" {
return nil, 0
}
+
+ // Get chart prefix & path
+ path := "/data/" + sandboxName
+ releasePrefix := "meep-" + sandboxName + "-"
+ if scenarioName != "" {
+ path += "/scenario/"
+ releasePrefix += scenarioName + "-"
+ }
+
// Retrieve list of releases
chartsToDelete := 0
rels, err := helm.GetReleasesName()
if err == nil {
+ // Filter charts by sandbox & scenario names
var toDelete []helm.Chart
for _, rel := range rels {
- if strings.Contains(rel.Name, name) {
- // just keep releases related to the current scenario
+ if strings.HasPrefix(rel.Name, releasePrefix) {
var c helm.Chart
c.ReleaseName = rel.Name
toDelete = append(toDelete, c)
@@ -139,8 +293,8 @@ func terminateScenario(name string) (error, int) {
// Delete releases
chartsToDelete = len(toDelete)
-
if chartsToDelete > 0 {
+ log.Debug("Deleting [", chartsToDelete, "] charts with release prefix: ", releasePrefix)
err := helm.DeleteReleases(toDelete)
chartsToDelete = len(toDelete)
if err != nil {
@@ -149,10 +303,8 @@ func terminateScenario(name string) (error, int) {
}
// Then delete charts
- homePath := os.Getenv("HOME")
- path := homePath + "/.meep/active/" + name
if _, err := os.Stat(path); err == nil {
- log.Debug("Removing charts ", path)
+ log.Debug("Removing charts from path: ", path)
os.RemoveAll(path)
}
}
diff --git a/go-apps/meep-webhook/go.mod b/go-apps/meep-webhook/go.mod
index 66bd00f547752c7defd5431aad165dc969ac4be6..9e8fd6af7cecf551627162513544710165b3532a 100644
--- a/go-apps/meep-webhook/go.mod
+++ b/go-apps/meep-webhook/go.mod
@@ -4,15 +4,14 @@ go 1.12
require (
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger v0.0.0
- github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq v0.0.0
github.com/ghodss/yaml v1.0.0
k8s.io/api v0.0.0-20190430012547-97d6bb8ea5f4
k8s.io/apimachinery v0.0.0-20190430211124-5bae42371a56
)
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-model => ../../go-packages/meep-model
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq => ../../go-packages/meep-mq
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis => ../../go-packages/meep-redis
)
diff --git a/go-apps/meep-webhook/go.sum b/go-apps/meep-webhook/go.sum
index 25f3529eeac402684f8eed5aa17b360f03b664d9..b56be2278cbb5433547d580931aa8b7dc9b94fed 100644
--- a/go-apps/meep-webhook/go.sum
+++ b/go-apps/meep-webhook/go.sum
@@ -1,21 +1,10 @@
-github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db h1:Zkf5kwhxdW0xV7WM/crqIcOP5LCFGnAmumWSFAewJ74=
github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db/go.mod h1:RU+6d0CNIRSp6yo1mXLIIrnFa/3LHhvcDVLVJyovptM=
github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351 h1:1u1XrfCBnY+GijnyU6O1k4odp5TnqZQTsp5v7+n/E4Y=
github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351/go.mod h1:HxwfbuElTuGf+/uKZfjJrCnv0BmmpkPJDI7gBwj1KkM=
-github.com/RyanCarrier/dijkstra v0.0.0-20190726134004-b51cadb5ae52 h1:trnwuu/Q8T59kgRjXcSDBODnyZP9wes+bnLn0lx4PgM=
-github.com/RyanCarrier/dijkstra v0.0.0-20190726134004-b51cadb5ae52/go.mod h1:DdR6ymcLl8+sN/XOVNjnYO1NDYfgHskGjreZUDuQCTY=
-github.com/RyanCarrier/dijkstra-1 v0.0.0-20170512020943-0e5801a26345 h1:fgSpoKViTSqRb4hjDNj10ig5wUvO0CayCzFdLf6fuRM=
-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/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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
github.com/evanphx/json-patch v0.0.0-20190203023257-5858425f7550/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
-github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
@@ -24,48 +13,36 @@ github.com/go-redis/redis v6.15.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8w
github.com/gogo/protobuf v0.0.0-20171007142547-342cbe0a0415 h1:WSBJMqJbLxsn+bTCPyPYZfqHdJmc8MK4wrBjMft6BAM=
github.com/gogo/protobuf v0.0.0-20171007142547-342cbe0a0415/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf h1:+RRA9JqSOZFfKrOeqr2z77+8R2RKyh8PG66dcu1V0ck=
github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be h1:AHimNtVIpiBjPUhEF5KNCkrUyqTSA5zWUl8sQ2bfGBE=
github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
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=
-github.com/mattomatic/dijkstra v0.0.0-20130617153013-6f6d134eb237/go.mod h1:UOnLAUmVG5paym8pD3C4B9BQylUDC2vXFJJpT7JrlEA=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
-github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo=
github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/gomega v0.0.0-20190113212917-5533ce8a0da3 h1:EooPXg51Tn+xmWPXJUGCnJhJSpeuMlBmfJVcqIRmmv8=
github.com/onsi/gomega v0.0.0-20190113212917-5533ce8a0da3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME=
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
-github.com/spf13/pflag v1.0.1 h1:aCvUg6QPl3ibpQUxyLkrEkCHtPqYJL4x9AuhqVqFis4=
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190206173232-65e2d4e15006 h1:bfLnR+k0tq5Lqt6dflRLcZiz6UaXCMt3vhYJ1l4FQ80=
golang.org/x/net v0.0.0-20190206173232-65e2d4e15006/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -75,13 +52,10 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db h1:6/JqlYfC1CCaLnGceQTI+sDGhC9UBSPAsBqI0Gun6kU=
golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/inf.v0 v0.9.0 h1:3zYtXIO92bvsdS3ggAdA8Gb4Azj0YU+TVY1uGYNFA8o=
gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/go-apps/meep-webhook/main.go b/go-apps/meep-webhook/main.go
index 85aae5dc3c5b19d5f55a9a4eab35766cc5558d7f..b8116ee19f8f3977d27e7c58902a4206038903d1 100644
--- a/go-apps/meep-webhook/main.go
+++ b/go-apps/meep-webhook/main.go
@@ -29,24 +29,32 @@ import (
"syscall"
log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
- mod "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model"
+ mq "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq"
)
-var model *mod.Model
+const moduleName = "meep-webhook"
+const moduleNamespace = "default"
+
+var mqGlobal *mq.MsgQueue
+var handlerId int
+var activeScenarioNames map[string]string
func main() {
+ var err error
var parameters WhSvrParameters
// Initialize logging
log.MeepJSONLogInit("meep-webhook")
- // Listen for model updates
- var err error
- model, err = mod.NewModel(mod.DbAddress, "meep-webhook", "activeScenario")
+ activeScenarioNames = make(map[string]string)
+
+ // Create message queue
+ mqGlobal, err = mq.NewMsgQueue(mq.GetGlobalName(), moduleName, moduleNamespace, "")
if err != nil {
- log.Error("Failed to create model: ", err.Error())
+ log.Error("Failed to create Message Queue with error: ", err.Error())
return
}
+ log.Info("Message Queue created")
// get command line parameters
flag.IntVar(¶meters.port, "port", 443, "Webhook server port.")
@@ -81,10 +89,11 @@ func main() {
mux.HandleFunc("/mutate", whsvr.serve)
whsvr.server.Handler = mux
- // Start active model listener
- err = model.Listen(eventHandler)
+ // Register Message Queue handler
+ handler := mq.MsgHandler{Handler: msgHandler, UserData: nil}
+ handlerId, err = mqGlobal.RegisterHandler(handler)
if err != nil {
- log.Error("Unable to listen to model updates: ", err.Error())
+ log.Error("Failed to listen for scenario updates: ", err.Error())
return
}
diff --git a/go-apps/meep-webhook/webhook.go b/go-apps/meep-webhook/webhook.go
index 335d96305f6cdb4d0553982de05d474099bfe090..d763391a75c151e5f10f05c59f99c60b5b306a4e 100644
--- a/go-apps/meep-webhook/webhook.go
+++ b/go-apps/meep-webhook/webhook.go
@@ -19,13 +19,14 @@
package main
import (
- "bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
+ "strings"
log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
+ mq "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq"
"github.com/ghodss/yaml"
"k8s.io/api/admission/v1beta1"
@@ -39,8 +40,9 @@ import (
const meepOrigin = "scenario"
-// Active scenarion name
-var activeScenarioName string
+// MQ payload fields
+const fieldSandboxName = "sandbox-name"
+const fieldScenarioName = "scenario-name"
var (
runtimeScheme = runtime.NewScheme()
@@ -77,17 +79,17 @@ func init() {
_ = admissionregistrationv1beta1.AddToScheme(runtimeScheme)
}
-func eventHandler(channel string, payload string) {
- // Handle Message according to Rx Channel
- switch channel {
- // MEEP Ctrl Engine active scenario update Channel
- // case channelCtrlActive:
- case model.ActiveChannel:
- log.Debug("Event received on channel: ", model.ActiveChannel, " payload: ", payload)
- // processActiveScenarioUpdate()
- activeScenarioName = model.GetScenarioName()
+// Message Queue handler
+func msgHandler(msg *mq.Msg, userData interface{}) {
+ switch msg.Message {
+ case mq.MsgScenarioActivate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ activeScenarioNames[msg.Payload[fieldSandboxName]] = msg.Payload[fieldScenarioName]
+ case mq.MsgScenarioTerminate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ activeScenarioNames[msg.Payload[fieldSandboxName]] = ""
default:
- log.Warn("Unsupported channel", " payload: ", payload)
+ log.Trace("Ignoring unsupported message: ", mq.PrintMsg(msg))
}
}
@@ -103,22 +105,19 @@ func loadConfig(configFile string) (*Config, error) {
return &cfg, nil
}
-// Retrieve App Name from provided network element name string, if any
-func getAppName(name string) string {
- names := bytes.Split([]byte(name), []byte("meep-"+activeScenarioName+"-"))
- if len(names) != 2 {
- return ""
- }
- return string(names[1])
+// Determine if resource is part of the active scenario
+func isScenarioResource(name string, sandboxName string, scenarioName string) bool {
+ return name != "" && strings.HasPrefix(name, "meep-"+sandboxName+"-"+scenarioName+"-")
}
-func getSidecarPatch(template corev1.PodTemplateSpec, sidecarConfig *Config, meepAppName string) (patch []byte, err error) {
+func getSidecarPatch(template corev1.PodTemplateSpec, sidecarConfig *Config, meepAppName string, sandboxName string) (patch []byte, err error) {
// Apply labels
newLabels := make(map[string]string)
newLabels["meepApp"] = meepAppName
newLabels["meepOrigin"] = meepOrigin
- newLabels["meepScenario"] = activeScenarioName
+ newLabels["meepSandbox"] = sandboxName
+ newLabels["meepScenario"] = activeScenarioNames[sandboxName]
newLabels["processId"] = meepAppName
// Add environment variables to sidecar containers
@@ -127,8 +126,11 @@ func getSidecarPatch(template corev1.PodTemplateSpec, sidecarConfig *Config, mee
envVar.Name = "MEEP_POD_NAME"
envVar.Value = meepAppName
envVars = append(envVars, envVar)
+ envVar.Name = "MEEP_SANDBOX_NAME"
+ envVar.Value = sandboxName
+ envVars = append(envVars, envVar)
envVar.Name = "MEEP_SCENARIO_NAME"
- envVar.Value = activeScenarioName
+ envVar.Value = activeScenarioNames[sandboxName]
envVars = append(envVars, envVar)
var sidecarContainers []corev1.Container
@@ -217,7 +219,7 @@ func (whsvr *WebhookServer) mutate(ar *v1beta1.AdmissionReview) *v1beta1.Admissi
log.Info("Mutate request Name[", req.Name, "] Kind[", req.Kind, "] Namespace[", req.Namespace, "]")
// Ignore if no active scenario
- if activeScenarioName == "" {
+ if activeScenarioNames[req.Namespace] == "" {
log.Info("No active scenario. Ignoring request...")
return &v1beta1.AdmissionResponse{
Allowed: true,
@@ -226,6 +228,7 @@ func (whsvr *WebhookServer) mutate(ar *v1beta1.AdmissionReview) *v1beta1.Admissi
// Retrieve resource-specific information
var resourceName string
+ var releaseName string
var template corev1.PodTemplateSpec
switch req.Kind.Kind {
@@ -240,9 +243,10 @@ func (whsvr *WebhookServer) mutate(ar *v1beta1.AdmissionReview) *v1beta1.Admissi
},
}
}
- log.Info("Deployment Name: ", deployment.Name)
resourceName = deployment.Name
+ releaseName = deployment.Labels["release"]
template = deployment.Spec.Template
+ log.Info("Deployment Name: ", resourceName, " Release: ", releaseName)
case "StatefulSet":
// Unmarshal StatefulSet
@@ -255,9 +259,10 @@ func (whsvr *WebhookServer) mutate(ar *v1beta1.AdmissionReview) *v1beta1.Admissi
},
}
}
- log.Info("StatefulSet Name: ", statefulset.Name)
resourceName = statefulset.Name
+ releaseName = statefulset.Labels["release"]
template = statefulset.Spec.Template
+ log.Info("StatefulSet Name: ", resourceName, " Release: ", releaseName)
default:
log.Info("Unsupported admission request Kind[", req.Kind.Kind, "]")
@@ -266,18 +271,16 @@ func (whsvr *WebhookServer) mutate(ar *v1beta1.AdmissionReview) *v1beta1.Admissi
}
}
- // Retrieve App Name from resource name
- meepAppName := getAppName(resourceName)
- if meepAppName == "" {
+ // Determine if resource is part of the active scenario
+ if !isScenarioResource(releaseName, req.Namespace, activeScenarioNames[req.Namespace]) {
log.Info("Resource not part of active scenario. Ignoring request...")
return &v1beta1.AdmissionResponse{
Allowed: true,
}
}
- log.Info("MEEP App Name: ", meepAppName)
// Get sidecar patch
- patch, err := getSidecarPatch(template, whsvr.sidecarConfig, meepAppName)
+ patch, err := getSidecarPatch(template, whsvr.sidecarConfig, resourceName, req.Namespace)
if err != nil {
return &v1beta1.AdmissionResponse{
Result: &metav1.Status{
diff --git a/go-apps/meepctl/cmd/build.go b/go-apps/meepctl/cmd/build.go
index 412e563269d7ae9dc8b7b718301bd9622bc4f48b..4597e306b778fff47066c00ef237eb94416cd239 100644
--- a/go-apps/meepctl/cmd/build.go
+++ b/go-apps/meepctl/cmd/build.go
@@ -20,6 +20,7 @@ import (
"fmt"
"os"
"os/exec"
+ "sort"
"strings"
"time"
@@ -29,122 +30,161 @@ import (
"github.com/spf13/cobra"
)
-var buildCodecov bool
-var buildNolint bool
+type BuildData struct {
+ codecov bool
+ nolint bool
+ coreGoApps []string
+ coreJsApps []string
+ sandboxGoApps []string
+}
-// buildCmd represents the build command
-var buildCmd = &cobra.Command{
- Use: "build
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
- *
- * API version: 1.0.0
- * Contact: AdvantEDGE@InterDigital.com
- * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
- */
-
-package client
-
-import (
- "context"
- "io/ioutil"
- "net/http"
- "net/url"
- "strings"
-
- "github.com/antihax/optional"
-)
-
-// Linger please
-var (
- _ context.Context
-)
-
-type PodStatesApiService service
-
-/*
-PodStatesApiService Get pods states
-Get status information of Core micro-services pods and Scenario pods
- * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
- * @param optional nil or *GetStatesOpts - Optional Parameters:
- * @param "Long" (optional.String) - Enables detailed stats if true
- * @param "Type_" (optional.String) - Pod type
-
-@return PodsStatus
-*/
-
-type GetStatesOpts struct {
- Long optional.String
- Type_ optional.String
-}
-
-func (a *PodStatesApiService) GetStates(ctx context.Context, localVarOptionals *GetStatesOpts) (PodsStatus, *http.Response, error) {
- var (
- localVarHttpMethod = strings.ToUpper("Get")
- localVarPostBody interface{}
- localVarFileName string
- localVarFileBytes []byte
- localVarReturnValue PodsStatus
- )
-
- // create path and map variables
- localVarPath := a.client.cfg.BasePath + "/states"
-
- localVarHeaderParams := make(map[string]string)
- localVarQueryParams := url.Values{}
- localVarFormParams := url.Values{}
-
- if localVarOptionals != nil && localVarOptionals.Long.IsSet() {
- localVarQueryParams.Add("long", parameterToString(localVarOptionals.Long.Value(), ""))
- }
- if localVarOptionals != nil && localVarOptionals.Type_.IsSet() {
- localVarQueryParams.Add("type", parameterToString(localVarOptionals.Type_.Value(), ""))
- }
- // to determine the Content-Type header
- localVarHttpContentTypes := []string{"application/json"}
-
- // set Content-Type header
- localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
- if localVarHttpContentType != "" {
- localVarHeaderParams["Content-Type"] = localVarHttpContentType
- }
-
- // to determine the Accept header
- localVarHttpHeaderAccepts := []string{"application/json"}
-
- // set Accept header
- localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
- if localVarHttpHeaderAccept != "" {
- localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
- }
- r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
- if err != nil {
- return localVarReturnValue, nil, err
- }
-
- localVarHttpResponse, err := a.client.callAPI(r)
- if err != nil || localVarHttpResponse == nil {
- return localVarReturnValue, localVarHttpResponse, err
- }
-
- localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
- localVarHttpResponse.Body.Close()
- if err != nil {
- return localVarReturnValue, localVarHttpResponse, err
- }
-
- if localVarHttpResponse.StatusCode < 300 {
- // If we succeed, return the data, otherwise pass on to decode error.
- err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
- if err == nil {
- return localVarReturnValue, localVarHttpResponse, err
- }
- }
-
- if localVarHttpResponse.StatusCode >= 300 {
- newErr := GenericSwaggerError{
- body: localVarBody,
- error: localVarHttpResponse.Status,
- }
-
- if localVarHttpResponse.StatusCode == 200 {
- var v PodsStatus
- err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
- if err != nil {
- newErr.error = err.Error()
- return localVarReturnValue, localVarHttpResponse, newErr
- }
- newErr.model = v
- return localVarReturnValue, localVarHttpResponse, newErr
- }
-
- return localVarReturnValue, localVarHttpResponse, newErr
- }
-
- return localVarReturnValue, localVarHttpResponse, nil
-}
diff --git a/go-packages/meep-ctrl-engine-client/api_scenario_configuration.go b/go-packages/meep-ctrl-engine-client/api_scenario_configuration.go
deleted file mode 100644
index 61c9dd90c599157da1e1d69faae467fcfd8309a3..0000000000000000000000000000000000000000
--- a/go-packages/meep-ctrl-engine-client/api_scenario_configuration.go
+++ /dev/null
@@ -1,497 +0,0 @@
-/*
- * Copyright (c) 2019 InterDigital Communications, Inc
- *
- * Licensed under the Apache License, Version 2.0 (the \"License\");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an \"AS IS\" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * AdvantEDGE Platform Controller REST API
- *
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
- *
- * API version: 1.0.0
- * Contact: AdvantEDGE@InterDigital.com
- * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
- */
-
-package client
-
-import (
- "context"
- "fmt"
- "io/ioutil"
- "net/http"
- "net/url"
- "strings"
-)
-
-// Linger please
-var (
- _ context.Context
-)
-
-type ScenarioConfigurationApiService service
-
-/*
-ScenarioConfigurationApiService Add a scenario
-Add a scenario to the platform scenario store
- * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
- * @param name Scenario name
- * @param scenario Scenario
-
-
-*/
-func (a *ScenarioConfigurationApiService) CreateScenario(ctx context.Context, name string, scenario Scenario) (*http.Response, error) {
- var (
- localVarHttpMethod = strings.ToUpper("Post")
- localVarPostBody interface{}
- localVarFileName string
- localVarFileBytes []byte
- )
-
- // create path and map variables
- localVarPath := a.client.cfg.BasePath + "/scenarios/{name}"
- localVarPath = strings.Replace(localVarPath, "{"+"name"+"}", fmt.Sprintf("%v", name), -1)
-
- localVarHeaderParams := make(map[string]string)
- localVarQueryParams := url.Values{}
- localVarFormParams := url.Values{}
-
- // to determine the Content-Type header
- localVarHttpContentTypes := []string{"application/json"}
-
- // set Content-Type header
- localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
- if localVarHttpContentType != "" {
- localVarHeaderParams["Content-Type"] = localVarHttpContentType
- }
-
- // to determine the Accept header
- localVarHttpHeaderAccepts := []string{"application/json"}
-
- // set Accept header
- localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
- if localVarHttpHeaderAccept != "" {
- localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
- }
- // body params
- localVarPostBody = &scenario
- r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
- if err != nil {
- return nil, err
- }
-
- localVarHttpResponse, err := a.client.callAPI(r)
- if err != nil || localVarHttpResponse == nil {
- return localVarHttpResponse, err
- }
-
- localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
- localVarHttpResponse.Body.Close()
- if err != nil {
- return localVarHttpResponse, err
- }
-
- if localVarHttpResponse.StatusCode >= 300 {
- newErr := GenericSwaggerError{
- body: localVarBody,
- error: localVarHttpResponse.Status,
- }
-
- return localVarHttpResponse, newErr
- }
-
- return localVarHttpResponse, nil
-}
-
-/*
-ScenarioConfigurationApiService Delete a scenario
-Delete a scenario by name from the platform scenario store
- * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
- * @param name Scenario name
-
-
-*/
-func (a *ScenarioConfigurationApiService) DeleteScenario(ctx context.Context, name string) (*http.Response, error) {
- var (
- localVarHttpMethod = strings.ToUpper("Delete")
- localVarPostBody interface{}
- localVarFileName string
- localVarFileBytes []byte
- )
-
- // create path and map variables
- localVarPath := a.client.cfg.BasePath + "/scenarios/{name}"
- localVarPath = strings.Replace(localVarPath, "{"+"name"+"}", fmt.Sprintf("%v", name), -1)
-
- localVarHeaderParams := make(map[string]string)
- localVarQueryParams := url.Values{}
- localVarFormParams := url.Values{}
-
- // to determine the Content-Type header
- localVarHttpContentTypes := []string{"application/json"}
-
- // set Content-Type header
- localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
- if localVarHttpContentType != "" {
- localVarHeaderParams["Content-Type"] = localVarHttpContentType
- }
-
- // to determine the Accept header
- localVarHttpHeaderAccepts := []string{"application/json"}
-
- // set Accept header
- localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
- if localVarHttpHeaderAccept != "" {
- localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
- }
- r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
- if err != nil {
- return nil, err
- }
-
- localVarHttpResponse, err := a.client.callAPI(r)
- if err != nil || localVarHttpResponse == nil {
- return localVarHttpResponse, err
- }
-
- localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
- localVarHttpResponse.Body.Close()
- if err != nil {
- return localVarHttpResponse, err
- }
-
- if localVarHttpResponse.StatusCode >= 300 {
- newErr := GenericSwaggerError{
- body: localVarBody,
- error: localVarHttpResponse.Status,
- }
-
- return localVarHttpResponse, newErr
- }
-
- return localVarHttpResponse, nil
-}
-
-/*
-ScenarioConfigurationApiService Delete all scenarios
-Delete all scenarios present in the platform scenario store
- * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
-
-
-*/
-func (a *ScenarioConfigurationApiService) DeleteScenarioList(ctx context.Context) (*http.Response, error) {
- var (
- localVarHttpMethod = strings.ToUpper("Delete")
- localVarPostBody interface{}
- localVarFileName string
- localVarFileBytes []byte
- )
-
- // create path and map variables
- localVarPath := a.client.cfg.BasePath + "/scenarios"
-
- localVarHeaderParams := make(map[string]string)
- localVarQueryParams := url.Values{}
- localVarFormParams := url.Values{}
-
- // to determine the Content-Type header
- localVarHttpContentTypes := []string{"application/json"}
-
- // set Content-Type header
- localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
- if localVarHttpContentType != "" {
- localVarHeaderParams["Content-Type"] = localVarHttpContentType
- }
-
- // to determine the Accept header
- localVarHttpHeaderAccepts := []string{"application/json"}
-
- // set Accept header
- localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
- if localVarHttpHeaderAccept != "" {
- localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
- }
- r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
- if err != nil {
- return nil, err
- }
-
- localVarHttpResponse, err := a.client.callAPI(r)
- if err != nil || localVarHttpResponse == nil {
- return localVarHttpResponse, err
- }
-
- localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
- localVarHttpResponse.Body.Close()
- if err != nil {
- return localVarHttpResponse, err
- }
-
- if localVarHttpResponse.StatusCode >= 300 {
- newErr := GenericSwaggerError{
- body: localVarBody,
- error: localVarHttpResponse.Status,
- }
-
- return localVarHttpResponse, newErr
- }
-
- return localVarHttpResponse, nil
-}
-
-/*
-ScenarioConfigurationApiService Get a specific scenario
-Get a scenario by name from the platform scenario store
- * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
- * @param name Scenario name
-
-@return Scenario
-*/
-func (a *ScenarioConfigurationApiService) GetScenario(ctx context.Context, name string) (Scenario, *http.Response, error) {
- var (
- localVarHttpMethod = strings.ToUpper("Get")
- localVarPostBody interface{}
- localVarFileName string
- localVarFileBytes []byte
- localVarReturnValue Scenario
- )
-
- // create path and map variables
- localVarPath := a.client.cfg.BasePath + "/scenarios/{name}"
- localVarPath = strings.Replace(localVarPath, "{"+"name"+"}", fmt.Sprintf("%v", name), -1)
-
- localVarHeaderParams := make(map[string]string)
- localVarQueryParams := url.Values{}
- localVarFormParams := url.Values{}
-
- // to determine the Content-Type header
- localVarHttpContentTypes := []string{"application/json"}
-
- // set Content-Type header
- localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
- if localVarHttpContentType != "" {
- localVarHeaderParams["Content-Type"] = localVarHttpContentType
- }
-
- // to determine the Accept header
- localVarHttpHeaderAccepts := []string{"application/json"}
-
- // set Accept header
- localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
- if localVarHttpHeaderAccept != "" {
- localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
- }
- r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
- if err != nil {
- return localVarReturnValue, nil, err
- }
-
- localVarHttpResponse, err := a.client.callAPI(r)
- if err != nil || localVarHttpResponse == nil {
- return localVarReturnValue, localVarHttpResponse, err
- }
-
- localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
- localVarHttpResponse.Body.Close()
- if err != nil {
- return localVarReturnValue, localVarHttpResponse, err
- }
-
- if localVarHttpResponse.StatusCode < 300 {
- // If we succeed, return the data, otherwise pass on to decode error.
- err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
- if err == nil {
- return localVarReturnValue, localVarHttpResponse, err
- }
- }
-
- if localVarHttpResponse.StatusCode >= 300 {
- newErr := GenericSwaggerError{
- body: localVarBody,
- error: localVarHttpResponse.Status,
- }
-
- if localVarHttpResponse.StatusCode == 200 {
- var v Scenario
- err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
- if err != nil {
- newErr.error = err.Error()
- return localVarReturnValue, localVarHttpResponse, newErr
- }
- newErr.model = v
- return localVarReturnValue, localVarHttpResponse, newErr
- }
-
- return localVarReturnValue, localVarHttpResponse, newErr
- }
-
- return localVarReturnValue, localVarHttpResponse, nil
-}
-
-/*
-ScenarioConfigurationApiService Get all scenarios
-Returns all scenarios from the platform scenario store
- * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
-
-@return ScenarioList
-*/
-func (a *ScenarioConfigurationApiService) GetScenarioList(ctx context.Context) (ScenarioList, *http.Response, error) {
- var (
- localVarHttpMethod = strings.ToUpper("Get")
- localVarPostBody interface{}
- localVarFileName string
- localVarFileBytes []byte
- localVarReturnValue ScenarioList
- )
-
- // create path and map variables
- localVarPath := a.client.cfg.BasePath + "/scenarios"
-
- localVarHeaderParams := make(map[string]string)
- localVarQueryParams := url.Values{}
- localVarFormParams := url.Values{}
-
- // to determine the Content-Type header
- localVarHttpContentTypes := []string{"application/json"}
-
- // set Content-Type header
- localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
- if localVarHttpContentType != "" {
- localVarHeaderParams["Content-Type"] = localVarHttpContentType
- }
-
- // to determine the Accept header
- localVarHttpHeaderAccepts := []string{"application/json"}
-
- // set Accept header
- localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
- if localVarHttpHeaderAccept != "" {
- localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
- }
- r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
- if err != nil {
- return localVarReturnValue, nil, err
- }
-
- localVarHttpResponse, err := a.client.callAPI(r)
- if err != nil || localVarHttpResponse == nil {
- return localVarReturnValue, localVarHttpResponse, err
- }
-
- localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
- localVarHttpResponse.Body.Close()
- if err != nil {
- return localVarReturnValue, localVarHttpResponse, err
- }
-
- if localVarHttpResponse.StatusCode < 300 {
- // If we succeed, return the data, otherwise pass on to decode error.
- err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
- if err == nil {
- return localVarReturnValue, localVarHttpResponse, err
- }
- }
-
- if localVarHttpResponse.StatusCode >= 300 {
- newErr := GenericSwaggerError{
- body: localVarBody,
- error: localVarHttpResponse.Status,
- }
-
- if localVarHttpResponse.StatusCode == 200 {
- var v ScenarioList
- err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
- if err != nil {
- newErr.error = err.Error()
- return localVarReturnValue, localVarHttpResponse, newErr
- }
- newErr.model = v
- return localVarReturnValue, localVarHttpResponse, newErr
- }
-
- return localVarReturnValue, localVarHttpResponse, newErr
- }
-
- return localVarReturnValue, localVarHttpResponse, nil
-}
-
-/*
-ScenarioConfigurationApiService Update a scenario
-Update a scenario by name in the platform scenario store
- * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
- * @param name Scenario name
- * @param scenario Scenario to add to MEEP store
-
-
-*/
-func (a *ScenarioConfigurationApiService) SetScenario(ctx context.Context, name string, scenario Scenario) (*http.Response, error) {
- var (
- localVarHttpMethod = strings.ToUpper("Put")
- localVarPostBody interface{}
- localVarFileName string
- localVarFileBytes []byte
- )
-
- // create path and map variables
- localVarPath := a.client.cfg.BasePath + "/scenarios/{name}"
- localVarPath = strings.Replace(localVarPath, "{"+"name"+"}", fmt.Sprintf("%v", name), -1)
-
- localVarHeaderParams := make(map[string]string)
- localVarQueryParams := url.Values{}
- localVarFormParams := url.Values{}
-
- // to determine the Content-Type header
- localVarHttpContentTypes := []string{"application/json"}
-
- // set Content-Type header
- localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
- if localVarHttpContentType != "" {
- localVarHeaderParams["Content-Type"] = localVarHttpContentType
- }
-
- // to determine the Accept header
- localVarHttpHeaderAccepts := []string{"application/json"}
-
- // set Accept header
- localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
- if localVarHttpHeaderAccept != "" {
- localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
- }
- // body params
- localVarPostBody = &scenario
- r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
- if err != nil {
- return nil, err
- }
-
- localVarHttpResponse, err := a.client.callAPI(r)
- if err != nil || localVarHttpResponse == nil {
- return localVarHttpResponse, err
- }
-
- localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
- localVarHttpResponse.Body.Close()
- if err != nil {
- return localVarHttpResponse, err
- }
-
- if localVarHttpResponse.StatusCode >= 300 {
- newErr := GenericSwaggerError{
- body: localVarBody,
- error: localVarHttpResponse.Status,
- }
-
- return localVarHttpResponse, newErr
- }
-
- return localVarHttpResponse, nil
-}
diff --git a/go-packages/meep-ctrl-engine-client/docs/Deployment.md b/go-packages/meep-ctrl-engine-client/docs/Deployment.md
deleted file mode 100644
index 6303780b4c28e8a7b2d84dc65f951f219aad771b..0000000000000000000000000000000000000000
--- a/go-packages/meep-ctrl-engine-client/docs/Deployment.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# Deployment
-
-## Properties
-Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
-**InterDomainLatency** | **int32** | Latency in ms between domains | [optional] [default to null]
-**InterDomainLatencyVariation** | **int32** | Latency variation in ms between domains | [optional] [default to null]
-**InterDomainThroughput** | **int32** | The limit of the traffic supported between domains | [optional] [default to null]
-**InterDomainPacketLoss** | **float64** | Packet lost (in terms of percentage) between domains | [optional] [default to null]
-**Meta** | **map[string]string** | Key/Value Pair Map (string, string) | [optional] [default to null]
-**UserMeta** | **map[string]string** | Key/Value Pair Map (string, string) | [optional] [default to null]
-**Domains** | [**[]Domain**](Domain.md) | | [optional] [default to null]
-
-[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
-
-
diff --git a/go-packages/meep-ctrl-engine-client/docs/Domain.md b/go-packages/meep-ctrl-engine-client/docs/Domain.md
deleted file mode 100644
index 894e9f0cffe176e1b6c17915a51ab758ab7f6e53..0000000000000000000000000000000000000000
--- a/go-packages/meep-ctrl-engine-client/docs/Domain.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# Domain
-
-## Properties
-Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
-**Id** | **string** | Unique domain ID | [optional] [default to null]
-**Name** | **string** | Domain name | [optional] [default to null]
-**Type_** | **string** | Domain type | [optional] [default to null]
-**InterZoneLatency** | **int32** | Latency in ms between zones within domain | [optional] [default to null]
-**InterZoneLatencyVariation** | **int32** | Latency variation in ms between zones within domain | [optional] [default to null]
-**InterZoneThroughput** | **int32** | The limit of the traffic supported between zones within the domain | [optional] [default to null]
-**InterZonePacketLoss** | **float64** | Packet lost (in terms of percentage) between zones within the domain | [optional] [default to null]
-**Meta** | **map[string]string** | Key/Value Pair Map (string, string) | [optional] [default to null]
-**UserMeta** | **map[string]string** | Key/Value Pair Map (string, string) | [optional] [default to null]
-**Zones** | [**[]Zone**](Zone.md) | | [optional] [default to null]
-
-[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
-
-
diff --git a/go-packages/meep-ctrl-engine-client/docs/NetworkCharacteristics.md b/go-packages/meep-ctrl-engine-client/docs/NetworkCharacteristics.md
deleted file mode 100644
index aee03bec646b7e6f37127bae3c468fa1aec3efd2..0000000000000000000000000000000000000000
--- a/go-packages/meep-ctrl-engine-client/docs/NetworkCharacteristics.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# NetworkCharacteristics
-
-## Properties
-Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
-**Latency** | **int32** | Latency in ms | [optional] [default to null]
-**LatencyVariation** | **int32** | Latency variation in ms | [optional] [default to null]
-**Throughput** | **int32** | Throughput limit in Mbps | [optional] [default to null]
-**PacketLoss** | **float64** | Packet loss percentage | [optional] [default to null]
-
-[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
-
-
diff --git a/go-packages/meep-ctrl-engine-client/docs/PodStatesApi.md b/go-packages/meep-ctrl-engine-client/docs/PodStatesApi.md
deleted file mode 100644
index 4db45dac163ab39979e68bda8008fb2b9a3a1972..0000000000000000000000000000000000000000
--- a/go-packages/meep-ctrl-engine-client/docs/PodStatesApi.md
+++ /dev/null
@@ -1,45 +0,0 @@
-# \PodStatesApi
-
-All URIs are relative to *http://localhost/v1*
-
-Method | HTTP request | Description
-------------- | ------------- | -------------
-[**GetStates**](PodStatesApi.md#GetStates) | **Get** /states | Get pods states
-
-
-# **GetStates**
-> PodsStatus GetStates(ctx, optional)
-Get pods states
-
-Get status information of Core micro-services pods and Scenario pods
-
-### Required Parameters
-
-Name | Type | Description | Notes
-------------- | ------------- | ------------- | -------------
- **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
- **optional** | ***GetStatesOpts** | optional parameters | nil if no parameters
-
-### Optional Parameters
-Optional parameters are passed through a pointer to a GetStatesOpts struct
-
-Name | Type | Description | Notes
-------------- | ------------- | ------------- | -------------
- **long** | **optional.String**| Enables detailed stats if true |
- **type_** | **optional.String**| Pod type |
-
-### Return type
-
-[**PodsStatus**](PodsStatus.md)
-
-### Authorization
-
-No authorization required
-
-### HTTP request headers
-
- - **Content-Type**: application/json
- - **Accept**: application/json
-
-[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
-
diff --git a/go-packages/meep-ctrl-engine-client/docs/PodStatus.md b/go-packages/meep-ctrl-engine-client/docs/PodStatus.md
deleted file mode 100644
index a23be3ed2cf7929fa24d25aa52531d66d17a6a46..0000000000000000000000000000000000000000
--- a/go-packages/meep-ctrl-engine-client/docs/PodStatus.md
+++ /dev/null
@@ -1,26 +0,0 @@
-# PodStatus
-
-## Properties
-Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
-**Name** | **string** | Pod name | [optional] [default to null]
-**Namespace** | **string** | Pod namespace | [optional] [default to null]
-**MeepApp** | **string** | Pod process name | [optional] [default to null]
-**MeepOrigin** | **string** | Pod origin(core, scenario) | [optional] [default to null]
-**MeepScenario** | **string** | Pod scenario name | [optional] [default to null]
-**Phase** | **string** | Pod phase | [optional] [default to null]
-**PodInitialized** | **string** | Pod initialized (true/false) | [optional] [default to null]
-**PodReady** | **string** | Pod ready (true/false) | [optional] [default to null]
-**PodScheduled** | **string** | Pod scheduled (true/false) | [optional] [default to null]
-**PodUnschedulable** | **string** | Pod unschedulable (true/false) | [optional] [default to null]
-**PodConditionError** | **string** | Pod error message | [optional] [default to null]
-**ContainerStatusesMsg** | **string** | Failed container error message | [optional] [default to null]
-**NbOkContainers** | **string** | Number of containers that are up | [optional] [default to null]
-**NbTotalContainers** | **string** | Number of total containers in the pod | [optional] [default to null]
-**NbPodRestart** | **string** | Number of container failures leading to pod restarts | [optional] [default to null]
-**LogicalState** | **string** | State that is mapping the kubernetes api state | [optional] [default to null]
-**StartTime** | **string** | Pod creation time | [optional] [default to null]
-
-[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
-
-
diff --git a/go-packages/meep-ctrl-engine-client/docs/ScenarioConfigurationApi.md b/go-packages/meep-ctrl-engine-client/docs/ScenarioConfigurationApi.md
deleted file mode 100644
index a28e37819ac19c6a8954e3911c1a05111e88f981..0000000000000000000000000000000000000000
--- a/go-packages/meep-ctrl-engine-client/docs/ScenarioConfigurationApi.md
+++ /dev/null
@@ -1,176 +0,0 @@
-# \ScenarioConfigurationApi
-
-All URIs are relative to *http://localhost/v1*
-
-Method | HTTP request | Description
-------------- | ------------- | -------------
-[**CreateScenario**](ScenarioConfigurationApi.md#CreateScenario) | **Post** /scenarios/{name} | Add a scenario
-[**DeleteScenario**](ScenarioConfigurationApi.md#DeleteScenario) | **Delete** /scenarios/{name} | Delete a scenario
-[**DeleteScenarioList**](ScenarioConfigurationApi.md#DeleteScenarioList) | **Delete** /scenarios | Delete all scenarios
-[**GetScenario**](ScenarioConfigurationApi.md#GetScenario) | **Get** /scenarios/{name} | Get a specific scenario
-[**GetScenarioList**](ScenarioConfigurationApi.md#GetScenarioList) | **Get** /scenarios | Get all scenarios
-[**SetScenario**](ScenarioConfigurationApi.md#SetScenario) | **Put** /scenarios/{name} | Update a scenario
-
-
-# **CreateScenario**
-> CreateScenario(ctx, name, scenario)
-Add a scenario
-
-Add a scenario to the platform scenario store
-
-### Required Parameters
-
-Name | Type | Description | Notes
-------------- | ------------- | ------------- | -------------
- **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
- **name** | **string**| Scenario name |
- **scenario** | [**Scenario**](Scenario.md)| Scenario |
-
-### Return type
-
- (empty response body)
-
-### Authorization
-
-No authorization required
-
-### HTTP request headers
-
- - **Content-Type**: application/json
- - **Accept**: application/json
-
-[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
-
-# **DeleteScenario**
-> DeleteScenario(ctx, name)
-Delete a scenario
-
-Delete a scenario by name from the platform scenario store
-
-### Required Parameters
-
-Name | Type | Description | Notes
-------------- | ------------- | ------------- | -------------
- **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
- **name** | **string**| Scenario name |
-
-### Return type
-
- (empty response body)
-
-### Authorization
-
-No authorization required
-
-### HTTP request headers
-
- - **Content-Type**: application/json
- - **Accept**: application/json
-
-[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
-
-# **DeleteScenarioList**
-> DeleteScenarioList(ctx, )
-Delete all scenarios
-
-Delete all scenarios present in the platform scenario store
-
-### Required Parameters
-This endpoint does not need any parameter.
-
-### Return type
-
- (empty response body)
-
-### Authorization
-
-No authorization required
-
-### HTTP request headers
-
- - **Content-Type**: application/json
- - **Accept**: application/json
-
-[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
-
-# **GetScenario**
-> Scenario GetScenario(ctx, name)
-Get a specific scenario
-
-Get a scenario by name from the platform scenario store
-
-### Required Parameters
-
-Name | Type | Description | Notes
-------------- | ------------- | ------------- | -------------
- **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
- **name** | **string**| Scenario name |
-
-### Return type
-
-[**Scenario**](Scenario.md)
-
-### Authorization
-
-No authorization required
-
-### HTTP request headers
-
- - **Content-Type**: application/json
- - **Accept**: application/json
-
-[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
-
-# **GetScenarioList**
-> ScenarioList GetScenarioList(ctx, )
-Get all scenarios
-
-Returns all scenarios from the platform scenario store
-
-### Required Parameters
-This endpoint does not need any parameter.
-
-### Return type
-
-[**ScenarioList**](ScenarioList.md)
-
-### Authorization
-
-No authorization required
-
-### HTTP request headers
-
- - **Content-Type**: application/json
- - **Accept**: application/json
-
-[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
-
-# **SetScenario**
-> SetScenario(ctx, name, scenario)
-Update a scenario
-
-Update a scenario by name in the platform scenario store
-
-### Required Parameters
-
-Name | Type | Description | Notes
-------------- | ------------- | ------------- | -------------
- **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
- **name** | **string**| Scenario name |
- **scenario** | [**Scenario**](Scenario.md)| Scenario to add to MEEP store |
-
-### Return type
-
- (empty response body)
-
-### Authorization
-
-No authorization required
-
-### HTTP request headers
-
- - **Content-Type**: application/json
- - **Accept**: application/json
-
-[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
-
diff --git a/go-packages/meep-ctrl-engine-client/go.mod b/go-packages/meep-ctrl-engine-client/go.mod
deleted file mode 100644
index bb0905f92e336c723353e505c4253d7dd3b95c2f..0000000000000000000000000000000000000000
--- a/go-packages/meep-ctrl-engine-client/go.mod
+++ /dev/null
@@ -1,9 +0,0 @@
-module github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-client
-
-go 1.12
-
-require (
- github.com/antihax/optional v1.0.0
- golang.org/x/net v0.0.0-20190415100556-4a65cf94b679
- golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a
-)
diff --git a/go-packages/meep-ctrl-engine-client/model_network_characteristics.go b/go-packages/meep-ctrl-engine-client/model_network_characteristics.go
deleted file mode 100644
index 90df6299e88225f3f58f63e72ee98de7ea91b1bd..0000000000000000000000000000000000000000
--- a/go-packages/meep-ctrl-engine-client/model_network_characteristics.go
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2019 InterDigital Communications, Inc
- *
- * Licensed under the Apache License, Version 2.0 (the \"License\");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an \"AS IS\" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * AdvantEDGE Platform Controller REST API
- *
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
- *
- * API version: 1.0.0
- * Contact: AdvantEDGE@InterDigital.com
- * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
- */
-
-package client
-
-// Network characteristics object
-type NetworkCharacteristics struct {
- // Latency in ms
- Latency int32 `json:"latency,omitempty"`
- // Latency variation in ms
- LatencyVariation int32 `json:"latencyVariation,omitempty"`
- // Throughput limit in Mbps
- Throughput int32 `json:"throughput,omitempty"`
- // Packet loss percentage
- PacketLoss float64 `json:"packetLoss,omitempty"`
-}
diff --git a/go-packages/meep-ctrl-engine-model/docs/Deployment.md b/go-packages/meep-ctrl-engine-model/docs/Deployment.md
deleted file mode 100644
index 6303780b4c28e8a7b2d84dc65f951f219aad771b..0000000000000000000000000000000000000000
--- a/go-packages/meep-ctrl-engine-model/docs/Deployment.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# Deployment
-
-## Properties
-Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
-**InterDomainLatency** | **int32** | Latency in ms between domains | [optional] [default to null]
-**InterDomainLatencyVariation** | **int32** | Latency variation in ms between domains | [optional] [default to null]
-**InterDomainThroughput** | **int32** | The limit of the traffic supported between domains | [optional] [default to null]
-**InterDomainPacketLoss** | **float64** | Packet lost (in terms of percentage) between domains | [optional] [default to null]
-**Meta** | **map[string]string** | Key/Value Pair Map (string, string) | [optional] [default to null]
-**UserMeta** | **map[string]string** | Key/Value Pair Map (string, string) | [optional] [default to null]
-**Domains** | [**[]Domain**](Domain.md) | | [optional] [default to null]
-
-[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
-
-
diff --git a/go-packages/meep-ctrl-engine-model/docs/Domain.md b/go-packages/meep-ctrl-engine-model/docs/Domain.md
deleted file mode 100644
index 894e9f0cffe176e1b6c17915a51ab758ab7f6e53..0000000000000000000000000000000000000000
--- a/go-packages/meep-ctrl-engine-model/docs/Domain.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# Domain
-
-## Properties
-Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
-**Id** | **string** | Unique domain ID | [optional] [default to null]
-**Name** | **string** | Domain name | [optional] [default to null]
-**Type_** | **string** | Domain type | [optional] [default to null]
-**InterZoneLatency** | **int32** | Latency in ms between zones within domain | [optional] [default to null]
-**InterZoneLatencyVariation** | **int32** | Latency variation in ms between zones within domain | [optional] [default to null]
-**InterZoneThroughput** | **int32** | The limit of the traffic supported between zones within the domain | [optional] [default to null]
-**InterZonePacketLoss** | **float64** | Packet lost (in terms of percentage) between zones within the domain | [optional] [default to null]
-**Meta** | **map[string]string** | Key/Value Pair Map (string, string) | [optional] [default to null]
-**UserMeta** | **map[string]string** | Key/Value Pair Map (string, string) | [optional] [default to null]
-**Zones** | [**[]Zone**](Zone.md) | | [optional] [default to null]
-
-[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
-
-
diff --git a/go-packages/meep-ctrl-engine-model/docs/NetworkCharacteristics.md b/go-packages/meep-ctrl-engine-model/docs/NetworkCharacteristics.md
deleted file mode 100644
index aee03bec646b7e6f37127bae3c468fa1aec3efd2..0000000000000000000000000000000000000000
--- a/go-packages/meep-ctrl-engine-model/docs/NetworkCharacteristics.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# NetworkCharacteristics
-
-## Properties
-Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
-**Latency** | **int32** | Latency in ms | [optional] [default to null]
-**LatencyVariation** | **int32** | Latency variation in ms | [optional] [default to null]
-**Throughput** | **int32** | Throughput limit in Mbps | [optional] [default to null]
-**PacketLoss** | **float64** | Packet loss percentage | [optional] [default to null]
-
-[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
-
-
diff --git a/go-packages/meep-ctrl-engine-model/docs/PodStatus.md b/go-packages/meep-ctrl-engine-model/docs/PodStatus.md
deleted file mode 100644
index a23be3ed2cf7929fa24d25aa52531d66d17a6a46..0000000000000000000000000000000000000000
--- a/go-packages/meep-ctrl-engine-model/docs/PodStatus.md
+++ /dev/null
@@ -1,26 +0,0 @@
-# PodStatus
-
-## Properties
-Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
-**Name** | **string** | Pod name | [optional] [default to null]
-**Namespace** | **string** | Pod namespace | [optional] [default to null]
-**MeepApp** | **string** | Pod process name | [optional] [default to null]
-**MeepOrigin** | **string** | Pod origin(core, scenario) | [optional] [default to null]
-**MeepScenario** | **string** | Pod scenario name | [optional] [default to null]
-**Phase** | **string** | Pod phase | [optional] [default to null]
-**PodInitialized** | **string** | Pod initialized (true/false) | [optional] [default to null]
-**PodReady** | **string** | Pod ready (true/false) | [optional] [default to null]
-**PodScheduled** | **string** | Pod scheduled (true/false) | [optional] [default to null]
-**PodUnschedulable** | **string** | Pod unschedulable (true/false) | [optional] [default to null]
-**PodConditionError** | **string** | Pod error message | [optional] [default to null]
-**ContainerStatusesMsg** | **string** | Failed container error message | [optional] [default to null]
-**NbOkContainers** | **string** | Number of containers that are up | [optional] [default to null]
-**NbTotalContainers** | **string** | Number of total containers in the pod | [optional] [default to null]
-**NbPodRestart** | **string** | Number of container failures leading to pod restarts | [optional] [default to null]
-**LogicalState** | **string** | State that is mapping the kubernetes api state | [optional] [default to null]
-**StartTime** | **string** | Pod creation time | [optional] [default to null]
-
-[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
-
-
diff --git a/go-packages/meep-ctrl-engine-model/docs/ScenarioList.md b/go-packages/meep-ctrl-engine-model/docs/ScenarioList.md
deleted file mode 100644
index 99bf8929d621ec6bd487bf3ee7e3f00a92f17425..0000000000000000000000000000000000000000
--- a/go-packages/meep-ctrl-engine-model/docs/ScenarioList.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# ScenarioList
-
-## Properties
-Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
-**Scenarios** | [**[]Scenario**](Scenario.md) | | [optional] [default to null]
-
-[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
-
-
diff --git a/go-packages/meep-ctrl-engine-model/go.mod b/go-packages/meep-ctrl-engine-model/go.mod
deleted file mode 100644
index a122ea7bd1f600e79d24860047154a7a37cd2e5b..0000000000000000000000000000000000000000
--- a/go-packages/meep-ctrl-engine-model/go.mod
+++ /dev/null
@@ -1,3 +0,0 @@
-module github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model
-
-go 1.12
diff --git a/go-packages/meep-ctrl-engine-model/model_pod_status.go b/go-packages/meep-ctrl-engine-model/model_pod_status.go
deleted file mode 100644
index 61205878a880e735e833d23d2079f9454bc8f1dd..0000000000000000000000000000000000000000
--- a/go-packages/meep-ctrl-engine-model/model_pod_status.go
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2019 InterDigital Communications, Inc
- *
- * Licensed under the Apache License, Version 2.0 (the \"License\");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an \"AS IS\" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * MEEP Model
- *
- * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
- *
- * API version: 1.0.0
- * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
- */
-
-package model
-
-type PodStatus struct {
- // Pod name
- Name string `json:"name,omitempty"`
- // Pod namespace
- Namespace string `json:"namespace,omitempty"`
- // Pod process name
- MeepApp string `json:"meepApp,omitempty"`
- // Pod origin(core, scenario)
- MeepOrigin string `json:"meepOrigin,omitempty"`
- // Pod scenario name
- MeepScenario string `json:"meepScenario,omitempty"`
- // Pod phase
- Phase string `json:"phase,omitempty"`
- // Pod initialized (true/false)
- PodInitialized string `json:"podInitialized,omitempty"`
- // Pod ready (true/false)
- PodReady string `json:"podReady,omitempty"`
- // Pod scheduled (true/false)
- PodScheduled string `json:"podScheduled,omitempty"`
- // Pod unschedulable (true/false)
- PodUnschedulable string `json:"podUnschedulable,omitempty"`
- // Pod error message
- PodConditionError string `json:"podConditionError,omitempty"`
- // Failed container error message
- ContainerStatusesMsg string `json:"containerStatusesMsg,omitempty"`
- // Number of containers that are up
- NbOkContainers string `json:"nbOkContainers,omitempty"`
- // Number of total containers in the pod
- NbTotalContainers string `json:"nbTotalContainers,omitempty"`
- // Number of container failures leading to pod restarts
- NbPodRestart string `json:"nbPodRestart,omitempty"`
- // State that is mapping the kubernetes api state
- LogicalState string `json:"logicalState,omitempty"`
- // Pod creation time
- StartTime string `json:"startTime,omitempty"`
-}
diff --git a/go-packages/meep-data-key-mgr/data-key-mgr.go b/go-packages/meep-data-key-mgr/data-key-mgr.go
new file mode 100644
index 0000000000000000000000000000000000000000..4c11ee037549ba5e558d087db3ff65d71027f572
--- /dev/null
+++ b/go-packages/meep-data-key-mgr/data-key-mgr.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package datakeymgr
+
+const keyRoot = "data:"
+const keyRootGlobal = keyRoot + "global:"
+
+func GetKeyRoot(namespace string) string {
+ return keyRoot + namespace + ":"
+}
+
+func GetKeyRootGlobal() string {
+ return keyRootGlobal
+}
diff --git a/go-packages/meep-data-key-mgr/go.mod b/go-packages/meep-data-key-mgr/go.mod
new file mode 100644
index 0000000000000000000000000000000000000000..bbc2976cc5b65642a8fe45417e872348ba9eb3cf
--- /dev/null
+++ b/go-packages/meep-data-key-mgr/go.mod
@@ -0,0 +1,3 @@
+module github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr
+
+go 1.12
diff --git a/go-packages/meep-ctrl-engine-model/api/swagger.yaml b/go-packages/meep-data-model/api/swagger.yaml
similarity index 69%
rename from go-packages/meep-ctrl-engine-model/api/swagger.yaml
rename to go-packages/meep-data-model/api/swagger.yaml
index 737ab88cdd2ed2b96ec3519ae03f87ba6c749abb..6b46205f0a232496545662da3de2b482a9c2afcc 100644
--- a/go-packages/meep-ctrl-engine-model/api/swagger.yaml
+++ b/go-packages/meep-data-model/api/swagger.yaml
@@ -14,6 +14,88 @@ definitions:
description: Replay-file name to execute at deployment time
description: Activation information
example: {}
+ CellularPoaConfig:
+ type: object
+ properties:
+ cellId:
+ type: string
+ description: The E-UTRAN Cell Identity as defined in ETSI TS 136 413 including the ID of the eNB serving the cell
+ description: Cellular POA configuration information
+ CellularDomainConfig:
+ type: object
+ properties:
+ mnc:
+ type: string
+ description: Mobile Network Code part of PLMN identity as defined in ETSI TS 136 413
+ mcc:
+ type: string
+ description: Mobile Country Code part of PLMN identity as defined in ETSI TS 136 413
+ defaultCellId:
+ type: string
+ description: The E-UTRAN Cell Identity as defined in ETSI TS 136 413 if no cellId is defined for the cell or if not applicable
+ description: Cellular domain configuration information
+ example: {}
+ GeoData:
+ description: Geographic data
+ type: object
+ properties:
+ location:
+ $ref: '#/definitions/Point'
+ radius:
+ description: Optional - Radius (in meters) around the location
+ type: number
+ path:
+ $ref: '#/definitions/LineString'
+ eopMode:
+ description: >-
+ End-of-Path mode:
+
+ Specifies a scenario update action to perform on the provided node.
+
+
Specifies a scenario update action to perform on the provided node.
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
## Overview
This API client was generated by the [swagger-codegen](https://github.com/swagger-api/swagger-codegen) project. By using the [swagger-spec](https://github.com/swagger-api/swagger-spec) from a remote server, you can easily generate an API client.
@@ -17,7 +17,7 @@ import "./client"
## Documentation for API Endpoints
-All URIs are relative to *http://127.0.0.1:8081/etsi-013/location/v1*
+All URIs are relative to *https://localhost/location/v1*
Class | Method | HTTP request | Description
------------ | ------------- | ------------- | -------------
diff --git a/go-packages/meep-loc-serv-client/api/swagger.yaml b/go-packages/meep-loc-serv-client/api/swagger.yaml
index 2e7da1b0b3576cbb464fe4330af2eedc62830f15..638f4fda83fc9ea649edb24a06350db6ca2bc34d 100644
--- a/go-packages/meep-loc-serv-client/api/swagger.yaml
+++ b/go-packages/meep-loc-serv-client/api/swagger.yaml
@@ -8,7 +8,7 @@ info:
\
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)\
\
Edge Service used by edge applications that want to get\
\ information about Users (UE) and Zone locations
API details\
- \ available at _your-AdvantEDGE-ip-address:30000/api_
`30007`"
+ \ available at _your-AdvantEDGE-ip-address/api_"
version: "1.1.1"
title: "AdvantEDGE Location Service REST API"
contact:
@@ -17,14 +17,11 @@ info:
license:
name: "Apache 2.0"
url: "https://github.com/InterDigitalInc/AdvantEDGE/blob/master/LICENSE"
-host: "127.0.0.1:8081"
-basePath: "/etsi-013/location/v1"
+basePath: "/location/v1"
tags:
- name: "zones"
- name: "users"
- name: "subscriptions"
-schemes:
-- "http"
consumes:
- "application/json"
produces:
diff --git a/go-packages/meep-loc-serv-client/api_subscriptions.go b/go-packages/meep-loc-serv-client/api_subscriptions.go
index 55227327b91369ba8f244cbbc98b6b0b8756bccd..fbbb9768501f38b44e282f126c983a05ad5ce348 100644
--- a/go-packages/meep-loc-serv-client/api_subscriptions.go
+++ b/go-packages/meep-loc-serv-client/api_subscriptions.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/api_users.go b/go-packages/meep-loc-serv-client/api_users.go
index 78ad50f699aaec342847d0bea4f19e08d433358f..657e0fd444212f2b976730d820a240ef8af8b8d5 100644
--- a/go-packages/meep-loc-serv-client/api_users.go
+++ b/go-packages/meep-loc-serv-client/api_users.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/api_zones.go b/go-packages/meep-loc-serv-client/api_zones.go
index 80d90c50dae1bdd61f5c3b7459b48304afd23fd2..6eb527a790bcf1526d50e2d8562e74a669c97660 100644
--- a/go-packages/meep-loc-serv-client/api_zones.go
+++ b/go-packages/meep-loc-serv-client/api_zones.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/client.go b/go-packages/meep-loc-serv-client/client.go
index 2fc3ff72837c7baae816b7731364a077708798b7..6c9f9c68b2df117b8e13f1d7930a913a228123cb 100644
--- a/go-packages/meep-loc-serv-client/client.go
+++ b/go-packages/meep-loc-serv-client/client.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/configuration.go b/go-packages/meep-loc-serv-client/configuration.go
index d7ac520e6ed64c348d1ed44c32284b531d9aa088..f8021df1dfde681e183bba44e3752b47436f4125 100644
--- a/go-packages/meep-loc-serv-client/configuration.go
+++ b/go-packages/meep-loc-serv-client/configuration.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
@@ -75,7 +75,7 @@ type Configuration struct {
func NewConfiguration() *Configuration {
cfg := &Configuration{
- BasePath: "http://127.0.0.1:8081/etsi-013/location/v1",
+ BasePath: "https://localhost/location/v1",
DefaultHeader: make(map[string]string),
UserAgent: "Swagger-Codegen/1.0.0/go",
}
diff --git a/go-packages/meep-loc-serv-client/docs/SubscriptionsApi.md b/go-packages/meep-loc-serv-client/docs/SubscriptionsApi.md
index 2d49b21faaa3ae5489f84901edff342496658510..ba61c752d8c3e86b6776d705fffa5f126aa84815 100644
--- a/go-packages/meep-loc-serv-client/docs/SubscriptionsApi.md
+++ b/go-packages/meep-loc-serv-client/docs/SubscriptionsApi.md
@@ -1,6 +1,6 @@
# \SubscriptionsApi
-All URIs are relative to *http://127.0.0.1:8081/etsi-013/location/v1*
+All URIs are relative to *https://localhost/location/v1*
Method | HTTP request | Description
------------- | ------------- | -------------
diff --git a/go-packages/meep-loc-serv-client/docs/UsersApi.md b/go-packages/meep-loc-serv-client/docs/UsersApi.md
index 3fa9804994abf618a08ac1227560e5384dec55ef..3f9dceb19fd2e4e8bd41a511fd59bebc80ea9df7 100644
--- a/go-packages/meep-loc-serv-client/docs/UsersApi.md
+++ b/go-packages/meep-loc-serv-client/docs/UsersApi.md
@@ -1,6 +1,6 @@
# \UsersApi
-All URIs are relative to *http://127.0.0.1:8081/etsi-013/location/v1*
+All URIs are relative to *https://localhost/location/v1*
Method | HTTP request | Description
------------- | ------------- | -------------
diff --git a/go-packages/meep-loc-serv-client/docs/ZonesApi.md b/go-packages/meep-loc-serv-client/docs/ZonesApi.md
index b5c662186e609f18a58cce05f5b3f9d97a1a9912..a2b36411418fb3979420be47c8a228f75a3eba96 100644
--- a/go-packages/meep-loc-serv-client/docs/ZonesApi.md
+++ b/go-packages/meep-loc-serv-client/docs/ZonesApi.md
@@ -1,6 +1,6 @@
# \ZonesApi
-All URIs are relative to *http://127.0.0.1:8081/etsi-013/location/v1*
+All URIs are relative to *https://localhost/location/v1*
Method | HTTP request | Description
------------- | ------------- | -------------
diff --git a/go-packages/meep-loc-serv-client/model_access_point_info.go b/go-packages/meep-loc-serv-client/model_access_point_info.go
index 40603a60e790b2dfdec6ec3f6cb87c1d55702402..93a517672d43f3740b05808934e88eb38eef8f5b 100644
--- a/go-packages/meep-loc-serv-client/model_access_point_info.go
+++ b/go-packages/meep-loc-serv-client/model_access_point_info.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_access_point_list.go b/go-packages/meep-loc-serv-client/model_access_point_list.go
index 54824f713f7ab7b48ebed32749822fdb16025fd1..50081841ee3913bda35437f33be1afcb3b1879b3 100644
--- a/go-packages/meep-loc-serv-client/model_access_point_list.go
+++ b/go-packages/meep-loc-serv-client/model_access_point_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_connection_type.go b/go-packages/meep-loc-serv-client/model_connection_type.go
index f4bfb9d448623998fc257ca138faf68dccf15449..890ef177a77fed07b8c01ef7ade151c2127e56e4 100644
--- a/go-packages/meep-loc-serv-client/model_connection_type.go
+++ b/go-packages/meep-loc-serv-client/model_connection_type.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_link.go b/go-packages/meep-loc-serv-client/model_link.go
index 44b3cec0962eff77d7c041794c0ab07a05dfe6a3..1b106d4c3ba5760762af8003cb5179a4619a8751 100644
--- a/go-packages/meep-loc-serv-client/model_link.go
+++ b/go-packages/meep-loc-serv-client/model_link.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_location_info.go b/go-packages/meep-loc-serv-client/model_location_info.go
index e63e2d6a9d726e426e80a2e837329d58cb8a6902..1762593e296ebbcd38ae31cc6fc63d0c32f568c8 100644
--- a/go-packages/meep-loc-serv-client/model_location_info.go
+++ b/go-packages/meep-loc-serv-client/model_location_info.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_operation_status.go b/go-packages/meep-loc-serv-client/model_operation_status.go
index 7cebaf4020ac6a57b17226038ae1b139ae8860a7..31209e275db33c43ce624cad9e4be51c692219c4 100644
--- a/go-packages/meep-loc-serv-client/model_operation_status.go
+++ b/go-packages/meep-loc-serv-client/model_operation_status.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_response_access_point_info.go b/go-packages/meep-loc-serv-client/model_response_access_point_info.go
index 02b5a9a2db78e79e67e911f6d9c16a40d52741dc..d50f7309e445923184f4561f5338a3690cc62175 100644
--- a/go-packages/meep-loc-serv-client/model_response_access_point_info.go
+++ b/go-packages/meep-loc-serv-client/model_response_access_point_info.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_response_access_point_list.go b/go-packages/meep-loc-serv-client/model_response_access_point_list.go
index 020cebeb651d9836ea9d94d5b10cefdc6c76bbf6..f0d5ea459149e058ea6b8fbcdda9121b4c491aa7 100644
--- a/go-packages/meep-loc-serv-client/model_response_access_point_list.go
+++ b/go-packages/meep-loc-serv-client/model_response_access_point_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_response_user_info.go b/go-packages/meep-loc-serv-client/model_response_user_info.go
index 777452dab6f58a46399ca877b57a92e9826cb4be..9578fad39a14dec31311c80d995901f6040ea506 100644
--- a/go-packages/meep-loc-serv-client/model_response_user_info.go
+++ b/go-packages/meep-loc-serv-client/model_response_user_info.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_response_user_list.go b/go-packages/meep-loc-serv-client/model_response_user_list.go
index 4f29debf673974348299b190e834a69de0c70ad6..5b0b3315b38302e3f79f9c7cdd0f166b69306cd1 100644
--- a/go-packages/meep-loc-serv-client/model_response_user_list.go
+++ b/go-packages/meep-loc-serv-client/model_response_user_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_response_user_tracking_notification_subscription_list.go b/go-packages/meep-loc-serv-client/model_response_user_tracking_notification_subscription_list.go
index bf98306a72973166c9275c324d40fc98808c94f6..b849301c929fa0c6b47695ec539cd727743d948a 100644
--- a/go-packages/meep-loc-serv-client/model_response_user_tracking_notification_subscription_list.go
+++ b/go-packages/meep-loc-serv-client/model_response_user_tracking_notification_subscription_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_response_user_tracking_subscription.go b/go-packages/meep-loc-serv-client/model_response_user_tracking_subscription.go
index 387358ce2c1aa6a479ab5d47d5f8b1cd61217dea..2905df9d203d0badf30079ce3a5d485d1ecb38d9 100644
--- a/go-packages/meep-loc-serv-client/model_response_user_tracking_subscription.go
+++ b/go-packages/meep-loc-serv-client/model_response_user_tracking_subscription.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_response_zonal_traffic_notification_subscription_list.go b/go-packages/meep-loc-serv-client/model_response_zonal_traffic_notification_subscription_list.go
index 93f6fbc019b354fe4c4019b5404b36cd8f7b1050..4f632860e468e25845f320f7e7dd678095b029e5 100644
--- a/go-packages/meep-loc-serv-client/model_response_zonal_traffic_notification_subscription_list.go
+++ b/go-packages/meep-loc-serv-client/model_response_zonal_traffic_notification_subscription_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_response_zonal_traffic_subscription.go b/go-packages/meep-loc-serv-client/model_response_zonal_traffic_subscription.go
index ce01d042dcddfa1a4a30ad5db60d38b8bf0d58fe..dd89c5d166717e33a0ec50d7e8822ec76f2a8c66 100644
--- a/go-packages/meep-loc-serv-client/model_response_zonal_traffic_subscription.go
+++ b/go-packages/meep-loc-serv-client/model_response_zonal_traffic_subscription.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_response_zone_info.go b/go-packages/meep-loc-serv-client/model_response_zone_info.go
index 3ee41914bede09ef8a61aa76be95676d8dab5dbb..597609ecf402c5e7f8839d125e3ca4dcf79387e5 100644
--- a/go-packages/meep-loc-serv-client/model_response_zone_info.go
+++ b/go-packages/meep-loc-serv-client/model_response_zone_info.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_response_zone_list.go b/go-packages/meep-loc-serv-client/model_response_zone_list.go
index 76feb399c0e86b228f417ccd362f6c1ff7ae9c39..82a6a1b4a74e30d3e115138fb0e44a33658305c6 100644
--- a/go-packages/meep-loc-serv-client/model_response_zone_list.go
+++ b/go-packages/meep-loc-serv-client/model_response_zone_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_response_zone_status_notification_subscription_list.go b/go-packages/meep-loc-serv-client/model_response_zone_status_notification_subscription_list.go
index 53cb51f4eb3bb9d06455320a1986f8867dd6a1e0..53f58c40d761916cd636e974e5318ffda5efb8a1 100644
--- a/go-packages/meep-loc-serv-client/model_response_zone_status_notification_subscription_list.go
+++ b/go-packages/meep-loc-serv-client/model_response_zone_status_notification_subscription_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_response_zone_status_subscription.go b/go-packages/meep-loc-serv-client/model_response_zone_status_subscription.go
index 815eb50fc6e22e4fd1054351005afffb85b68d6a..3482680fb5a3f80b3a5dc2a234488f61605d733a 100644
--- a/go-packages/meep-loc-serv-client/model_response_zone_status_subscription.go
+++ b/go-packages/meep-loc-serv-client/model_response_zone_status_subscription.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_response_zone_status_subscription2.go b/go-packages/meep-loc-serv-client/model_response_zone_status_subscription2.go
index 78043681d881b91e422cafb29bb9551a74d2057a..45a592b11a80d46f9563d63a22d8105e75f33b67 100644
--- a/go-packages/meep-loc-serv-client/model_response_zone_status_subscription2.go
+++ b/go-packages/meep-loc-serv-client/model_response_zone_status_subscription2.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_user_event_type.go b/go-packages/meep-loc-serv-client/model_user_event_type.go
index f4819891e0b902ee0a638c3770ac98ab016362ec..f64dd52f604191f93759ce44eb495d2140ea0376 100644
--- a/go-packages/meep-loc-serv-client/model_user_event_type.go
+++ b/go-packages/meep-loc-serv-client/model_user_event_type.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_user_info.go b/go-packages/meep-loc-serv-client/model_user_info.go
index 05220d6a17f4b02068cec0bf53b52c008fe7a2ba..9552b29c066b28e8910e760747be5c70fad1731e 100644
--- a/go-packages/meep-loc-serv-client/model_user_info.go
+++ b/go-packages/meep-loc-serv-client/model_user_info.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_user_list.go b/go-packages/meep-loc-serv-client/model_user_list.go
index aacf210aa2794cdb0ed5dc07338d1e3562c6ee0a..91c080b7cab366ca95f1796ab24a6cb61a2cd3ce 100644
--- a/go-packages/meep-loc-serv-client/model_user_list.go
+++ b/go-packages/meep-loc-serv-client/model_user_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_user_tracking_notification_subscription_list.go b/go-packages/meep-loc-serv-client/model_user_tracking_notification_subscription_list.go
index ef816fb14c1abe0b0452abec33b7d04729aa5733..3bf01198fb0faada0f5cacc6a117d0326e32cdb6 100644
--- a/go-packages/meep-loc-serv-client/model_user_tracking_notification_subscription_list.go
+++ b/go-packages/meep-loc-serv-client/model_user_tracking_notification_subscription_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_user_tracking_subscription.go b/go-packages/meep-loc-serv-client/model_user_tracking_subscription.go
index 43d2143fad1d804d6b8333c86d1a3f41f877c2c8..19d3475cff063699cf93c4c0cec051eaad8a7d38 100644
--- a/go-packages/meep-loc-serv-client/model_user_tracking_subscription.go
+++ b/go-packages/meep-loc-serv-client/model_user_tracking_subscription.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_user_tracking_subscription_callback_reference.go b/go-packages/meep-loc-serv-client/model_user_tracking_subscription_callback_reference.go
index 96a52bea25a64f7a052844a11fa10a8d884cb43b..a3d875237220148c10c56fc3e86b431fae78849e 100644
--- a/go-packages/meep-loc-serv-client/model_user_tracking_subscription_callback_reference.go
+++ b/go-packages/meep-loc-serv-client/model_user_tracking_subscription_callback_reference.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_zonal_presence_notification.go b/go-packages/meep-loc-serv-client/model_zonal_presence_notification.go
index a089fb670ff30200780a995893be91fd3b356830..9496f1f9f9adecc1948ee53d6facb7dbf38bc74e 100644
--- a/go-packages/meep-loc-serv-client/model_zonal_presence_notification.go
+++ b/go-packages/meep-loc-serv-client/model_zonal_presence_notification.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_zonal_traffic_notification_subscription_list.go b/go-packages/meep-loc-serv-client/model_zonal_traffic_notification_subscription_list.go
index 4180687239f52731e91b058a8cb36af1a8c7505f..41fa714d96480c65a34532639ea320263f245104 100644
--- a/go-packages/meep-loc-serv-client/model_zonal_traffic_notification_subscription_list.go
+++ b/go-packages/meep-loc-serv-client/model_zonal_traffic_notification_subscription_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_zonal_traffic_subscription.go b/go-packages/meep-loc-serv-client/model_zonal_traffic_subscription.go
index 14592aac17dbbd7724aea605fc62b3cc273e6f1f..7fa7bb04771bd05c7ff4ce3b53008cc18ba35eb2 100644
--- a/go-packages/meep-loc-serv-client/model_zonal_traffic_subscription.go
+++ b/go-packages/meep-loc-serv-client/model_zonal_traffic_subscription.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_zone_info.go b/go-packages/meep-loc-serv-client/model_zone_info.go
index c150baed306dae31c3e29189dca257fa9b0d8778..34ae23a350d819b7a6c35e7b5b87d11612afe726 100644
--- a/go-packages/meep-loc-serv-client/model_zone_info.go
+++ b/go-packages/meep-loc-serv-client/model_zone_info.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_zone_list.go b/go-packages/meep-loc-serv-client/model_zone_list.go
index 0f820d23cac96594dedef73d938789a1df5dcfcc..5f9c1502219f479847006de35f864f65d982c760 100644
--- a/go-packages/meep-loc-serv-client/model_zone_list.go
+++ b/go-packages/meep-loc-serv-client/model_zone_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_zone_status_notification.go b/go-packages/meep-loc-serv-client/model_zone_status_notification.go
index f7e01045b53fbfe1d87986988b5395fb760fe57f..e865a128cb3cd19dc7fdb8d967dcc391604059f3 100644
--- a/go-packages/meep-loc-serv-client/model_zone_status_notification.go
+++ b/go-packages/meep-loc-serv-client/model_zone_status_notification.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_zone_status_notification_subscription_list.go b/go-packages/meep-loc-serv-client/model_zone_status_notification_subscription_list.go
index 6cdc8edd0063d8367191d5645d6d7ada0a44a568..498b28bbe37a734f4d64d286ab3825f35c8e36cc 100644
--- a/go-packages/meep-loc-serv-client/model_zone_status_notification_subscription_list.go
+++ b/go-packages/meep-loc-serv-client/model_zone_status_notification_subscription_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/model_zone_status_subscription.go b/go-packages/meep-loc-serv-client/model_zone_status_subscription.go
index 2baa3298706dd45555f8eb5e347a77916ba5abcd..a1feb7f76405e9a8405b5b978710b350999bcbc8 100644
--- a/go-packages/meep-loc-serv-client/model_zone_status_subscription.go
+++ b/go-packages/meep-loc-serv-client/model_zone_status_subscription.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-client/response.go b/go-packages/meep-loc-serv-client/response.go
index ac5b968d788bd73328d52316a23616b98183c0e6..0c4b13bb07bdfc499d4caf8212fe00bfb7880f3b 100644
--- a/go-packages/meep-loc-serv-client/response.go
+++ b/go-packages/meep-loc-serv-client/response.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service REST API
*
- * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30007`
+ * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf)
[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv)
Edge Service used by edge applications that want to get information about Users (UE) and Zone locations
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.1.1
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-notification-client/README.md b/go-packages/meep-loc-serv-notification-client/README.md
index ae230a4c0996c194a3efef0089ed88424e7e42d5..b4378e776fa2827b7f5880b91d5d2d165313d265 100644
--- a/go-packages/meep-loc-serv-notification-client/README.md
+++ b/go-packages/meep-loc-serv-notification-client/README.md
@@ -1,6 +1,6 @@
# Go API client for client
-This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
## Overview
This API client was generated by the [swagger-codegen](https://github.com/swagger-api/swagger-codegen) project. By using the [swagger-spec](https://github.com/swagger-api/swagger-spec) from a remote server, you can easily generate an API client.
@@ -17,7 +17,7 @@ import "./client"
## Documentation for API Endpoints
-All URIs are relative to *http://172.0.0.1:8081/location/v1*
+All URIs are relative to *https://localhost/location-notif/v1*
Class | Method | HTTP request | Description
------------ | ------------- | ------------- | -------------
diff --git a/go-packages/meep-loc-serv-notification-client/api/swagger.yaml b/go-packages/meep-loc-serv-notification-client/api/swagger.yaml
index 7b501fae6ba396d8afa42442cd5198058daa93d7..8e8351f36b33a9bf9092b35f5125285ca6920da0 100644
--- a/go-packages/meep-loc-serv-notification-client/api/swagger.yaml
+++ b/go-packages/meep-loc-serv-notification-client/api/swagger.yaml
@@ -4,8 +4,8 @@ info:
description: "This API enables the Location Service to post location events to edge\
\ applications
None
User's Edge\
\ Applications subscribing to Location events must implement this API
API\
- \ details available at _your-AdvantEDGE-ip-address:30000/api_
This\
- \ API is not exposed by default on the AdvantEDGE platform"
+ \ details available at _your-AdvantEDGE-ip-address/api_
This API\
+ \ is not exposed by default on the AdvantEDGE platform"
version: "1.0.0"
title: "AdvantEDGE Location Service Subscription Notification REST API"
contact:
@@ -14,12 +14,9 @@ info:
license:
name: "Apache 2.0"
url: "https://github.com/InterDigitalInc/AdvantEDGE/blob/master/LICENSE"
-host: "172.0.0.1:8081"
-basePath: "/location/v1"
+basePath: "/location-notif/v1"
tags:
- name: "notifications"
-schemes:
-- "http"
consumes:
- "application/json"
produces:
diff --git a/go-packages/meep-loc-serv-notification-client/api_notifications.go b/go-packages/meep-loc-serv-notification-client/api_notifications.go
index 1257a53c2956333fc0723db257a083e39d09abee..8fd513b45ac718c4e33b7739efa23a85e3f3e73f 100644
--- a/go-packages/meep-loc-serv-notification-client/api_notifications.go
+++ b/go-packages/meep-loc-serv-notification-client/api_notifications.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service Subscription Notification REST API
*
- * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-notification-client/client.go b/go-packages/meep-loc-serv-notification-client/client.go
index 9f2b809590dfd96b663af976751db6a3cd9cec04..e3eedfce2eb45e927ccd1f972a3647c7cf9a1a9a 100644
--- a/go-packages/meep-loc-serv-notification-client/client.go
+++ b/go-packages/meep-loc-serv-notification-client/client.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service Subscription Notification REST API
*
- * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-notification-client/configuration.go b/go-packages/meep-loc-serv-notification-client/configuration.go
index 2992aa11ea8e03a88ea9f23a71fcb205355cf2ec..5e36defd5e1371567aaf4fa877b5584b7b339d40 100644
--- a/go-packages/meep-loc-serv-notification-client/configuration.go
+++ b/go-packages/meep-loc-serv-notification-client/configuration.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service Subscription Notification REST API
*
- * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -75,7 +75,7 @@ type Configuration struct {
func NewConfiguration() *Configuration {
cfg := &Configuration{
- BasePath: "http://172.0.0.1:8081/location/v1",
+ BasePath: "https://localhost/location-notif/v1",
DefaultHeader: make(map[string]string),
UserAgent: "Swagger-Codegen/1.0.0/go",
}
diff --git a/go-packages/meep-loc-serv-notification-client/docs/NotificationsApi.md b/go-packages/meep-loc-serv-notification-client/docs/NotificationsApi.md
index 2aab4d8c2e7eec00b3fabe62dd3361928ef52801..ed68d7b05cd9c99e5021346c25455ccd9242a5a9 100644
--- a/go-packages/meep-loc-serv-notification-client/docs/NotificationsApi.md
+++ b/go-packages/meep-loc-serv-notification-client/docs/NotificationsApi.md
@@ -1,6 +1,6 @@
# \NotificationsApi
-All URIs are relative to *http://172.0.0.1:8081/location/v1*
+All URIs are relative to *https://localhost/location-notif/v1*
Method | HTTP request | Description
------------- | ------------- | -------------
diff --git a/go-packages/meep-loc-serv-notification-client/model_link.go b/go-packages/meep-loc-serv-notification-client/model_link.go
index 889b466633a3a4a00fdcf1a8f614282dc607b991..1f1979ce253eec56c762303e4fed2e6b7c0b0445 100644
--- a/go-packages/meep-loc-serv-notification-client/model_link.go
+++ b/go-packages/meep-loc-serv-notification-client/model_link.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service Subscription Notification REST API
*
- * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-notification-client/model_operation_status.go b/go-packages/meep-loc-serv-notification-client/model_operation_status.go
index 860c3e025c54f0d318fc78463b1270fcdc63a315..d1cf88fca4468a2be37b6f7dc76ee22118bd3bfa 100644
--- a/go-packages/meep-loc-serv-notification-client/model_operation_status.go
+++ b/go-packages/meep-loc-serv-notification-client/model_operation_status.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service Subscription Notification REST API
*
- * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-notification-client/model_subscription_id.go b/go-packages/meep-loc-serv-notification-client/model_subscription_id.go
index b88214a962377c8b0470b370825ac769e6b3dc65..9716b2bfa2b91de66fabd7ea5485da3487a12e22 100644
--- a/go-packages/meep-loc-serv-notification-client/model_subscription_id.go
+++ b/go-packages/meep-loc-serv-notification-client/model_subscription_id.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service Subscription Notification REST API
*
- * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-notification-client/model_tracking_notification.go b/go-packages/meep-loc-serv-notification-client/model_tracking_notification.go
index dd8765a1c6ba309378db6745223d5158b0efadbf..821248b8657dea5a598fdb359dca3fa8c697afa3 100644
--- a/go-packages/meep-loc-serv-notification-client/model_tracking_notification.go
+++ b/go-packages/meep-loc-serv-notification-client/model_tracking_notification.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service Subscription Notification REST API
*
- * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-notification-client/model_user_event_type.go b/go-packages/meep-loc-serv-notification-client/model_user_event_type.go
index 3738fcc0646428d56ed4733e5cd37e4dd7fcedaa..1fa26fac721453051b8f5f8e07ff8a5c48dac40b 100644
--- a/go-packages/meep-loc-serv-notification-client/model_user_event_type.go
+++ b/go-packages/meep-loc-serv-notification-client/model_user_event_type.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service Subscription Notification REST API
*
- * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-notification-client/model_user_info.go b/go-packages/meep-loc-serv-notification-client/model_user_info.go
index 4174a6ad48cf8d3680cb17356885598e914d51e1..b3ccaba1e050fcae1062af8a5a214f02906ccf81 100644
--- a/go-packages/meep-loc-serv-notification-client/model_user_info.go
+++ b/go-packages/meep-loc-serv-notification-client/model_user_info.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service Subscription Notification REST API
*
- * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-notification-client/model_user_list.go b/go-packages/meep-loc-serv-notification-client/model_user_list.go
index ba9647391bd0ab98a532ff8d0365c58ac66e7c90..1e9f56b4f7d69782bf35691d731f051ef7e1d7f8 100644
--- a/go-packages/meep-loc-serv-notification-client/model_user_list.go
+++ b/go-packages/meep-loc-serv-notification-client/model_user_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service Subscription Notification REST API
*
- * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-notification-client/model_user_tracking_notification.go b/go-packages/meep-loc-serv-notification-client/model_user_tracking_notification.go
index c5c497471718f9c12b9c31820cfe4ea413e19a12..1afb2e4cb17d8aba77cc1308d03f306a688759fc 100644
--- a/go-packages/meep-loc-serv-notification-client/model_user_tracking_notification.go
+++ b/go-packages/meep-loc-serv-notification-client/model_user_tracking_notification.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service Subscription Notification REST API
*
- * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-notification-client/model_zone_info.go b/go-packages/meep-loc-serv-notification-client/model_zone_info.go
index 6778a16261399ed54753615d465709cd4f1e9ba9..e610098aa5abe8357e50ca92dacf424e3f9e2a46 100644
--- a/go-packages/meep-loc-serv-notification-client/model_zone_info.go
+++ b/go-packages/meep-loc-serv-notification-client/model_zone_info.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service Subscription Notification REST API
*
- * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-notification-client/model_zone_status_notification.go b/go-packages/meep-loc-serv-notification-client/model_zone_status_notification.go
index f95cfbad587ffa9022fe586f519b8ef2d627d0c6..7161b86c8769ae62c824878dca43540f5fda32c1 100644
--- a/go-packages/meep-loc-serv-notification-client/model_zone_status_notification.go
+++ b/go-packages/meep-loc-serv-notification-client/model_zone_status_notification.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service Subscription Notification REST API
*
- * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-loc-serv-notification-client/response.go b/go-packages/meep-loc-serv-notification-client/response.go
index 657e9d6920e632b6336c30b847b86282122a22b3..95d11fbb69c187ba17d59fd4d15bd7e6f41b400e 100644
--- a/go-packages/meep-loc-serv-notification-client/response.go
+++ b/go-packages/meep-loc-serv-notification-client/response.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Location Service Subscription Notification REST API
*
- * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Location Service to post location events to edge applications
None
User's Edge Applications subscribing to Location events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-metric-store/events_test.go b/go-packages/meep-metric-store/events_test.go
index f645b35198d3892e13a343f67f5a2360d5003fb7..ffe6a98fb0a5f09c0338224a198f46c29f32d484 100644
--- a/go-packages/meep-metric-store/events_test.go
+++ b/go-packages/meep-metric-store/events_test.go
@@ -23,7 +23,8 @@ import (
log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
)
-const eventStoreName string = "eventStore"
+const eventStoreName string = "event-store"
+const eventStoreNamespace string = "event-ns"
const eventStoreInfluxAddr string = "http://localhost:30986"
const eventStoreRedisAddr string = "localhost:30380"
@@ -32,9 +33,9 @@ func TestEventsMetricsGetSet(t *testing.T) {
log.MeepTextLogInit(t.Name())
fmt.Println("Create valid Metric Store")
- ms, err := NewMetricStore(eventStoreName, eventStoreInfluxAddr, eventStoreRedisAddr)
+ ms, err := NewMetricStore(eventStoreName, eventStoreNamespace, eventStoreInfluxAddr, eventStoreRedisAddr)
if err != nil {
- t.Errorf("Unable to create Metric Store")
+ t.Fatalf("Unable to create Metric Store")
}
fmt.Println("Flush store metrics")
@@ -43,73 +44,73 @@ func TestEventsMetricsGetSet(t *testing.T) {
fmt.Println("Set event metric")
err = ms.SetEventMetric("MOBILITY", EventMetric{nil, "event1", "event1 description"})
if err != nil {
- t.Errorf("Unable to set event metric")
+ t.Fatalf("Unable to set event metric")
}
err = ms.SetEventMetric("NETWORK-CHARACTERISTIC-UPDATE", EventMetric{nil, "event2", "event2 description"})
if err != nil {
- t.Errorf("Unable to set event metric")
+ t.Fatalf("Unable to set event metric")
}
err = ms.SetEventMetric("POAS-IN-RANGE", EventMetric{nil, "event3", "event3 description"})
if err != nil {
- t.Errorf("Unable to set event metric")
+ t.Fatalf("Unable to set event metric")
}
err = ms.SetEventMetric("MOBILITY", EventMetric{nil, "event4", "event4 description"})
if err != nil {
- t.Errorf("Unable to set event metric")
+ t.Fatalf("Unable to set event metric")
}
err = ms.SetEventMetric("NETWORK-CHARACTERISTIC-UPDATE", EventMetric{nil, "event5", "event5 description"})
if err != nil {
- t.Errorf("Unable to set event metric")
+ t.Fatalf("Unable to set event metric")
}
err = ms.SetEventMetric("POAS-IN-RANGE", EventMetric{nil, "event6", "event6 description"})
if err != nil {
- t.Errorf("Unable to set event metric")
+ t.Fatalf("Unable to set event metric")
}
fmt.Println("Get event metrics")
_, err = ms.GetEventMetric("MOBILITY", "1ms", 0)
if err == nil {
- t.Errorf("No metrics should be found in the last 1 ms")
+ t.Fatalf("No metrics should be found in the last 1 ms")
}
eml, err := ms.GetEventMetric("MOBILITY", "", 1)
if err != nil || len(eml) != 1 {
- t.Errorf("Failed to get metric")
+ t.Fatalf("Failed to get metric")
}
if !validateEventsMetric(eml[0], "event4", "event4 description") {
- t.Errorf("Invalid event metric")
+ t.Fatalf("Invalid event metric")
}
eml, err = ms.GetEventMetric("MOBILITY", "", 0)
if err != nil || len(eml) != 2 {
- t.Errorf("Failed to get metric")
+ t.Fatalf("Failed to get metric")
}
if !validateEventsMetric(eml[0], "event4", "event4 description") {
- t.Errorf("Invalid event metric")
+ t.Fatalf("Invalid event metric")
}
if !validateEventsMetric(eml[1], "event1", "event1 description") {
- t.Errorf("Invalid event metric")
+ t.Fatalf("Invalid event metric")
}
eml, err = ms.GetEventMetric("NETWORK-CHARACTERISTIC-UPDATE", "", 0)
if err != nil || len(eml) != 2 {
- t.Errorf("Failed to get metric")
+ t.Fatalf("Failed to get metric")
}
if !validateEventsMetric(eml[0], "event5", "event5 description") {
- t.Errorf("Invalid event metric")
+ t.Fatalf("Invalid event metric")
}
if !validateEventsMetric(eml[1], "event2", "event2 description") {
- t.Errorf("Invalid event metric")
+ t.Fatalf("Invalid event metric")
}
eml, err = ms.GetEventMetric("POAS-IN-RANGE", "", 0)
if err != nil || len(eml) != 2 {
- t.Errorf("Failed to get metric")
+ t.Fatalf("Failed to get metric")
}
if !validateEventsMetric(eml[0], "event6", "event6 description") {
- t.Errorf("Invalid event metric")
+ t.Fatalf("Invalid event metric")
}
if !validateEventsMetric(eml[1], "event3", "event3 description") {
- t.Errorf("Invalid event metric")
+ t.Fatalf("Invalid event metric")
}
- // t.Errorf("DONE")
+ // t.Fatalf("DONE")
}
func validateEventsMetric(em EventMetric, event string, description string) bool {
diff --git a/go-packages/meep-metric-store/go.mod b/go-packages/meep-metric-store/go.mod
index 1bade5ce7893c805b457cabe3ad1d7d7a9c065a6..8571c6fc73d291ebc575824e15dbaaf74b5e4ad1 100644
--- a/go-packages/meep-metric-store/go.mod
+++ b/go-packages/meep-metric-store/go.mod
@@ -3,12 +3,14 @@ module github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-metric-store
go 1.12
require (
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis v0.0.0
github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e
)
replace (
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr => ../../go-packages/meep-data-key-mgr
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger => ../../go-packages/meep-logger
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis => ../../go-packages/meep-redis
)
diff --git a/go-packages/meep-metric-store/http.go b/go-packages/meep-metric-store/http.go
new file mode 100644
index 0000000000000000000000000000000000000000..fffedd5085c5b11ca8403f89c00516609ecd5b13
--- /dev/null
+++ b/go-packages/meep-metric-store/http.go
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2019 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package metricstore
+
+import (
+ "encoding/json"
+ "errors"
+
+ log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
+)
+
+const HttpLogMetricName = "http"
+const HttpLoggerName = "logger_name"
+const HttpLoggerDirection = "direction"
+const HttpLogTime = "time"
+const HttpLogId = "id"
+const HttpUrl = "url"
+const HttpLogEndpoint = "endpoint"
+const HttpMethod = "method"
+const HttpBody = "body"
+const HttpRespBody = "resp_body"
+const HttpRespCode = "resp_code"
+const HttpProcTime = "proc_time"
+
+const HttpRxDirection = "RX"
+const HttpTxDirection = "TX"
+
+type HttpMetric struct {
+ LoggerName string
+ Direction string
+ Id int32
+ Url string
+ Endpoint string
+ Method string
+ Body string
+ RespBody string
+ RespCode string
+ ProcTime string
+ Time interface{}
+}
+
+// SetHttpMetric
+func (ms *MetricStore) SetHttpMetric(h HttpMetric) error {
+ metricList := make([]Metric, 1)
+ metric := &metricList[0]
+ metric.Name = HttpLogMetricName
+ metric.Tags = map[string]string{HttpLoggerName: h.LoggerName, HttpLoggerDirection: h.Direction}
+ metric.Fields = map[string]interface{}{
+ HttpLogId: h.Id,
+ HttpUrl: h.Url,
+ HttpLogEndpoint: h.Endpoint,
+ HttpMethod: h.Method,
+ HttpBody: h.Body,
+ HttpRespBody: h.RespBody,
+ HttpRespCode: h.RespCode,
+ HttpProcTime: h.ProcTime,
+ }
+ return ms.SetInfluxMetric(metricList)
+}
+
+// GetHttpMetric
+func (ms *MetricStore) GetHttpMetric(loggerName string, direction string, duration string, count int) (metrics []HttpMetric, err error) {
+ // Make sure we have set a store
+ if ms.name == "" {
+ err = errors.New("Store name not specified")
+ return
+ }
+
+ // Get Http metrics
+ tags := map[string]string{}
+ if loggerName != "" {
+ tags[HttpLoggerName] = loggerName
+ }
+ if direction != "" {
+ tags[HttpLoggerDirection] = direction
+ }
+ fields := []string{HttpLogId, HttpUrl, HttpLogEndpoint, HttpMethod, HttpBody, HttpRespBody, HttpRespCode, HttpProcTime}
+ var valuesArray []map[string]interface{}
+ valuesArray, err = ms.GetInfluxMetric(HttpLogMetricName, tags, fields, duration, count)
+ if err != nil {
+ log.Error("Failed to retrieve metrics with error: ", err.Error())
+ return
+ }
+
+ // Format http metrics
+ metrics = make([]HttpMetric, len(valuesArray))
+ for index, values := range valuesArray {
+ metrics[index].LoggerName = loggerName
+ metrics[index].Direction = direction
+ metrics[index].Time = values[HttpLogTime]
+ metrics[index].Id = JsonNumToInt32(values[HttpLogId].(json.Number))
+ if val, ok := values[HttpUrl].(string); ok {
+ metrics[index].Url = val
+ }
+ if val, ok := values[HttpLogEndpoint].(string); ok {
+ metrics[index].Endpoint = val
+ }
+ if val, ok := values[HttpMethod].(string); ok {
+ metrics[index].Method = val
+ }
+ if val, ok := values[HttpBody].(string); ok {
+ metrics[index].Body = val
+ }
+ if val, ok := values[HttpRespBody].(string); ok {
+ metrics[index].RespBody = val
+ }
+ if val, ok := values[HttpRespCode].(string); ok {
+ metrics[index].RespCode = val
+ }
+ if val, ok := values[HttpProcTime].(string); ok {
+ metrics[index].ProcTime = val
+ }
+ }
+ return
+}
diff --git a/go-packages/meep-metric-store/http_test.go b/go-packages/meep-metric-store/http_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..cebe764a1c718e7b0a3bfbd130b525a55b5936f3
--- /dev/null
+++ b/go-packages/meep-metric-store/http_test.go
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2019 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package metricstore
+
+import (
+ "fmt"
+ "testing"
+
+ log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
+)
+
+const httpStoreName string = "http-store"
+const httpStoreNamespace string = "http-ns"
+const httpStoreInfluxAddr string = "http://localhost:30986"
+const httpStoreRedisAddr string = "localhost:30380"
+
+func TestHttpMetricsGetSet(t *testing.T) {
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ fmt.Println("Create valid Metric Store")
+ ms, err := NewMetricStore(httpStoreName, httpStoreNamespace, httpStoreInfluxAddr, httpStoreRedisAddr)
+ if err != nil {
+ t.Fatalf("Unable to create Metric Store")
+ }
+
+ fmt.Println("Flush store metrics")
+ ms.Flush()
+
+ fmt.Println("Set http metrics")
+ err = ms.SetHttpMetric(HttpMetric{"logger1", "RX", 1, "url1", "endpoint1", "method1", "body1", "respBody1", "201", "101", nil})
+ if err != nil {
+ t.Fatalf("Unable to set http metric")
+ }
+ err = ms.SetHttpMetric(HttpMetric{"logger1", "TX", 2, "url2", "endpoint2", "method2", "body2", "respBody2", "202", "102", nil})
+ if err != nil {
+ t.Fatalf("Unable to set http metric")
+ }
+ err = ms.SetHttpMetric(HttpMetric{"logger1", "TX", 3, "url3", "endpoint3", "method3", "body3", "respBody3", "203", "103", nil})
+ if err != nil {
+ t.Fatalf("Unable to set http metric")
+ }
+ err = ms.SetHttpMetric(HttpMetric{"logger2", "RX", 4, "url4", "endpoint4", "method4", "body4", "respBody4", "204", "104", nil})
+ if err != nil {
+ t.Fatalf("Unable to set http metric")
+ }
+
+ fmt.Println("Get http metrics")
+ _, err = ms.GetHttpMetric("logger3", "RX", "", 0)
+ if err == nil {
+ t.Fatalf("No metrics should be found for logger3")
+ }
+ h, err := ms.GetHttpMetric("logger1", "RX", "", 0)
+ if err != nil || len(h) != 1 {
+ t.Fatalf("Failed to get metric")
+ }
+ if !validateHttpMetric(h[0], "logger1", "RX", 1, "url1", "endpoint1", "method1", "body1", "respBody1", "201", "101") {
+ t.Fatalf("Invalid http metric")
+ }
+
+ h, err = ms.GetHttpMetric("logger1", "TX", "", 0)
+ if err != nil || len(h) != 2 {
+ t.Fatalf("Failed to get metric")
+ }
+ h, err = ms.GetHttpMetric("logger1", "", "", 0)
+ if err != nil || len(h) != 3 {
+ t.Fatalf("Failed to get metric")
+ }
+ h, err = ms.GetHttpMetric("", "RX", "", 0)
+ if err != nil || len(h) != 2 {
+ t.Fatalf("Failed to get metric")
+ }
+ h, err = ms.GetHttpMetric("logger1,logger2", "RX", "", 0)
+ if err != nil || len(h) != 2 {
+ t.Fatalf("Failed to get metric")
+ }
+
+ // t.Fatalf("DONE")
+}
+
+func validateHttpMetric(h HttpMetric, loggerName string, direction string, id int32, url string, endpoint string, method string, body string, respBody string, respCode string, procTime string) bool {
+ return h.LoggerName == loggerName && h.Direction == direction && h.Id == id && h.Url == url && h.Endpoint == endpoint && h.Method == method && h.Body == body && h.RespBody == respBody && h.RespCode == respCode && h.ProcTime == procTime
+}
diff --git a/go-packages/meep-metric-store/metric-store.go b/go-packages/meep-metric-store/metric-store.go
index 83630a6861c96ef88d6b0016c5deb55dda3581b4..48c1b19a3a331a6a1850a8677bdc50a3b1997001 100644
--- a/go-packages/meep-metric-store/metric-store.go
+++ b/go-packages/meep-metric-store/metric-store.go
@@ -22,6 +22,7 @@ import (
"strings"
"time"
+ dkm "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr"
log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
redis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis"
@@ -31,11 +32,11 @@ import (
// var start time.Time
-const defaultInfluxDBAddr = "http://meep-influxdb:8086"
+const defaultInfluxDBAddr = "http://meep-influxdb.default.svc.cluster.local:8086"
const dbMaxRetryCount = 2
const metricsDb = 0
-const moduleMetrics = "metric-store"
+const metricsKey = "metric-store:"
type Metric struct {
Name string
@@ -46,6 +47,8 @@ type Metric struct {
// MetricStore - Implements a metric store
type MetricStore struct {
name string
+ namespace string
+ baseKey string
addr string
connected bool
influxClient *influx.Client
@@ -54,10 +57,17 @@ type MetricStore struct {
}
// NewMetricStore - Creates and initialize a Metric Store instance
-func NewMetricStore(name string, influxAddr string, redisAddr string) (ms *MetricStore, err error) {
+func NewMetricStore(name string, namespace string, influxAddr string, redisAddr string) (ms *MetricStore, err error) {
+ // Validate input
+ if namespace == "" {
+ err = errors.New("Invalid namespace")
+ return nil, err
+ }
// Create new Metric Store instance
ms = new(MetricStore)
+ ms.namespace = namespace
+ ms.baseKey = dkm.GetKeyRoot(namespace) + metricsKey
// Connect to Redis DB
ms.redisClient, err = redis.NewConnector(redisAddr, metricsDb)
@@ -119,11 +129,14 @@ func (ms *MetricStore) connectInfluxDB(addr string) error {
// SetStore -
func (ms *MetricStore) SetStore(name string) error {
- // Remove dashes from name
- storeName := strings.Replace(name, "-", "", -1)
+ var storeName string
- // Create new DB if necessary.
- if storeName != "" {
+ if name != "" {
+ // Create store name using format: '
None
User's Edge Applications subscribing to Metrics measurements/events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+This API enables the Metrics Service to post metrics measurements/events to edge applications
None
User's Edge Applications subscribing to Metrics measurements/events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
## Overview
This API client was generated by the [swagger-codegen](https://github.com/swagger-api/swagger-codegen) project. By using the [swagger-spec](https://github.com/swagger-api/swagger-spec) from a remote server, you can easily generate an API client.
@@ -17,7 +17,7 @@ import "./client"
## Documentation for API Endpoints
-All URIs are relative to *http://172.0.0.1:8081/metrics/v2*
+All URIs are relative to *https://localhost/metrics-notif/v2*
Class | Method | HTTP request | Description
------------ | ------------- | ------------- | -------------
diff --git a/go-packages/meep-metrics-engine-notification-client/api/swagger.yaml b/go-packages/meep-metrics-engine-notification-client/api/swagger.yaml
index 923ac3ac528c464a1843fe520374f2d6f48f0a48..286af234cb1c3399acf8dea5f1034369ab8a67a7 100644
--- a/go-packages/meep-metrics-engine-notification-client/api/swagger.yaml
+++ b/go-packages/meep-metrics-engine-notification-client/api/swagger.yaml
@@ -4,9 +4,8 @@ info:
description: "This API enables the Metrics Service to post metrics measurements/events\
\ to edge applications
None
User's\
\ Edge Applications subscribing to Metrics measurements/events must implement\
- \ this API
API details available at _your-AdvantEDGE-ip-address:30000/api_\
- \
This API is not exposed by default on the AdvantEDGE\
- \ platform"
+ \ this API
API details available at _your-AdvantEDGE-ip-address/api_\
+ \
This API is not exposed by default on the AdvantEDGE platform"
version: "1.0.0"
title: "AdvantEDGE Metrics Service Notification REST API"
contact:
@@ -15,12 +14,9 @@ info:
license:
name: "Apache 2.0"
url: "https://github.com/InterDigitalInc/AdvantEDGE/blob/master/LICENSE"
-host: "172.0.0.1:8081"
-basePath: "/metrics/v2"
+basePath: "/metrics-notif/v2"
tags:
- name: "notifications"
-schemes:
-- "http"
consumes:
- "application/json"
produces:
@@ -262,30 +258,6 @@ definitions:
example:
event: "JSON-formatted mobility event ue1 to poa3"
time: "2019-11-24T12:45:00-5:00"
-parameters:
- Path.SubscriptionId:
- name: "subscriptionId"
- in: "path"
- description: "Identity of a notification subscription (network or event)"
- required: true
- type: "string"
- x-exportParamName: "SubscriptionId"
- Body.NetworkNotification:
- in: "body"
- name: "Notification"
- description: "Network Metrics Notification"
- required: true
- schema:
- $ref: "http://localhost:8291/meep-metrics-engine-model.yaml#/definitions/NetworkNotification"
- x-exportParamName: "Notification"
- Body.EventNotification:
- in: "body"
- name: "Notification"
- description: "Events Notification"
- required: true
- schema:
- $ref: "http://localhost:8291/meep-metrics-engine-model.yaml#/definitions/EventNotification"
- x-exportParamName: "Notification"
externalDocs:
description: "GitHub Wiki"
url: "https://github.com/InterDigitalInc/AdvantEDGE/wiki"
diff --git a/go-packages/meep-metrics-engine-notification-client/api_notifications.go b/go-packages/meep-metrics-engine-notification-client/api_notifications.go
index 972f8028703af388f12bacf3dc31818f0f9689f1..2f777336396e483a43ec3e47cf258e94b4f39bf9 100644
--- a/go-packages/meep-metrics-engine-notification-client/api_notifications.go
+++ b/go-packages/meep-metrics-engine-notification-client/api_notifications.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service Notification REST API
*
- * This API enables the Metrics Service to post metrics measurements/events to edge applications
None
User's Edge Applications subscribing to Metrics measurements/events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Metrics Service to post metrics measurements/events to edge applications
None
User's Edge Applications subscribing to Metrics measurements/events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-metrics-engine-notification-client/client.go b/go-packages/meep-metrics-engine-notification-client/client.go
index 7e13e052608b081f7b6a9928fe38184d95912b9e..dd2c5b94803e076e44463d2610f85c83dc25a52c 100644
--- a/go-packages/meep-metrics-engine-notification-client/client.go
+++ b/go-packages/meep-metrics-engine-notification-client/client.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service Notification REST API
*
- * This API enables the Metrics Service to post metrics measurements/events to edge applications
None
User's Edge Applications subscribing to Metrics measurements/events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Metrics Service to post metrics measurements/events to edge applications
None
User's Edge Applications subscribing to Metrics measurements/events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-metrics-engine-notification-client/configuration.go b/go-packages/meep-metrics-engine-notification-client/configuration.go
index 6dc31588d0bd5f4a115c3eb02156c8cc0a23acd6..b0cb1d9edd2007c2372d65d6d30dfa611c019847 100644
--- a/go-packages/meep-metrics-engine-notification-client/configuration.go
+++ b/go-packages/meep-metrics-engine-notification-client/configuration.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service Notification REST API
*
- * This API enables the Metrics Service to post metrics measurements/events to edge applications
None
User's Edge Applications subscribing to Metrics measurements/events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Metrics Service to post metrics measurements/events to edge applications
None
User's Edge Applications subscribing to Metrics measurements/events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -75,7 +75,7 @@ type Configuration struct {
func NewConfiguration() *Configuration {
cfg := &Configuration{
- BasePath: "http://172.0.0.1:8081/metrics/v2",
+ BasePath: "https://localhost/metrics-notif/v2",
DefaultHeader: make(map[string]string),
UserAgent: "Swagger-Codegen/1.0.0/go",
}
diff --git a/go-packages/meep-metrics-engine-notification-client/docs/NotificationsApi.md b/go-packages/meep-metrics-engine-notification-client/docs/NotificationsApi.md
index fe51b18e1ce95b8783191ca47692d71971a3b30d..621afcf845f6cf64ec36f41756cf61da1277ade2 100644
--- a/go-packages/meep-metrics-engine-notification-client/docs/NotificationsApi.md
+++ b/go-packages/meep-metrics-engine-notification-client/docs/NotificationsApi.md
@@ -1,6 +1,6 @@
# \NotificationsApi
-All URIs are relative to *http://172.0.0.1:8081/metrics/v2*
+All URIs are relative to *https://localhost/metrics-notif/v2*
Method | HTTP request | Description
------------- | ------------- | -------------
diff --git a/go-packages/meep-metrics-engine-notification-client/model_event_metric.go b/go-packages/meep-metrics-engine-notification-client/model_event_metric.go
index 6526c36f8d8bb3d63364e8caca0e07447d2dd0f0..a6fbaf539cb94c8419c1b4c230ff7e2531a7e6be 100644
--- a/go-packages/meep-metrics-engine-notification-client/model_event_metric.go
+++ b/go-packages/meep-metrics-engine-notification-client/model_event_metric.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service Notification REST API
*
- * This API enables the Metrics Service to post metrics measurements/events to edge applications
None
User's Edge Applications subscribing to Metrics measurements/events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Metrics Service to post metrics measurements/events to edge applications
None
User's Edge Applications subscribing to Metrics measurements/events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-metrics-engine-notification-client/model_event_metric_list.go b/go-packages/meep-metrics-engine-notification-client/model_event_metric_list.go
index b2d09fc64867db8683fd144600f9d1694f3fb42e..c3f31da71a6359b6ac0af62b1bd48668cd9f4775 100644
--- a/go-packages/meep-metrics-engine-notification-client/model_event_metric_list.go
+++ b/go-packages/meep-metrics-engine-notification-client/model_event_metric_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service Notification REST API
*
- * This API enables the Metrics Service to post metrics measurements/events to edge applications
None
User's Edge Applications subscribing to Metrics measurements/events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Metrics Service to post metrics measurements/events to edge applications
None
User's Edge Applications subscribing to Metrics measurements/events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-metrics-engine-notification-client/model_event_notification.go b/go-packages/meep-metrics-engine-notification-client/model_event_notification.go
index be77da8475add5df4c296378f3f7d26f3f3b0290..d5c1575faa0aba72f1ed730829a36ed186e6bd7d 100644
--- a/go-packages/meep-metrics-engine-notification-client/model_event_notification.go
+++ b/go-packages/meep-metrics-engine-notification-client/model_event_notification.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service Notification REST API
*
- * This API enables the Metrics Service to post metrics measurements/events to edge applications
None
User's Edge Applications subscribing to Metrics measurements/events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Metrics Service to post metrics measurements/events to edge applications
None
User's Edge Applications subscribing to Metrics measurements/events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-metrics-engine-notification-client/model_network_metric.go b/go-packages/meep-metrics-engine-notification-client/model_network_metric.go
index 45aa492928e676be54995a791bfa89da01695e15..aa684d21351800df7b941cf1d18c2525762a262e 100644
--- a/go-packages/meep-metrics-engine-notification-client/model_network_metric.go
+++ b/go-packages/meep-metrics-engine-notification-client/model_network_metric.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service Notification REST API
*
- * This API enables the Metrics Service to post metrics measurements/events to edge applications
None
User's Edge Applications subscribing to Metrics measurements/events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Metrics Service to post metrics measurements/events to edge applications
None
User's Edge Applications subscribing to Metrics measurements/events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-metrics-engine-notification-client/model_network_metric_list.go b/go-packages/meep-metrics-engine-notification-client/model_network_metric_list.go
index 64da3efbc3c558043a5eccab3d50d87cf97ec884..3703a8fbb38e97ce592243faa062c7cb50b85aa3 100644
--- a/go-packages/meep-metrics-engine-notification-client/model_network_metric_list.go
+++ b/go-packages/meep-metrics-engine-notification-client/model_network_metric_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service Notification REST API
*
- * This API enables the Metrics Service to post metrics measurements/events to edge applications
None
User's Edge Applications subscribing to Metrics measurements/events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Metrics Service to post metrics measurements/events to edge applications
None
User's Edge Applications subscribing to Metrics measurements/events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-metrics-engine-notification-client/model_network_notification.go b/go-packages/meep-metrics-engine-notification-client/model_network_notification.go
index 35e491b62611e0be6cb0fd9496a2ee0711b5d563..b4e3aa859e3aa8df4c1a54223eb49edb3bab650d 100644
--- a/go-packages/meep-metrics-engine-notification-client/model_network_notification.go
+++ b/go-packages/meep-metrics-engine-notification-client/model_network_notification.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service Notification REST API
*
- * This API enables the Metrics Service to post metrics measurements/events to edge applications
None
User's Edge Applications subscribing to Metrics measurements/events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Metrics Service to post metrics measurements/events to edge applications
None
User's Edge Applications subscribing to Metrics measurements/events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-metrics-engine-notification-client/response.go b/go-packages/meep-metrics-engine-notification-client/response.go
index c763a1e2b33466910daf91225ef9334b286f87c4..568744a9d4ef075b5446621792e6292f611bad97 100644
--- a/go-packages/meep-metrics-engine-notification-client/response.go
+++ b/go-packages/meep-metrics-engine-notification-client/response.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Metrics Service Notification REST API
*
- * This API enables the Metrics Service to post metrics measurements/events to edge applications
None
User's Edge Applications subscribing to Metrics measurements/events must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Metrics Service to post metrics measurements/events to edge applications
None
User's Edge Applications subscribing to Metrics measurements/events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-mg-app-client/README.md b/go-packages/meep-mg-app-client/README.md
index 3de070b01727fd5137cbc77e2a2cbc019bc1bf68..47287cc78c73df29cae0da89ceb9f77b8bf0e0df 100644
--- a/go-packages/meep-mg-app-client/README.md
+++ b/go-packages/meep-mg-app-client/README.md
@@ -1,6 +1,6 @@
# Go API client for client
-This API enables the Mobility Group Service to post state transfer events to edge applications
None
User's Edge Applications participating in a Mobility Group must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+This API enables the Mobility Group Service to post state transfer events to edge applications
None
User's Edge Applications participating in a Mobility Group must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
## Overview
This API client was generated by the [swagger-codegen](https://github.com/swagger-api/swagger-codegen) project. By using the [swagger-spec](https://github.com/swagger-api/swagger-spec) from a remote server, you can easily generate an API client.
@@ -17,7 +17,7 @@ import "./client"
## Documentation for API Endpoints
-All URIs are relative to *http://localhost/v1*
+All URIs are relative to *https://localhostmgm-notif/v1*
Class | Method | HTTP request | Description
------------ | ------------- | ------------- | -------------
diff --git a/go-packages/meep-mg-app-client/api/swagger.yaml b/go-packages/meep-mg-app-client/api/swagger.yaml
index 7bbd30bfefee6d46fafc75a3b2ad200c93dc08c9..6d354d380bb82ff9885af7bdba5482c943c0cfe0 100644
--- a/go-packages/meep-mg-app-client/api/swagger.yaml
+++ b/go-packages/meep-mg-app-client/api/swagger.yaml
@@ -4,9 +4,8 @@ info:
description: "This API enables the Mobility Group Service to post state transfer\
\ events to edge applications
None
User's\
\ Edge Applications participating in a Mobility Group must implement this API\
- \
API details available at _your-AdvantEDGE-ip-address:30000/api_\
- \
This API is not exposed by default on the AdvantEDGE\
- \ platform"
+ \
API details available at _your-AdvantEDGE-ip-address/api_\
+ \
This API is not exposed by default on the AdvantEDGE platform"
version: "1.0.0"
title: "AdvantEDGE Mobility Group Application Notification REST API"
contact:
@@ -15,11 +14,9 @@ info:
license:
name: "Apache 2.0"
url: "https://github.com/InterDigitalInc/AdvantEDGE/blob/master/LICENSE"
-basePath: "/v1"
+basePath: "mgm-notif/v1"
tags:
- name: "State Transfer"
-schemes:
-- "http"
consumes:
- "application/json"
produces:
diff --git a/go-packages/meep-mg-app-client/api_state_transfer.go b/go-packages/meep-mg-app-client/api_state_transfer.go
index cb99f59f0242804953364e2eb4d51903dd6809cb..ba0e0d5453cf7eb8eee1b95ec154fa9ff189d710 100644
--- a/go-packages/meep-mg-app-client/api_state_transfer.go
+++ b/go-packages/meep-mg-app-client/api_state_transfer.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Mobility Group Application Notification REST API
*
- * This API enables the Mobility Group Service to post state transfer events to edge applications
None
User's Edge Applications participating in a Mobility Group must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Mobility Group Service to post state transfer events to edge applications
None
User's Edge Applications participating in a Mobility Group must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-mg-app-client/client.go b/go-packages/meep-mg-app-client/client.go
index 9b7ff3c4badc82bdbe29e7e5e0f53d3c9cb1a7c8..ce6ed03d5076e1fd02c0e2e68347a1f1256a1810 100644
--- a/go-packages/meep-mg-app-client/client.go
+++ b/go-packages/meep-mg-app-client/client.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Mobility Group Application Notification REST API
*
- * This API enables the Mobility Group Service to post state transfer events to edge applications
None
User's Edge Applications participating in a Mobility Group must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Mobility Group Service to post state transfer events to edge applications
None
User's Edge Applications participating in a Mobility Group must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-mg-app-client/configuration.go b/go-packages/meep-mg-app-client/configuration.go
index dab71373ab226832812ed8ff15ea5173baf4af69..d99777ff6bcb19393dd0a2a0828fa9dc467d8953 100644
--- a/go-packages/meep-mg-app-client/configuration.go
+++ b/go-packages/meep-mg-app-client/configuration.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Mobility Group Application Notification REST API
*
- * This API enables the Mobility Group Service to post state transfer events to edge applications
None
User's Edge Applications participating in a Mobility Group must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Mobility Group Service to post state transfer events to edge applications
None
User's Edge Applications participating in a Mobility Group must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -75,7 +75,7 @@ type Configuration struct {
func NewConfiguration() *Configuration {
cfg := &Configuration{
- BasePath: "http://localhost/v1",
+ BasePath: "https://localhostmgm-notif/v1",
DefaultHeader: make(map[string]string),
UserAgent: "Swagger-Codegen/1.0.0/go",
}
diff --git a/go-packages/meep-mg-app-client/docs/StateTransferApi.md b/go-packages/meep-mg-app-client/docs/StateTransferApi.md
index 5933e90a8bd303e63a503063e6d79ef44693fd8a..c51850734913fe879636addf3d3b653585f21d3b 100644
--- a/go-packages/meep-mg-app-client/docs/StateTransferApi.md
+++ b/go-packages/meep-mg-app-client/docs/StateTransferApi.md
@@ -1,6 +1,6 @@
# \StateTransferApi
-All URIs are relative to *http://localhost/v1*
+All URIs are relative to *https://localhostmgm-notif/v1*
Method | HTTP request | Description
------------- | ------------- | -------------
diff --git a/go-packages/meep-mg-app-client/model_mobility_group_app_state.go b/go-packages/meep-mg-app-client/model_mobility_group_app_state.go
index 371d5be4807e01c7c2adfb934e1754a3ae24e6b4..f0fa3d2f61def685db3d6476b5bacfab51240cde 100644
--- a/go-packages/meep-mg-app-client/model_mobility_group_app_state.go
+++ b/go-packages/meep-mg-app-client/model_mobility_group_app_state.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Mobility Group Application Notification REST API
*
- * This API enables the Mobility Group Service to post state transfer events to edge applications
None
User's Edge Applications participating in a Mobility Group must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Mobility Group Service to post state transfer events to edge applications
None
User's Edge Applications participating in a Mobility Group must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-mg-app-client/model_mobility_group_event.go b/go-packages/meep-mg-app-client/model_mobility_group_event.go
index 40ca7c048ca12eb55547897e10473ec979c7558e..924c64b52ffef57d20e3614e5f4af8813524879f 100644
--- a/go-packages/meep-mg-app-client/model_mobility_group_event.go
+++ b/go-packages/meep-mg-app-client/model_mobility_group_event.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Mobility Group Application Notification REST API
*
- * This API enables the Mobility Group Service to post state transfer events to edge applications
None
User's Edge Applications participating in a Mobility Group must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Mobility Group Service to post state transfer events to edge applications
None
User's Edge Applications participating in a Mobility Group must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-mg-app-client/response.go b/go-packages/meep-mg-app-client/response.go
index 3695651d02b268d31fd48a1c117b4cbd36b9b8c3..7bced184af8228adab2fc01c02d06a2a5d50b22a 100644
--- a/go-packages/meep-mg-app-client/response.go
+++ b/go-packages/meep-mg-app-client/response.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Mobility Group Application Notification REST API
*
- * This API enables the Mobility Group Service to post state transfer events to edge applications
None
User's Edge Applications participating in a Mobility Group must implement this API
API details available at _your-AdvantEDGE-ip-address:30000/api_
This API is not exposed by default on the AdvantEDGE platform
+ * This API enables the Mobility Group Service to post state transfer events to edge applications
None
User's Edge Applications participating in a Mobility Group must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-mg-manager-client/README.md b/go-packages/meep-mg-manager-client/README.md
index 3643c1cc2563ca0a97d966190d9c154728001b25..047c018dd1f9c2f5e2d8c70543dce3592597c3c1 100644
--- a/go-packages/meep-mg-manager-client/README.md
+++ b/go-packages/meep-mg-manager-client/README.md
@@ -1,6 +1,6 @@
# Go API client for client
-Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
Edge Service used by edge applications to share user state between the Mobility Group members
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30005`
+Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
Edge Service used by edge applications to share user state between the Mobility Group members
API details available at _your-AdvantEDGE-ip-address/api_
## Overview
This API client was generated by the [swagger-codegen](https://github.com/swagger-api/swagger-codegen) project. By using the [swagger-spec](https://github.com/swagger-api/swagger-spec) from a remote server, you can easily generate an API client.
@@ -17,7 +17,7 @@ import "./client"
## Documentation for API Endpoints
-All URIs are relative to *http://localhost/v1*
+All URIs are relative to *https://localhost/mgm/v1*
Class | Method | HTTP request | Description
------------ | ------------- | ------------- | -------------
diff --git a/go-packages/meep-mg-manager-client/api/swagger.yaml b/go-packages/meep-mg-manager-client/api/swagger.yaml
index ef2bb8f88007a0c2c67dad3f0b4a795090604ee5..8ce89741d01c6318b9515fd9d3f85038e25a3132 100644
--- a/go-packages/meep-mg-manager-client/api/swagger.yaml
+++ b/go-packages/meep-mg-manager-client/api/swagger.yaml
@@ -6,7 +6,7 @@ info:
\
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)\
\
Edge Service used by edge applications to share user\
\ state between the Mobility Group members
API details available\
- \ at _your-AdvantEDGE-ip-address:30000/api_
`30005`"
+ \ at _your-AdvantEDGE-ip-address/api_"
version: "1.0.0"
title: "AdvantEDGE Mobility Group Service REST API"
contact:
@@ -15,12 +15,10 @@ info:
license:
name: "Apache 2.0"
url: "https://github.com/InterDigitalInc/AdvantEDGE/blob/master/LICENSE"
-basePath: "/v1"
+basePath: "/mgm/v1"
tags:
- name: "Membership"
- name: "State Transfer"
-schemes:
-- "http"
consumes:
- "application/json"
produces:
diff --git a/go-packages/meep-mg-manager-client/api_membership.go b/go-packages/meep-mg-manager-client/api_membership.go
index a11c11afbf791a2b960d9e64dc29e5c7c9d38b43..00157a0fb0b57b12b060ffebe296b2212f347bbc 100644
--- a/go-packages/meep-mg-manager-client/api_membership.go
+++ b/go-packages/meep-mg-manager-client/api_membership.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Mobility Group Service REST API
*
- * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
Edge Service used by edge applications to share user state between the Mobility Group members
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30005`
+ * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
Edge Service used by edge applications to share user state between the Mobility Group members
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-mg-manager-client/api_state_transfer.go b/go-packages/meep-mg-manager-client/api_state_transfer.go
index d0d15288a6863d64e6b7227992940d6096eb8c75..be650f5f753f467e2660cc4358ff483101ccbafe 100644
--- a/go-packages/meep-mg-manager-client/api_state_transfer.go
+++ b/go-packages/meep-mg-manager-client/api_state_transfer.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Mobility Group Service REST API
*
- * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
Edge Service used by edge applications to share user state between the Mobility Group members
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30005`
+ * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
Edge Service used by edge applications to share user state between the Mobility Group members
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-mg-manager-client/client.go b/go-packages/meep-mg-manager-client/client.go
index daa56ccb92bcf234ef5b495a37bb6deda0bd77b0..f5ad7463fec5677bd71cfca2f60d3215f22fc413 100644
--- a/go-packages/meep-mg-manager-client/client.go
+++ b/go-packages/meep-mg-manager-client/client.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Mobility Group Service REST API
*
- * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
Edge Service used by edge applications to share user state between the Mobility Group members
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30005`
+ * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
Edge Service used by edge applications to share user state between the Mobility Group members
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-mg-manager-client/configuration.go b/go-packages/meep-mg-manager-client/configuration.go
index 306a4ac3019e79c2c5f35bc9fa8190abb6df2bc5..1ca3bf34fc790368870849e5f54404585d9987e4 100644
--- a/go-packages/meep-mg-manager-client/configuration.go
+++ b/go-packages/meep-mg-manager-client/configuration.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Mobility Group Service REST API
*
- * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
Edge Service used by edge applications to share user state between the Mobility Group members
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30005`
+ * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
Edge Service used by edge applications to share user state between the Mobility Group members
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -75,7 +75,7 @@ type Configuration struct {
func NewConfiguration() *Configuration {
cfg := &Configuration{
- BasePath: "http://localhost/v1",
+ BasePath: "https://localhost/mgm/v1",
DefaultHeader: make(map[string]string),
UserAgent: "Swagger-Codegen/1.0.0/go",
}
diff --git a/go-packages/meep-mg-manager-client/docs/MembershipApi.md b/go-packages/meep-mg-manager-client/docs/MembershipApi.md
index 75bec95832f447250a13400decadb385041d43e8..9b36b3fb3d351171b5d82be356f0eada543e61ac 100644
--- a/go-packages/meep-mg-manager-client/docs/MembershipApi.md
+++ b/go-packages/meep-mg-manager-client/docs/MembershipApi.md
@@ -1,6 +1,6 @@
# \MembershipApi
-All URIs are relative to *http://localhost/v1*
+All URIs are relative to *https://localhost/mgm/v1*
Method | HTTP request | Description
------------- | ------------- | -------------
diff --git a/go-packages/meep-mg-manager-client/docs/StateTransferApi.md b/go-packages/meep-mg-manager-client/docs/StateTransferApi.md
index eb91607c4c6550f8bddf82959d501976e71f0209..bccf4ef5e5ca4492e250d4245717c0105387ae06 100644
--- a/go-packages/meep-mg-manager-client/docs/StateTransferApi.md
+++ b/go-packages/meep-mg-manager-client/docs/StateTransferApi.md
@@ -1,6 +1,6 @@
# \StateTransferApi
-All URIs are relative to *http://localhost/v1*
+All URIs are relative to *https://localhost/mgm/v1*
Method | HTTP request | Description
------------- | ------------- | -------------
diff --git a/go-packages/meep-mg-manager-client/model_mobility_group.go b/go-packages/meep-mg-manager-client/model_mobility_group.go
index 652c91bb3994da0b0496f3ec4fd64514c091bd0c..be55a05598fa62c1aaca8a35dfa7f7cccb325756 100644
--- a/go-packages/meep-mg-manager-client/model_mobility_group.go
+++ b/go-packages/meep-mg-manager-client/model_mobility_group.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Mobility Group Service REST API
*
- * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
Edge Service used by edge applications to share user state between the Mobility Group members
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30005`
+ * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
Edge Service used by edge applications to share user state between the Mobility Group members
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-mg-manager-client/model_mobility_group_app.go b/go-packages/meep-mg-manager-client/model_mobility_group_app.go
index 5b06ad6b4a6700abb2bb42fff0549ca04a0e9d19..327b315b2fd39c38e56370251933cb30dd2080b7 100644
--- a/go-packages/meep-mg-manager-client/model_mobility_group_app.go
+++ b/go-packages/meep-mg-manager-client/model_mobility_group_app.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Mobility Group Service REST API
*
- * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
Edge Service used by edge applications to share user state between the Mobility Group members
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30005`
+ * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
Edge Service used by edge applications to share user state between the Mobility Group members
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-mg-manager-client/model_mobility_group_app_state.go b/go-packages/meep-mg-manager-client/model_mobility_group_app_state.go
index 544c947cef0bc0e869544272c14e2549b744279b..02f6f3588118a67638ce29e1ec426a93f6c39fda 100644
--- a/go-packages/meep-mg-manager-client/model_mobility_group_app_state.go
+++ b/go-packages/meep-mg-manager-client/model_mobility_group_app_state.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Mobility Group Service REST API
*
- * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
Edge Service used by edge applications to share user state between the Mobility Group members
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30005`
+ * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
Edge Service used by edge applications to share user state between the Mobility Group members
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-mg-manager-client/model_mobility_group_ue.go b/go-packages/meep-mg-manager-client/model_mobility_group_ue.go
index 8175cfa1e4de9059425228fd36ef7d81f22c03a7..4b75f4b4e52a58042480d161299d0612f03f3e86 100644
--- a/go-packages/meep-mg-manager-client/model_mobility_group_ue.go
+++ b/go-packages/meep-mg-manager-client/model_mobility_group_ue.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Mobility Group Service REST API
*
- * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
Edge Service used by edge applications to share user state between the Mobility Group members
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30005`
+ * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
Edge Service used by edge applications to share user state between the Mobility Group members
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-mg-manager-client/response.go b/go-packages/meep-mg-manager-client/response.go
index 89e41796e094f5ecb4c3427d912ddcf13333fd94..242344b26359b8a704c8ea85d86481a8088b8b99 100644
--- a/go-packages/meep-mg-manager-client/response.go
+++ b/go-packages/meep-mg-manager-client/response.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*
* AdvantEDGE Mobility Group Service REST API
*
- * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
Edge Service used by edge applications to share user state between the Mobility Group members
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30005`
+ * Mobility Group Service allows to form groups formed multiple edge application instances and share user states automatically withing the group
[meep-mg-manager](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-mg-manager)
Edge Service used by edge applications to share user state between the Mobility Group members
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-mg-manager-model/model_mobility_group.go b/go-packages/meep-mg-manager-model/model_mobility_group.go
index e15b1ac162023d6d0ebbf7d0c203637195086810..3f0b39ee53a4eca5a9b8289e151e9b4b170a78ae 100644
--- a/go-packages/meep-mg-manager-model/model_mobility_group.go
+++ b/go-packages/meep-mg-manager-model/model_mobility_group.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
diff --git a/go-packages/meep-mg-manager-model/model_mobility_group_app.go b/go-packages/meep-mg-manager-model/model_mobility_group_app.go
index 8fcbd202c727a97e918a71c1484d6dc2b107dbdf..d451d523489299c6e3a53c0588f78ca5a9592610 100644
--- a/go-packages/meep-mg-manager-model/model_mobility_group_app.go
+++ b/go-packages/meep-mg-manager-model/model_mobility_group_app.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
diff --git a/go-packages/meep-mg-manager-model/model_mobility_group_app_state.go b/go-packages/meep-mg-manager-model/model_mobility_group_app_state.go
index 99ee83d72977651d80dfc20c81c88109633829a5..c852d766e69c0d06bc80fb7ff647f48732622d32 100644
--- a/go-packages/meep-mg-manager-model/model_mobility_group_app_state.go
+++ b/go-packages/meep-mg-manager-model/model_mobility_group_app_state.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
diff --git a/go-packages/meep-mg-manager-model/model_mobility_group_event.go b/go-packages/meep-mg-manager-model/model_mobility_group_event.go
index d2e2f98cebaba4a3dc94fd56a08d5be3c1db5979..07b339ec0d6a6eff1f28eafe5600ba62d231f3b1 100644
--- a/go-packages/meep-mg-manager-model/model_mobility_group_event.go
+++ b/go-packages/meep-mg-manager-model/model_mobility_group_event.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
diff --git a/go-packages/meep-mg-manager-model/model_mobility_group_service_map.go b/go-packages/meep-mg-manager-model/model_mobility_group_service_map.go
index f55057ea5aeabc7f23a0e7dc706a5d98699556c5..0d04f14f029c199837ae5e9323160099db6544ef 100644
--- a/go-packages/meep-mg-manager-model/model_mobility_group_service_map.go
+++ b/go-packages/meep-mg-manager-model/model_mobility_group_service_map.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
diff --git a/go-packages/meep-mg-manager-model/model_mobility_group_ue.go b/go-packages/meep-mg-manager-model/model_mobility_group_ue.go
index 2d8215544a3f36692e01152bce50ae465d2e6b4d..3f58b19dde653b322284c33f57ece62b0102435f 100644
--- a/go-packages/meep-mg-manager-model/model_mobility_group_ue.go
+++ b/go-packages/meep-mg-manager-model/model_mobility_group_ue.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
diff --git a/go-packages/meep-mg-manager-model/model_network_element.go b/go-packages/meep-mg-manager-model/model_network_element.go
index 21bf2d936869ac6b8aa789be2ccbe9deb60c6c15..b6ca73d678bd436cf88001468d58966165ac984a 100644
--- a/go-packages/meep-mg-manager-model/model_network_element.go
+++ b/go-packages/meep-mg-manager-model/model_network_element.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
diff --git a/go-packages/meep-mg-manager-model/model_network_element_list.go b/go-packages/meep-mg-manager-model/model_network_element_list.go
index 407b5088e19b84f87ffa6333fe8d280c6678fad8..c06ef1b224156cbdea1a887a14e352b630c612d3 100644
--- a/go-packages/meep-mg-manager-model/model_network_element_list.go
+++ b/go-packages/meep-mg-manager-model/model_network_element_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
diff --git a/go-packages/meep-model/go.mod b/go-packages/meep-model/go.mod
index 445be7e834dd01d779cabd0e7d64d6e475eb3570..69c9407df17dbf728b59dd1270dce82b5c451aed 100644
--- a/go-packages/meep-model/go.mod
+++ b/go-packages/meep-model/go.mod
@@ -3,7 +3,8 @@ module github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model
go 1.12
require (
- github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis v0.0.0
github.com/RyanCarrier/dijkstra v0.0.0-20190726134004-b51cadb5ae52
@@ -14,7 +15,8 @@ require (
)
replace (
- github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model => ../../go-packages/meep-ctrl-engine-model
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr => ../../go-packages/meep-data-key-mgr
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model => ../../go-packages/meep-data-model
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger => ../../go-packages/meep-logger
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis => ../../go-packages/meep-redis
)
diff --git a/go-packages/meep-model/go.sum b/go-packages/meep-model/go.sum
index c326c142e2393dbaa1940ce1f8564a3ffd03df44..89fd570b14125a975453625735aecd0b3ba47419 100644
--- a/go-packages/meep-model/go.sum
+++ b/go-packages/meep-model/go.sum
@@ -1,55 +1,35 @@
-github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db h1:Zkf5kwhxdW0xV7WM/crqIcOP5LCFGnAmumWSFAewJ74=
github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db/go.mod h1:RU+6d0CNIRSp6yo1mXLIIrnFa/3LHhvcDVLVJyovptM=
github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351 h1:1u1XrfCBnY+GijnyU6O1k4odp5TnqZQTsp5v7+n/E4Y=
github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351/go.mod h1:HxwfbuElTuGf+/uKZfjJrCnv0BmmpkPJDI7gBwj1KkM=
github.com/RyanCarrier/dijkstra v0.0.0-20190726134004-b51cadb5ae52 h1:trnwuu/Q8T59kgRjXcSDBODnyZP9wes+bnLn0lx4PgM=
github.com/RyanCarrier/dijkstra v0.0.0-20190726134004-b51cadb5ae52/go.mod h1:DdR6ymcLl8+sN/XOVNjnYO1NDYfgHskGjreZUDuQCTY=
-github.com/RyanCarrier/dijkstra-1 v0.0.0-20170512020943-0e5801a26345 h1:fgSpoKViTSqRb4hjDNj10ig5wUvO0CayCzFdLf6fuRM=
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/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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/go-redis/redis v6.15.2+incompatible h1:9SpNVG76gr6InJGxoZ6IuuxaCOQwDAhzyXg+Bs+0Sb4=
github.com/go-redis/redis v6.15.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
-github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
-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=
github.com/mattomatic/dijkstra v0.0.0-20130617153013-6f6d134eb237/go.mod h1:UOnLAUmVG5paym8pD3C4B9BQylUDC2vXFJJpT7JrlEA=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo=
github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME=
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-golang.org/x/net v0.0.0-20180906233101-161cd47e91fd h1:nTDtHvHSdCn1m6ITfMRqtOd/9+7a3s8RBNOZ3eYZzJA=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e h1:o3PsSEY8E4eXWkXrIP9YJALUkVZqzHJT5DOasTyn8Vs=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
-gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/go-packages/meep-model/model.go b/go-packages/meep-model/model.go
index 0db58b2c0542d2b918b0930601bbf1ddfa6fe22e..cb26f47c32491182028d004551a11c519269188f 100644
--- a/go-packages/meep-model/model.go
+++ b/go-packages/meep-model/model.go
@@ -23,80 +23,90 @@ import (
"strings"
"sync"
- ceModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model"
+ dkm "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr"
+ dataModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model"
log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
redis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis"
"github.com/RyanCarrier/dijkstra"
)
-// const activeScenarioEvents = "activeScenarioEvents"
-const ActiveScenarioEvents = "ctrl-engine-active"
+const activeKey = "active"
-// const activeScenarioKey = "activeScenarioKey"
-const activeScenarioKey = "ctrl-engine:active"
+var DbAddress = "meep-redis-master.default.svc.cluster.local:6379"
+var redisTable = 0
-// Event types (basic)
const (
- EventActivate = "ACTIVATE"
- EventTerminate = "TERMINATE"
- EventUpdate = "UPDATE"
+ NodeTypeScenario = "SCENARIO"
+ NodeTypeOperator = "OPERATOR"
+ NodeTypeOperatorCell = "OPERATOR-CELLULAR"
+ NodeTypeZone = "ZONE"
+ NodeTypePoa = "POA"
+ NodeTypePoaCell = "POA-CELLULAR"
+ NodeTypeUE = "UE"
+ NodeTypeFog = "FOG"
+ NodeTypeEdge = "EDGE"
+ NodeTypeCloud = "DC"
+ NodeTypeUEApp = "UE-APP"
+ NodeTypeEdgeApp = "EDGE-APP"
+ NodeTypeCloudApp = "CLOUD-APP"
)
const (
- NetCharScenario = "SCENARIO"
- NetCharOperator = "OPERATOR"
- NetCharZone = "ZONE"
- NetCharPoa = "POA"
- NetCharDC = "DISTANT CLOUD"
- NetCharEdge = "EDGE"
- NetCharFog = "FOG"
- NetCharUE = "UE"
- NetCharCloudApp = "CLOUD APPLICATION"
- NetCharEdgeApp = "EDGE APPLICATION"
- NetCharUEApp = "UE APPLICATION"
+ ScenarioAdd = "ADD"
+ ScenarioRemove = "REMOVE"
+ ScenarioModify = "MODIFY"
)
+// ModelCfg - Model Configuration
+type ModelCfg struct {
+ Name string
+ Namespace string
+ Module string
+ DbAddr string
+ UpdateCb func()
+}
+
// Model - Implements a Meep Model
type Model struct {
- name string
- module string
- Active bool
- subscribed bool
- ActiveChannel string
- activeKey string
- listener func(string, string)
- rc *redis.Connector
- scenario *ceModel.Scenario
- svcMap []ceModel.NodeServiceMaps
- nodeMap *NodeMap
- networkGraph *NetworkGraph
- lock sync.RWMutex
+ name string
+ namespace string
+ module string
+ Active bool
+ subscribed bool
+ activeKey string
+ updateCb func()
+ rc *redis.Connector
+ scenario *dataModel.Scenario
+ svcMap []dataModel.NodeServiceMaps
+ nodeMap *NodeMap
+ networkGraph *NetworkGraph
+ lock sync.RWMutex
}
-var DbAddress = "meep-redis-master:6379"
-var redisTable = 0
-
// NewModel - Create a model object
-func NewModel(dbAddr string, module string, name string) (m *Model, err error) {
- if name == "" {
+func NewModel(cfg ModelCfg) (m *Model, err error) {
+ if cfg.Name == "" {
err = errors.New("Missing name")
log.Error(err)
return nil, err
}
- if module == "" {
+ if cfg.Module == "" {
err = errors.New("Missing module")
log.Error(err)
return nil, err
}
m = new(Model)
- m.name = name
- m.module = module
+ m.name = cfg.Name
+ m.namespace = cfg.Namespace
+ m.module = cfg.Module
+ m.updateCb = cfg.UpdateCb
m.Active = false
m.subscribed = false
- m.ActiveChannel = ActiveScenarioEvents
- m.activeKey = activeScenarioKey
- m.scenario = new(ceModel.Scenario)
+ m.activeKey = dkm.GetKeyRoot(m.namespace) + activeKey
+ m.scenario = new(dataModel.Scenario)
+
+ // Process scenario
err = m.parseNodes()
if err != nil {
log.Error("Failed to parse nodes for new model: ", m.name)
@@ -105,21 +115,22 @@ func NewModel(dbAddr string, module string, name string) (m *Model, err error) {
}
// Connect to Redis DB
- m.rc, err = redis.NewConnector(dbAddr, redisTable)
+ m.rc, err = redis.NewConnector(cfg.DbAddr, redisTable)
if err != nil {
log.Error("Model ", m.name, " failed connection to Redis:")
log.Error(err)
return nil, err
}
+
log.Debug("[", m.module, "] Model created ", m.name)
return m, nil
}
// JSONMarshallScenarioList - Convert ScenarioList to JSON string
func JSONMarshallScenarioList(scenarioList [][]byte) (slStr string, err error) {
- var sl ceModel.ScenarioList
+ var sl dataModel.ScenarioList
for _, s := range scenarioList {
- var scenario ceModel.Scenario
+ var scenario dataModel.Scenario
err = json.Unmarshal(s, &scenario)
if err != nil {
return "", err
@@ -137,7 +148,7 @@ func JSONMarshallScenarioList(scenarioList [][]byte) (slStr string, err error) {
// JSONMarshallScenario - Convert ScenarioList to JSON string
func JSONMarshallScenario(scenario []byte) (sStr string, err error) {
- var s ceModel.Scenario
+ var s dataModel.Scenario
err = json.Unmarshal(scenario, &s)
if err != nil {
return "", err
@@ -153,7 +164,7 @@ func JSONMarshallScenario(scenario []byte) (sStr string, err error) {
// JSONMarshallReplayFileList - Convert ReplayFileList to JSON string
func JSONMarshallReplayFileList(replayFileNameList []string) (rlStr string, err error) {
- var rl ceModel.ReplayFileList
+ var rl dataModel.ReplayFileList
rl.ReplayFiles = replayFileNameList
json, err := json.Marshal(rl)
if err != nil {
@@ -165,7 +176,7 @@ func JSONMarshallReplayFileList(replayFileNameList []string) (rlStr string, err
// JSONMarshallReplay - Convert Replay to JSON string
func JSONMarshallReplay(replay []byte) (rStr string, err error) {
- var r ceModel.Replay
+ var r dataModel.Replay
err = json.Unmarshal(replay, &r)
if err != nil {
return "", err
@@ -184,7 +195,7 @@ func (m *Model) SetScenario(j []byte) (err error) {
m.lock.Lock()
defer m.lock.Unlock()
- scenario := new(ceModel.Scenario)
+ scenario := new(dataModel.Scenario)
err = json.Unmarshal(j, scenario)
if err != nil {
log.Error(err.Error())
@@ -231,12 +242,7 @@ func (m *Model) Activate() (err error) {
log.Error(err.Error())
return err
}
- log.Debug("TX-MSG [", m.ActiveChannel, "] ", EventActivate)
- err = m.rc.Publish(m.ActiveChannel, EventActivate)
- if err != nil {
- log.Error(err.Error())
- return err
- }
+
m.Active = true
return nil
}
@@ -252,50 +258,11 @@ func (m *Model) Deactivate() (err error) {
log.Error("Failed to delete entry: ", err.Error())
return err
}
- log.Debug("TX-MSG [", m.ActiveChannel, "] ", EventTerminate)
- err = m.rc.Publish(m.ActiveChannel, EventTerminate)
- if err != nil {
- log.Error("Failed to publish: ", err.Error())
- return err
- }
m.Active = false
}
return nil
}
-//Listen - Listen to scenario update events
-func (m *Model) Listen(handler func(string, string)) (err error) {
- m.lock.Lock()
- defer m.lock.Unlock()
-
- if handler == nil {
- return errors.New("Nil event handler")
- }
- if !m.subscribed {
- // Subscribe to Pub-Sub events for MEEP Controller
- err = m.rc.Subscribe(m.ActiveChannel)
- if err != nil {
- log.Error("Failed to subscribe to Pub/Sub events. Error: ", err)
- return err
- }
- log.Info("Subscribed to active scenario events (Redis)")
- m.subscribed = true
-
- m.listener = handler
-
- // Listen for events
- go func() {
- _ = m.rc.Listen(m.internalListener)
- }()
-
- // Generate first event to initialize
- go func() {
- m.internalListener(m.ActiveChannel, "")
- }()
- }
- return nil
-}
-
// MoveNode - Move a specific UE in the scenario
func (m *Model) MoveNode(nodeName string, destName string) (oldLocName string, newLocName string, err error) {
m.lock.Lock()
@@ -327,7 +294,7 @@ func (m *Model) MoveNode(nodeName string, destName string) (oldLocName string, n
}
// GetServiceMaps - Extracts the model service maps
-func (m *Model) GetServiceMaps() *[]ceModel.NodeServiceMaps {
+func (m *Model) GetServiceMaps() *[]dataModel.NodeServiceMaps {
m.lock.RLock()
defer m.lock.RUnlock()
@@ -335,7 +302,7 @@ func (m *Model) GetServiceMaps() *[]ceModel.NodeServiceMaps {
}
//UpdateNetChar - Update network characteristics for a node
-func (m *Model) UpdateNetChar(nc *ceModel.EventNetworkCharacteristicsUpdate) (err error) {
+func (m *Model) UpdateNetChar(nc *dataModel.EventNetworkCharacteristicsUpdate) (err error) {
m.lock.Lock()
defer m.lock.Unlock()
@@ -346,11 +313,11 @@ func (m *Model) UpdateNetChar(nc *ceModel.EventNetworkCharacteristicsUpdate) (er
ncType := strings.ToUpper(nc.ElementType)
// Find the element
- if ncType == NetCharScenario {
- m.scenario.Deployment.InterDomainLatency = nc.Latency
- m.scenario.Deployment.InterDomainLatencyVariation = nc.LatencyVariation
- m.scenario.Deployment.InterDomainThroughput = nc.Throughput
- m.scenario.Deployment.InterDomainPacketLoss = nc.PacketLoss
+ if ncType == NodeTypeScenario {
+ if m.scenario.Deployment.NetChar == nil {
+ m.scenario.Deployment.NetChar = new(dataModel.NetworkCharacteristics)
+ }
+ m.scenario.Deployment.NetChar = nc.NetChar
updated = true
} else {
n := m.nodeMap.FindByName(ncName)
@@ -358,57 +325,56 @@ func (m *Model) UpdateNetChar(nc *ceModel.EventNetworkCharacteristicsUpdate) (er
if n == nil {
return errors.New("Did not find " + ncName + " in scenario " + m.name)
}
- if ncType == NetCharOperator {
- domain := n.object.(*ceModel.Domain)
- domain.InterZoneLatency = nc.Latency
- domain.InterZoneLatencyVariation = nc.LatencyVariation
- domain.InterZoneThroughput = nc.Throughput
- domain.InterZonePacketLoss = nc.PacketLoss
+ if ncType == NodeTypeOperator || ncType == NodeTypeOperatorCell {
+ domain := n.object.(*dataModel.Domain)
+ if domain.NetChar == nil {
+ domain.NetChar = new(dataModel.NetworkCharacteristics)
+ }
+ domain.NetChar = nc.NetChar
updated = true
- } else if ncType == NetCharZone {
- zone := n.object.(*ceModel.Zone)
+ } else if ncType == NodeTypeZone {
+ zone := n.object.(*dataModel.Zone)
if zone.NetChar == nil {
- zone.NetChar = new(ceModel.NetworkCharacteristics)
+ zone.NetChar = new(dataModel.NetworkCharacteristics)
}
- zone.NetChar.Latency = nc.Latency
- zone.NetChar.LatencyVariation = nc.LatencyVariation
- zone.NetChar.Throughput = nc.Throughput
- zone.NetChar.PacketLoss = nc.PacketLoss
+ zone.NetChar = nc.NetChar
updated = true
- } else if ncType == NetCharPoa {
- nl := n.object.(*ceModel.NetworkLocation)
- nl.TerminalLinkLatency = nc.Latency
- nl.TerminalLinkLatencyVariation = nc.LatencyVariation
- nl.TerminalLinkThroughput = nc.Throughput
- nl.TerminalLinkPacketLoss = nc.PacketLoss
+ } else if ncType == NodeTypePoa || ncType == NodeTypePoaCell {
+ nl := n.object.(*dataModel.NetworkLocation)
+ if nl.NetChar == nil {
+ nl.NetChar = new(dataModel.NetworkCharacteristics)
+ }
+ nl.NetChar = nc.NetChar
updated = true
- } else if ncType == NetCharDC || ncType == NetCharEdge || ncType == NetCharFog || ncType == NetCharUE {
- pl := n.object.(*ceModel.PhysicalLocation)
- pl.LinkLatency = nc.Latency
- pl.LinkLatencyVariation = nc.LatencyVariation
- pl.LinkThroughput = nc.Throughput
- pl.LinkPacketLoss = nc.PacketLoss
+ } else if ncType == NodeTypeCloud || ncType == NodeTypeEdge || ncType == NodeTypeFog || ncType == NodeTypeUE {
+ pl := n.object.(*dataModel.PhysicalLocation)
+ if pl.NetChar == nil {
+ pl.NetChar = new(dataModel.NetworkCharacteristics)
+ }
+ pl.NetChar = nc.NetChar
updated = true
- } else if ncType == NetCharCloudApp || ncType == NetCharEdgeApp || ncType == NetCharUEApp {
- proc := n.object.(*ceModel.Process)
- proc.AppLatency = nc.Latency
- proc.AppLatencyVariation = nc.LatencyVariation
- proc.AppThroughput = nc.Throughput
- proc.AppPacketLoss = nc.PacketLoss
+ } else if ncType == NodeTypeCloudApp || ncType == NodeTypeEdgeApp || ncType == NodeTypeUEApp {
+ proc := n.object.(*dataModel.Process)
+ if proc.NetChar == nil {
+ proc.NetChar = new(dataModel.NetworkCharacteristics)
+ }
+ proc.NetChar = nc.NetChar
updated = true
} else {
err = errors.New("Unsupported type " + ncType + ". Supported types: " +
- NetCharScenario + ", " +
- NetCharOperator + ", " +
- NetCharZone + ", " +
- NetCharPoa + ", " +
- NetCharDC + ", " +
- NetCharEdge + ", " +
- NetCharFog + ", " +
- NetCharUE + ", " +
- NetCharCloudApp + ", " +
- NetCharEdgeApp + ", " +
- NetCharUEApp)
+ NodeTypeScenario + ", " +
+ NodeTypeOperator + ", " +
+ NodeTypeOperatorCell + ", " +
+ NodeTypeZone + ", " +
+ NodeTypePoa + ", " +
+ NodeTypePoaCell + ", " +
+ NodeTypeCloud + ", " +
+ NodeTypeEdge + ", " +
+ NodeTypeFog + ", " +
+ NodeTypeUE + ", " +
+ NodeTypeCloudApp + ", " +
+ NodeTypeEdgeApp + ", " +
+ NodeTypeUEApp)
}
}
if updated {
@@ -417,6 +383,142 @@ func (m *Model) UpdateNetChar(nc *ceModel.EventNetworkCharacteristicsUpdate) (er
return err
}
+// AddScenarioNode - Add scenario node
+func (m *Model) AddScenarioNode(node *dataModel.ScenarioNode) (err error) {
+ m.lock.Lock()
+ defer m.lock.Unlock()
+
+ if node == nil {
+ err = errors.New("node == nil")
+ return
+ }
+
+ // Find parent
+ parentNode := m.nodeMap.FindByName(node.Parent)
+ if parentNode == nil {
+ err = errors.New("Parent element " + node.Parent + " not found in scenario " + m.name)
+ return
+ }
+
+ // Add element based on type
+ if node.Type_ == NodeTypeUE {
+
+ // Get parent Network Location node & context information
+ if parentNode.nodeType != NodeTypePoa && parentNode.nodeType != NodeTypePoaCell {
+ err = errors.New("Invalid parent type: " + parentNode.nodeType)
+ return
+ }
+ nl := parentNode.object.(*dataModel.NetworkLocation)
+
+ // Validate Physical Location
+ if node.NodeDataUnion == nil || node.NodeDataUnion.PhysicalLocation == nil {
+ err = errors.New("Missing Physical Location")
+ return
+ }
+ pl := node.NodeDataUnion.PhysicalLocation
+ err = validatePL(pl)
+ if err != nil {
+ return
+ }
+
+ // Make sure node Name is unique
+ n := m.nodeMap.FindByName(pl.Name)
+ if n != nil {
+ err = errors.New("Element " + pl.Name + " already exists in scenario " + m.name)
+ return
+ }
+
+ // Remove any configured processes
+ pl.Processes = make([]dataModel.Process, 0)
+
+ // Add PL to parent NL
+ nl.PhysicalLocations = append(nl.PhysicalLocations, *pl)
+
+ // Refresh node map
+ err = m.parseNodes()
+ if err != nil {
+ log.Error(err.Error())
+ }
+ } else {
+ err = errors.New("Node type " + node.Type_ + " not supported")
+ return
+ }
+
+ // Update scenario
+ err = m.refresh()
+ return
+}
+
+// RemoveScenarioNode - Remove scenario node
+func (m *Model) RemoveScenarioNode(node *dataModel.ScenarioNode) (err error) {
+ m.lock.Lock()
+ defer m.lock.Unlock()
+
+ if node == nil {
+ err = errors.New("node == nil")
+ return
+ }
+
+ // Remove element based on type
+ if node.Type_ == NodeTypeUE {
+
+ // Get node name from request physical location
+ if node.NodeDataUnion == nil || node.NodeDataUnion.PhysicalLocation == nil {
+ err = errors.New("Missing Physical Location")
+ return
+ }
+ reqPL := node.NodeDataUnion.PhysicalLocation
+ nodeName := reqPL.Name
+
+ // Find node in scenario
+ n := m.nodeMap.FindByName(nodeName)
+ if n == nil {
+ err = errors.New("Element " + nodeName + " not found in scenario " + m.name)
+ return
+ }
+
+ // Currently support only PL with no processes
+ pl := n.object.(*dataModel.PhysicalLocation)
+ if pl == nil || len(pl.Processes) != 0 {
+ err = errors.New("Cannot remove PL with child processes")
+ return
+ }
+
+ // Get parent NL
+ nl := n.parent.(*dataModel.NetworkLocation)
+ if nl == nil {
+ err = errors.New("Parent node not found in scenario " + m.name)
+ return
+ }
+
+ // Get index of PL to remove
+ var index int
+ for i, pl := range nl.PhysicalLocations {
+ if pl.Name == n.name {
+ index = i
+ break
+ }
+ }
+
+ // Overwrite & truncate to remove PL from list
+ nl.PhysicalLocations[index] = nl.PhysicalLocations[len(nl.PhysicalLocations)-1]
+ nl.PhysicalLocations = nl.PhysicalLocations[:len(nl.PhysicalLocations)-1]
+
+ // Refresh node map
+ err = m.parseNodes()
+ if err != nil {
+ log.Error(err.Error())
+ }
+ } else {
+ err = errors.New("Node type " + node.Type_ + " not supported")
+ return
+ }
+
+ // Update scenario
+ err = m.refresh()
+ return
+}
+
//GetScenarioName - Get the scenario name
func (m *Model) GetScenarioName() string {
m.lock.RLock()
@@ -497,6 +599,19 @@ func (m *Model) GetNodeType(name string) (typ string) {
return typ
}
+// GetNodeParent - Get a parent node by its child name
+func (m *Model) GetNodeParent(name string) (parent interface{}) {
+ m.lock.RLock()
+ defer m.lock.RUnlock()
+
+ parent = ""
+ n := m.nodeMap.nameMap[name]
+ if n != nil {
+ parent = n.parent
+ }
+ return parent
+}
+
// GetNodeContext - Get a node context
// Returned value is of type interface{}
// Good practice: returned node should be type asserted with val,ok := node.(someType) to prevent panic
@@ -533,7 +648,7 @@ func (m *Model) parseNodes() (err error) {
deployment := m.scenario.Deployment
ctx := NewNodeContext(m.scenario.Name, "", "", "", "")
m.nodeMap.AddNode(NewNode(m.scenario.Name, "DEPLOYMENT", deployment, &deployment.Domains, m.scenario, ctx))
- m.svcMap = make([]ceModel.NodeServiceMaps, 0)
+ m.svcMap = make([]dataModel.NodeServiceMaps, 0)
// Domains
for iDomain := range m.scenario.Deployment.Domains {
@@ -572,7 +687,7 @@ func (m *Model) parseNodes() (err error) {
// Update service map for external processes
if proc.IsExternal {
- var nodeServiceMaps ceModel.NodeServiceMaps
+ var nodeServiceMaps dataModel.NodeServiceMaps
nodeServiceMaps.Node = proc.Name
nodeServiceMaps.IngressServiceMap = append(nodeServiceMaps.IngressServiceMap, proc.ExternalConfig.IngressServiceMap...)
nodeServiceMaps.EgressServiceMap = append(nodeServiceMaps.EgressServiceMap, proc.ExternalConfig.EgressServiceMap...)
@@ -600,26 +715,25 @@ func (m *Model) refresh() (err error) {
log.Error(err.Error())
return err
}
- log.Debug("TX-MSG [", m.ActiveChannel, "] ", EventUpdate)
- err = m.rc.Publish(m.ActiveChannel, EventUpdate)
- if err != nil {
- log.Error(err.Error())
- return err
+
+ // Invoke Active Scenario Update callback
+ if m.updateCb != nil {
+ m.updateCb()
}
}
return nil
}
func (m *Model) movePL(node *Node, destName string) (oldLocName string, newLocName string, err error) {
- var pl *ceModel.PhysicalLocation
- var oldNL *ceModel.NetworkLocation
- var newNL *ceModel.NetworkLocation
+ var pl *dataModel.PhysicalLocation
+ var oldNL *dataModel.NetworkLocation
+ var newNL *dataModel.NetworkLocation
// Node is a UE
- pl = node.object.(*ceModel.PhysicalLocation)
+ pl = node.object.(*dataModel.PhysicalLocation)
// fmt.Printf("+++ pl: %+v\n", pl)
- oldNL = node.parent.(*ceModel.NetworkLocation)
+ oldNL = node.parent.(*dataModel.NetworkLocation)
// fmt.Printf("+++ oldNL: %+v\n", oldNL)
if oldNL == nil {
return "", "", errors.New("MoveNode: " + node.name + " old location not found)")
@@ -630,7 +744,7 @@ func (m *Model) movePL(node *Node, destName string) (oldLocName string, newLocNa
if newNLNode == nil {
return "", "", errors.New("MoveNode: " + destName + " not found")
}
- newNL = newNLNode.object.(*ceModel.NetworkLocation)
+ newNL = newNLNode.object.(*dataModel.NetworkLocation)
// fmt.Printf("+++ newNL: %+v\n", newNL)
// Update location if necessary
@@ -665,12 +779,12 @@ func (m *Model) movePL(node *Node, destName string) (oldLocName string, newLocNa
}
func (m *Model) moveProc(node *Node, destName string) (oldLocName string, newLocName string, err error) {
- var proc *ceModel.Process
- var oldPL *ceModel.PhysicalLocation
- var newPL *ceModel.PhysicalLocation
+ var proc *dataModel.Process
+ var oldPL *dataModel.PhysicalLocation
+ var newPL *dataModel.PhysicalLocation
// Node is a process
- proc = node.object.(*ceModel.Process)
+ proc = node.object.(*dataModel.Process)
// fmt.Printf("+++ process: %+v\n", proc)
//process part of a mobility group can't be moved
if proc.ServiceConfig != nil {
@@ -679,7 +793,7 @@ func (m *Model) moveProc(node *Node, destName string) (oldLocName string, newLoc
}
}
- oldPL = node.parent.(*ceModel.PhysicalLocation)
+ oldPL = node.parent.(*dataModel.PhysicalLocation)
// fmt.Printf("+++ oldPL: %+v\n", oldPL)
if oldPL == nil {
return "", "", errors.New("MoveNode: " + node.name + " old location not found)")
@@ -690,7 +804,7 @@ func (m *Model) moveProc(node *Node, destName string) (oldLocName string, newLoc
if newPLNode == nil {
return "", "", errors.New("MoveNode: " + destName + " not found")
}
- newPL = newPLNode.object.(*ceModel.PhysicalLocation)
+ newPL = newPLNode.object.(*dataModel.PhysicalLocation)
// fmt.Printf("+++ newNL: %+v\n", newNL)
// Update location if necessary
@@ -718,7 +832,7 @@ func (m *Model) moveProc(node *Node, destName string) (oldLocName string, newLoc
return oldPL.Name, newPL.Name, nil
}
-func (m *Model) internalListener(channel string, payload string) {
+func (m *Model) UpdateScenario() {
// An update was received - Update the object state and call the external Handler
// Retrieve active scenario from DB
j, err := m.rc.JSONGetEntry(m.activeKey, ".")
@@ -726,14 +840,11 @@ func (m *Model) internalListener(channel string, payload string) {
if err != nil {
log.Debug("Scenario was deleted")
// Scenario was deleted
- m.scenario = new(ceModel.Scenario)
+ m.scenario = new(dataModel.Scenario)
_ = m.parseNodes()
} else {
_ = m.SetScenario([]byte(j))
}
-
- // external listener
- m.listener(channel, payload)
}
func isDefaultZone(typ string) bool {
diff --git a/go-packages/meep-model/model_test.go b/go-packages/meep-model/model_test.go
index 4979c388aa0c8387692af0945f4c44c29143652c..6dac5ea312328239b1811a58aa1130b216c1be1f 100644
--- a/go-packages/meep-model/model_test.go
+++ b/go-packages/meep-model/model_test.go
@@ -21,7 +21,7 @@ import (
"testing"
"time"
- ceModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model"
+ dataModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model"
log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
"github.com/blang/semver"
)
@@ -30,9 +30,12 @@ const modelRedisAddr string = "localhost:30380"
const modelRedisTestTable = 0
const modelName string = "test-model"
const moduleName string = "test-module"
-const testScenario string = `{"_id":"demo1","_rev":"5-905df5009b54170401d47031711afff7","name":"demo1","deployment":{"interDomainLatency":50,"interDomainLatencyVariation":5,"interDomainThroughput":1000,"domains":[{"id":"PUBLIC","name":"PUBLIC","type":"PUBLIC","interZoneLatency":6,"interZoneLatencyVariation":2,"interZoneThroughput":1000000,"zones":[{"id":"PUBLIC-COMMON","name":"PUBLIC-COMMON","type":"COMMON","interFogLatency":2,"interFogLatencyVariation":1,"interFogThroughput":1000000,"interEdgeLatency":3,"interEdgeLatencyVariation":1,"interEdgeThroughput":1000000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000000,"networkLocations":[{"id":"PUBLIC-COMMON-DEFAULT","name":"PUBLIC-COMMON-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"cloud1","name":"cloud1","type":"DC","processes":[{"id":"cloud1-iperf","name":"cloud1-iperf","type":"CLOUD-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT","commandExe":"/bin/bash","serviceConfig":{"name":"cloud1-iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"cloud1-svc","name":"cloud1-svc","type":"CLOUD-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=cloud1-svc, MGM_APP_ID=cloud1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"cloud1-svc","ports":[{"protocol":"TCP","port":80}]}}]}]}]}]},{"id":"operator1","name":"operator1","type":"OPERATOR","interZoneLatency":15,"interZoneLatencyVariation":3,"interZoneThroughput":1000,"zones":[{"id":"operator1-COMMON","name":"operator1-COMMON","type":"COMMON","interFogLatency":2,"interFogLatencyVariation":1,"interFogThroughput":1000000,"interEdgeLatency":3,"interEdgeLatencyVariation":1,"interEdgeThroughput":1000000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000000,"networkLocations":[{"id":"operator1-COMMON-DEFAULT","name":"operator1-COMMON-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1}]},{"id":"zone1","name":"zone1","type":"ZONE","interFogLatency":10,"interFogLatencyVariation":2,"interFogThroughput":1000,"interEdgeLatency":12,"interEdgeLatencyVariation":2,"interEdgeThroughput":1000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000,"networkLocations":[{"id":"zone1-DEFAULT","name":"zone1-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"zone1-edge1","name":"zone1-edge1","type":"EDGE","processes":[{"id":"zone1-edge1-iperf","name":"zone1-edge1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT","commandExe":"/bin/bash","serviceConfig":{"name":"zone1-edge1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone1-edge1-svc","name":"zone1-edge1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-edge1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone1-edge1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]}]},{"id":"zone1-poa1","name":"zone1-poa1","type":"POA","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":1000,"physicalLocations":[{"id":"zone1-fog1","name":"zone1-fog1","type":"FOG","processes":[{"id":"zone1-fog1-iperf","name":"zone1-fog1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT;","commandExe":"/bin/bash","serviceConfig":{"name":"zone1-fog1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone1-fog1-svc","name":"zone1-fog1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-fog1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone1-fog1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]},{"id":"ue1","name":"ue1","type":"UE","processes":[{"id":"ue1-iperf","name":"ue1-iperf","type":"UE-APP","image":"gophernet/iperf-client","commandArguments":"-c, export; iperf -u -c $IPERF_SERVICE_HOST -p $IPERF_SERVICE_PORT -t 3600 -b 50M;","commandExe":"/bin/bash"}]},{"id":"ue2-ext","name":"ue2-ext","type":"UE","isExternal":true,"processes":[{"id":"ue2-svc","name":"ue2-svc","type":"UE-APP","isExternal":true,"externalConfig":{"ingressServiceMap":[{"name":"svc","port":80,"externalPort":31111,"protocol":"TCP"},{"name":"iperf","port":80,"externalPort":31222,"protocol":"UDP"},{"name":"cloud1-svc","port":80,"externalPort":31112,"protocol":"TCP"},{"name":"cloud1-iperf","port":80,"externalPort":31223,"protocol":"UDP"}]}}]}]},{"id":"zone1-poa2","name":"zone1-poa2","type":"POA","terminalLinkLatency":10,"terminalLinkLatencyVariation":2,"terminalLinkThroughput":50}]},{"id":"zone2","name":"zone2","type":"ZONE","interFogLatency":10,"interFogLatencyVariation":2,"interFogThroughput":1000,"interEdgeLatency":12,"interEdgeLatencyVariation":2,"interEdgeThroughput":1000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000,"networkLocations":[{"id":"zone2-DEFAULT","name":"zone2-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"zone2-edge1","name":"zone2-edge1","type":"EDGE","processes":[{"id":"zone2-edge1-iperf","name":"zone2-edge1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT;","commandExe":"/bin/bash","serviceConfig":{"name":"zone2-edge1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone2-edge1-svc","name":"zone2-edge1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone2-edge1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone2-edge1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]}]},{"id":"zone2-poa1","name":"zone2-poa1","type":"POA","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":20}]}]}]}}`
+const moduleNamespace string = "test-ns"
const testScenario_v1_0_0 string = `{"version":"1.0.0","name":"demo1","deployment":{"interDomainLatency":50,"interDomainLatencyVariation":5,"interDomainThroughput":1000,"domains":[{"id":"PUBLIC","name":"PUBLIC","type":"PUBLIC","interZoneLatency":6,"interZoneLatencyVariation":2,"interZoneThroughput":1000000,"zones":[{"id":"PUBLIC-COMMON","name":"PUBLIC-COMMON","type":"COMMON","interFogLatency":2,"interFogLatencyVariation":1,"interFogThroughput":1000000,"interEdgeLatency":3,"interEdgeLatencyVariation":1,"interEdgeThroughput":1000000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000000,"networkLocations":[{"id":"PUBLIC-COMMON-DEFAULT","name":"PUBLIC-COMMON-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"cloud1","name":"cloud1","type":"DC","processes":[{"id":"cloud1-iperf","name":"cloud1-iperf","type":"CLOUD-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT","commandExe":"/bin/bash","serviceConfig":{"name":"cloud1-iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"cloud1-svc","name":"cloud1-svc","type":"CLOUD-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=cloud1-svc, MGM_APP_ID=cloud1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"cloud1-svc","ports":[{"protocol":"TCP","port":80}]}}]}]}]}]},{"id":"operator1","name":"operator1","type":"OPERATOR","interZoneLatency":15,"interZoneLatencyVariation":3,"interZoneThroughput":1000,"zones":[{"id":"operator1-COMMON","name":"operator1-COMMON","type":"COMMON","interFogLatency":2,"interFogLatencyVariation":1,"interFogThroughput":1000000,"interEdgeLatency":3,"interEdgeLatencyVariation":1,"interEdgeThroughput":1000000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000000,"networkLocations":[{"id":"operator1-COMMON-DEFAULT","name":"operator1-COMMON-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1}]},{"id":"zone1","name":"zone1","type":"ZONE","interFogLatency":10,"interFogLatencyVariation":2,"interFogThroughput":1000,"interEdgeLatency":12,"interEdgeLatencyVariation":2,"interEdgeThroughput":1000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000,"networkLocations":[{"id":"zone1-DEFAULT","name":"zone1-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"zone1-edge1","name":"zone1-edge1","type":"EDGE","processes":[{"id":"zone1-edge1-iperf","name":"zone1-edge1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT","commandExe":"/bin/bash","serviceConfig":{"name":"zone1-edge1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone1-edge1-svc","name":"zone1-edge1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-edge1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone1-edge1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]}]},{"id":"zone1-poa1","name":"zone1-poa1","type":"POA","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":1000,"physicalLocations":[{"id":"zone1-fog1","name":"zone1-fog1","type":"FOG","processes":[{"id":"zone1-fog1-iperf","name":"zone1-fog1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT;","commandExe":"/bin/bash","serviceConfig":{"name":"zone1-fog1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone1-fog1-svc","name":"zone1-fog1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-fog1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone1-fog1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]},{"id":"ue1","name":"ue1","type":"UE","processes":[{"id":"ue1-iperf","name":"ue1-iperf","type":"UE-APP","image":"gophernet/iperf-client","commandArguments":"-c, export; iperf -u -c $IPERF_SERVICE_HOST -p $IPERF_SERVICE_PORT -t 3600 -b 50M;","commandExe":"/bin/bash"}]},{"id":"ue2-ext","name":"ue2-ext","type":"UE","isExternal":true,"processes":[{"id":"ue2-svc","name":"ue2-svc","type":"UE-APP","isExternal":true,"externalConfig":{"ingressServiceMap":[{"name":"svc","port":80,"externalPort":31111,"protocol":"TCP"},{"name":"iperf","port":80,"externalPort":31222,"protocol":"UDP"},{"name":"cloud1-svc","port":80,"externalPort":31112,"protocol":"TCP"},{"name":"cloud1-iperf","port":80,"externalPort":31223,"protocol":"UDP"}]}}]}]},{"id":"zone1-poa2","name":"zone1-poa2","type":"POA","terminalLinkLatency":10,"terminalLinkLatencyVariation":2,"terminalLinkThroughput":50}]},{"id":"zone2","name":"zone2","type":"ZONE","interFogLatency":10,"interFogLatencyVariation":2,"interFogThroughput":1000,"interEdgeLatency":12,"interEdgeLatencyVariation":2,"interEdgeThroughput":1000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000,"networkLocations":[{"id":"zone2-DEFAULT","name":"zone2-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"zone2-edge1","name":"zone2-edge1","type":"EDGE","processes":[{"id":"zone2-edge1-iperf","name":"zone2-edge1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT;","commandExe":"/bin/bash","serviceConfig":{"name":"zone2-edge1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone2-edge1-svc","name":"zone2-edge1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone2-edge1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone2-edge1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]}]},{"id":"zone2-poa1","name":"zone2-poa1","type":"POA","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":20}]}]}]}}`
-const testScenario_v1_3_0 string = `{"version":"1.3.0","name":"demo1","deployment":{"interDomainLatency":50,"interDomainLatencyVariation":5,"interDomainThroughput":1000,"domains":[{"id":"PUBLIC","name":"PUBLIC","type":"PUBLIC","interZoneLatency":6,"interZoneLatencyVariation":2,"interZoneThroughput":1000000,"zones":[{"id":"PUBLIC-COMMON","name":"PUBLIC-COMMON","type":"COMMON","netChar":{"latency":5,"latencyVariation":1,"throughput":1000000},"networkLocations":[{"id":"PUBLIC-COMMON-DEFAULT","name":"PUBLIC-COMMON-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"cloud1","name":"cloud1","type":"DC","processes":[{"id":"cloud1-iperf","name":"cloud1-iperf","type":"CLOUD-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT","commandExe":"/bin/bash","serviceConfig":{"name":"cloud1-iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"cloud1-svc","name":"cloud1-svc","type":"CLOUD-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=cloud1-svc, MGM_APP_ID=cloud1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"cloud1-svc","ports":[{"protocol":"TCP","port":80}]}}]}]}]}]},{"id":"operator1","name":"operator1","type":"OPERATOR","interZoneLatency":15,"interZoneLatencyVariation":3,"interZoneThroughput":1000,"zones":[{"id":"operator1-COMMON","name":"operator1-COMMON","type":"COMMON","netChar":{"latency":5,"latencyVariation":1,"throughput":1000000},"networkLocations":[{"id":"operator1-COMMON-DEFAULT","name":"operator1-COMMON-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1}]},{"id":"zone1","name":"zone1","type":"ZONE","netChar":{"latency":5,"latencyVariation":1,"throughput":1000},"networkLocations":[{"id":"zone1-DEFAULT","name":"zone1-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"zone1-edge1","name":"zone1-edge1","type":"EDGE","processes":[{"id":"zone1-edge1-iperf","name":"zone1-edge1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT","commandExe":"/bin/bash","serviceConfig":{"name":"zone1-edge1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone1-edge1-svc","name":"zone1-edge1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-edge1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone1-edge1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]}]},{"id":"zone1-poa1","name":"zone1-poa1","type":"POA","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":1000,"physicalLocations":[{"id":"zone1-fog1","name":"zone1-fog1","type":"FOG","processes":[{"id":"zone1-fog1-iperf","name":"zone1-fog1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT;","commandExe":"/bin/bash","serviceConfig":{"name":"zone1-fog1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone1-fog1-svc","name":"zone1-fog1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-fog1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone1-fog1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]},{"id":"ue1","name":"ue1","type":"UE","processes":[{"id":"ue1-iperf","name":"ue1-iperf","type":"UE-APP","image":"gophernet/iperf-client","commandArguments":"-c, export; iperf -u -c $IPERF_SERVICE_HOST -p $IPERF_SERVICE_PORT -t 3600 -b 50M;","commandExe":"/bin/bash"}]},{"id":"ue2-ext","name":"ue2-ext","type":"UE","isExternal":true,"processes":[{"id":"ue2-svc","name":"ue2-svc","type":"UE-APP","isExternal":true,"externalConfig":{"ingressServiceMap":[{"name":"svc","port":80,"externalPort":31111,"protocol":"TCP"},{"name":"iperf","port":80,"externalPort":31222,"protocol":"UDP"},{"name":"cloud1-svc","port":80,"externalPort":31112,"protocol":"TCP"},{"name":"cloud1-iperf","port":80,"externalPort":31223,"protocol":"UDP"}]}}]}]},{"id":"zone1-poa2","name":"zone1-poa2","type":"POA","terminalLinkLatency":10,"terminalLinkLatencyVariation":2,"terminalLinkThroughput":50}]},{"id":"zone2","name":"zone2","type":"ZONE","netChar":{"latency":5,"latencyVariation":1,"throughput":1000},"networkLocations":[{"id":"zone2-DEFAULT","name":"zone2-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"zone2-edge1","name":"zone2-edge1","type":"EDGE","processes":[{"id":"zone2-edge1-iperf","name":"zone2-edge1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT;","commandExe":"/bin/bash","serviceConfig":{"name":"zone2-edge1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone2-edge1-svc","name":"zone2-edge1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone2-edge1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone2-edge1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]}]},{"id":"zone2-poa1","name":"zone2-poa1","type":"POA","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":20}]}]}]}}`
+const testScenario_v1_3_0 string = `{"version":"1.3.0","name":"demo1","deployment":{"interDomainLatency":50,"interDomainLatencyVariation":5,"interDomainThroughput":1000,"domains":[{"id":"PUBLIC","name":"PUBLIC","type":"PUBLIC","interZoneLatency":6,"interZoneLatencyVariation":2,"interZoneThroughput":1000000,"zones":[{"id":"PUBLIC-COMMON","name":"PUBLIC-COMMON","type":"COMMON","interFogLatency":2,"interFogLatencyVariation":1,"interFogThroughput":1000000,"interEdgeLatency":3,"interEdgeLatencyVariation":1,"interEdgeThroughput":1000000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000000,"networkLocations":[{"id":"PUBLIC-COMMON-DEFAULT","name":"PUBLIC-COMMON-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"cloud1","name":"cloud1","type":"DC","processes":[{"id":"cloud1-iperf","name":"cloud1-iperf","type":"CLOUD-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT","commandExe":"/bin/bash","serviceConfig":{"name":"cloud1-iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"cloud1-svc","name":"cloud1-svc","type":"CLOUD-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=cloud1-svc, MGM_APP_ID=cloud1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"cloud1-svc","ports":[{"protocol":"TCP","port":80}]}}]}]}]}]},{"id":"operator1","name":"operator1","type":"OPERATOR","interZoneLatency":15,"interZoneLatencyVariation":3,"interZoneThroughput":1000,"zones":[{"id":"operator1-COMMON","name":"operator1-COMMON","type":"COMMON","interFogLatency":2,"interFogLatencyVariation":1,"interFogThroughput":1000000,"interEdgeLatency":3,"interEdgeLatencyVariation":1,"interEdgeThroughput":1000000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000000,"networkLocations":[{"id":"operator1-COMMON-DEFAULT","name":"operator1-COMMON-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1}]},{"id":"zone1","name":"zone1","type":"ZONE","interFogLatency":10,"interFogLatencyVariation":2,"interFogThroughput":1000,"interEdgeLatency":12,"interEdgeLatencyVariation":2,"interEdgeThroughput":1000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000,"networkLocations":[{"id":"zone1-DEFAULT","name":"zone1-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"zone1-edge1","name":"zone1-edge1","type":"EDGE","processes":[{"id":"zone1-edge1-iperf","name":"zone1-edge1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT","commandExe":"/bin/bash","serviceConfig":{"name":"zone1-edge1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone1-edge1-svc","name":"zone1-edge1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-edge1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone1-edge1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]}]},{"id":"zone1-poa1","name":"zone1-poa1","type":"POA","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":1000,"physicalLocations":[{"id":"zone1-fog1","name":"zone1-fog1","type":"FOG","processes":[{"id":"zone1-fog1-iperf","name":"zone1-fog1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT;","commandExe":"/bin/bash","serviceConfig":{"name":"zone1-fog1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone1-fog1-svc","name":"zone1-fog1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-fog1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone1-fog1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]},{"id":"ue1","name":"ue1","type":"UE","processes":[{"id":"ue1-iperf","name":"ue1-iperf","type":"UE-APP","image":"gophernet/iperf-client","commandArguments":"-c, export; iperf -u -c $IPERF_SERVICE_HOST -p $IPERF_SERVICE_PORT -t 3600 -b 50M;","commandExe":"/bin/bash"}]},{"id":"ue2-ext","name":"ue2-ext","type":"UE","isExternal":true,"processes":[{"id":"ue2-svc","name":"ue2-svc","type":"UE-APP","isExternal":true,"externalConfig":{"ingressServiceMap":[{"name":"svc","port":80,"externalPort":31111,"protocol":"TCP"},{"name":"iperf","port":80,"externalPort":31222,"protocol":"UDP"},{"name":"cloud1-svc","port":80,"externalPort":31112,"protocol":"TCP"},{"name":"cloud1-iperf","port":80,"externalPort":31223,"protocol":"UDP"}]}}]}]},{"id":"zone1-poa2","name":"zone1-poa2","type":"POA","terminalLinkLatency":10,"terminalLinkLatencyVariation":2,"terminalLinkThroughput":50}]},{"id":"zone2","name":"zone2","type":"ZONE","interFogLatency":10,"interFogLatencyVariation":2,"interFogThroughput":1000,"interEdgeLatency":12,"interEdgeLatencyVariation":2,"interEdgeThroughput":1000,"edgeFogLatency":5,"edgeFogLatencyVariation":1,"edgeFogThroughput":1000,"networkLocations":[{"id":"zone2-DEFAULT","name":"zone2-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"zone2-edge1","name":"zone2-edge1","type":"EDGE","processes":[{"id":"zone2-edge1-iperf","name":"zone2-edge1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT;","commandExe":"/bin/bash","serviceConfig":{"name":"zone2-edge1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone2-edge1-svc","name":"zone2-edge1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone2-edge1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone2-edge1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]}]},{"id":"zone2-poa1","name":"zone2-poa1","type":"POA","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":20}]}]}]}}`
+const testScenario_v1_4_0 string = `{"version":"1.4.0","name":"demo1","deployment":{"interDomainLatency":50,"interDomainLatencyVariation":5,"interDomainThroughput":1000,"domains":[{"id":"PUBLIC","name":"PUBLIC","type":"PUBLIC","interZoneLatency":6,"interZoneLatencyVariation":2,"interZoneThroughput":1000000,"zones":[{"id":"PUBLIC-COMMON","name":"PUBLIC-COMMON","type":"COMMON","netChar":{"latency":5,"latencyVariation":1,"throughput":1000000},"networkLocations":[{"id":"PUBLIC-COMMON-DEFAULT","name":"PUBLIC-COMMON-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"cloud1","name":"cloud1","type":"DC","processes":[{"id":"cloud1-iperf","name":"cloud1-iperf","type":"CLOUD-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT","commandExe":"/bin/bash","serviceConfig":{"name":"cloud1-iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"cloud1-svc","name":"cloud1-svc","type":"CLOUD-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=cloud1-svc, MGM_APP_ID=cloud1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"cloud1-svc","ports":[{"protocol":"TCP","port":80}]}}]}]}]}]},{"id":"operator1","name":"operator1","type":"OPERATOR","interZoneLatency":15,"interZoneLatencyVariation":3,"interZoneThroughput":1000,"zones":[{"id":"operator1-COMMON","name":"operator1-COMMON","type":"COMMON","netChar":{"latency":5,"latencyVariation":1,"throughput":1000000},"networkLocations":[{"id":"operator1-COMMON-DEFAULT","name":"operator1-COMMON-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1}]},{"id":"zone1","name":"zone1","type":"ZONE","netChar":{"latency":5,"latencyVariation":1,"throughput":1000},"networkLocations":[{"id":"zone1-DEFAULT","name":"zone1-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"zone1-edge1","name":"zone1-edge1","type":"EDGE","processes":[{"id":"zone1-edge1-iperf","name":"zone1-edge1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT","commandExe":"/bin/bash","serviceConfig":{"name":"zone1-edge1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone1-edge1-svc","name":"zone1-edge1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-edge1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone1-edge1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]}]},{"id":"zone1-poa1","name":"zone1-poa1","type":"POA","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":1000,"physicalLocations":[{"id":"zone1-fog1","name":"zone1-fog1","type":"FOG","processes":[{"id":"zone1-fog1-iperf","name":"zone1-fog1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT;","commandExe":"/bin/bash","serviceConfig":{"name":"zone1-fog1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone1-fog1-svc","name":"zone1-fog1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-fog1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone1-fog1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]},{"id":"ue1","name":"ue1","type":"UE","processes":[{"id":"ue1-iperf","name":"ue1-iperf","type":"UE-APP","image":"gophernet/iperf-client","commandArguments":"-c, export; iperf -u -c $IPERF_SERVICE_HOST -p $IPERF_SERVICE_PORT -t 3600 -b 50M;","commandExe":"/bin/bash"}]},{"id":"ue2-ext","name":"ue2-ext","type":"UE","isExternal":true,"processes":[{"id":"ue2-svc","name":"ue2-svc","type":"UE-APP","isExternal":true,"externalConfig":{"ingressServiceMap":[{"name":"svc","port":80,"externalPort":31111,"protocol":"TCP"},{"name":"iperf","port":80,"externalPort":31222,"protocol":"UDP"},{"name":"cloud1-svc","port":80,"externalPort":31112,"protocol":"TCP"},{"name":"cloud1-iperf","port":80,"externalPort":31223,"protocol":"UDP"}]}}]}]},{"id":"zone1-poa2","name":"zone1-poa2","type":"POA","terminalLinkLatency":10,"terminalLinkLatencyVariation":2,"terminalLinkThroughput":50}]},{"id":"zone2","name":"zone2","type":"ZONE","netChar":{"latency":5,"latencyVariation":1,"throughput":1000},"networkLocations":[{"id":"zone2-DEFAULT","name":"zone2-DEFAULT","type":"DEFAULT","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":50000,"terminalLinkPacketLoss":1,"physicalLocations":[{"id":"zone2-edge1","name":"zone2-edge1","type":"EDGE","processes":[{"id":"zone2-edge1-iperf","name":"zone2-edge1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT;","commandExe":"/bin/bash","serviceConfig":{"name":"zone2-edge1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]}},{"id":"zone2-edge1-svc","name":"zone2-edge1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone2-edge1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone2-edge1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]}}]}]},{"id":"zone2-poa1","name":"zone2-poa1","type":"POA","terminalLinkLatency":1,"terminalLinkLatencyVariation":1,"terminalLinkThroughput":20}]}]}]}}`
+const testScenario_v1_5_0 string = `{"version":"1.5.0","name":"demo1","deployment":{"netChar":{"latency":50,"latencyVariation":5,"latencyDistribution":"Normal","throughputDl":1000,"throughputUl":1000},"domains":[{"id":"PUBLIC","name":"PUBLIC","type":"PUBLIC","netChar":{"latency":6,"latencyVariation":2,"throughputDl":1000000,"throughputUl":1000000},"zones":[{"id":"PUBLIC-COMMON","name":"PUBLIC-COMMON","type":"COMMON","netChar":{"latency":5,"latencyVariation":1,"throughputDl":1000000,"throughputUl":1000000},"networkLocations":[{"id":"PUBLIC-COMMON-DEFAULT","name":"PUBLIC-COMMON-DEFAULT","type":"DEFAULT","netChar":{"latency":1,"latencyVariation":1,"throughputDl":50000,"throughputUl":50000,"packetLoss":1},"physicalLocations":[{"id":"cloud1","name":"cloud1","type":"DC","processes":[{"id":"cloud1-iperf","name":"cloud1-iperf","type":"CLOUD-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT","commandExe":"/bin/bash","serviceConfig":{"name":"cloud1-iperf","ports":[{"protocol":"UDP","port":80}]},"netChar":{}},{"id":"cloud1-svc","name":"cloud1-svc","type":"CLOUD-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=cloud1-svc, MGM_APP_ID=cloud1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"cloud1-svc","ports":[{"protocol":"TCP","port":80}]},"netChar":{}}],"netChar":{}}]}]}]},{"id":"operator1","name":"operator1","type":"OPERATOR","netChar":{"latency":15,"latencyVariation":3,"throughputDl":1000,"throughputUl":1000},"zones":[{"id":"operator1-COMMON","name":"operator1-COMMON","type":"COMMON","netChar":{"latency":5,"latencyVariation":1,"throughputDl":1000000,"throughputUl":1000000},"networkLocations":[{"id":"operator1-COMMON-DEFAULT","name":"operator1-COMMON-DEFAULT","type":"DEFAULT","netChar":{"latency":1,"latencyVariation":1,"throughputDl":50000,"throughputUl":50000,"packetLoss":1}}]},{"id":"zone1","name":"zone1","type":"ZONE","netChar":{"latency":5,"latencyVariation":1,"throughputDl":1000,"throughputUl":1000},"networkLocations":[{"id":"zone1-DEFAULT","name":"zone1-DEFAULT","type":"DEFAULT","netChar":{"latency":1,"latencyVariation":1,"throughputDl":50000,"throughputUl":50000,"packetLoss":1},"physicalLocations":[{"id":"zone1-edge1","name":"zone1-edge1","type":"EDGE","processes":[{"id":"zone1-edge1-iperf","name":"zone1-edge1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT","commandExe":"/bin/bash","serviceConfig":{"name":"zone1-edge1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]},"netChar":{}},{"id":"zone1-edge1-svc","name":"zone1-edge1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-edge1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone1-edge1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]},"netChar":{}}],"netChar":{}}]},{"id":"zone1-poa1","name":"zone1-poa1","type":"POA","netChar":{"latency":1,"latencyVariation":1,"throughputDl":1000,"throughputUl":1000},"physicalLocations":[{"id":"zone1-fog1","name":"zone1-fog1","type":"FOG","processes":[{"id":"zone1-fog1-iperf","name":"zone1-fog1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT;","commandExe":"/bin/bash","serviceConfig":{"name":"zone1-fog1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]},"netChar":{}},{"id":"zone1-fog1-svc","name":"zone1-fog1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-fog1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone1-fog1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]},"netChar":{}}],"netChar":{}},{"id":"ue1","name":"ue1","type":"UE","processes":[{"id":"ue1-iperf","name":"ue1-iperf","type":"UE-APP","image":"gophernet/iperf-client","commandArguments":"-c, export; iperf -u -c $IPERF_SERVICE_HOST -p $IPERF_SERVICE_PORT -t 3600 -b 50M;","commandExe":"/bin/bash","netChar":{}}],"netChar":{}},{"id":"ue2-ext","name":"ue2-ext","type":"UE","isExternal":true,"processes":[{"id":"ue2-svc","name":"ue2-svc","type":"UE-APP","isExternal":true,"externalConfig":{"ingressServiceMap":[{"name":"svc","port":80,"externalPort":31111,"protocol":"TCP"},{"name":"iperf","port":80,"externalPort":31222,"protocol":"UDP"},{"name":"cloud1-svc","port":80,"externalPort":31112,"protocol":"TCP"},{"name":"cloud1-iperf","port":80,"externalPort":31223,"protocol":"UDP"}]},"netChar":{}}],"netChar":{}}]},{"id":"zone1-poa2","name":"zone1-poa2","type":"POA","netChar":{"latency":10,"latencyVariation":2,"throughputDl":50,"throughputUl":50}}]},{"id":"zone2","name":"zone2","type":"ZONE","netChar":{"latency":5,"latencyVariation":1,"throughputDl":1000,"throughputUl":1000},"networkLocations":[{"id":"zone2-DEFAULT","name":"zone2-DEFAULT","type":"DEFAULT","netChar":{"latency":1,"latencyVariation":1,"throughputDl":50000,"throughputUl":50000,"packetLoss":1},"physicalLocations":[{"id":"zone2-edge1","name":"zone2-edge1","type":"EDGE","processes":[{"id":"zone2-edge1-iperf","name":"zone2-edge1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT;","commandExe":"/bin/bash","serviceConfig":{"name":"zone2-edge1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]},"netChar":{}},{"id":"zone2-edge1-svc","name":"zone2-edge1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone2-edge1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone2-edge1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]},"netChar":{}}],"netChar":{}}]},{"id":"zone2-poa1","name":"zone2-poa1","type":"POA","netChar":{"latency":1,"latencyVariation":1,"throughputDl":20,"throughputUl":20}}]}]}]}}`
+const testScenario string = `{"name":"demo1","deployment":{"netChar":{"latency":50,"latencyVariation":5,"latencyDistribution":"Normal","throughputDl":1000,"throughputUl":1000},"domains":[{"id":"PUBLIC","name":"PUBLIC","type":"PUBLIC","netChar":{"latency":6,"latencyVariation":2,"throughputDl":1000000,"throughputUl":1000000},"zones":[{"id":"PUBLIC-COMMON","name":"PUBLIC-COMMON","type":"COMMON","netChar":{"latency":5,"latencyVariation":1,"throughputDl":1000000,"throughputUl":1000000},"networkLocations":[{"id":"PUBLIC-COMMON-DEFAULT","name":"PUBLIC-COMMON-DEFAULT","type":"DEFAULT","netChar":{"latency":1,"latencyVariation":1,"throughputDl":50000,"throughputUl":50000,"packetLoss":1},"physicalLocations":[{"id":"cloud1","name":"cloud1","type":"DC","processes":[{"id":"cloud1-iperf","name":"cloud1-iperf","type":"CLOUD-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT","commandExe":"/bin/bash","serviceConfig":{"name":"cloud1-iperf","ports":[{"protocol":"UDP","port":80}]},"netChar":{}},{"id":"cloud1-svc","name":"cloud1-svc","type":"CLOUD-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=cloud1-svc, MGM_APP_ID=cloud1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"cloud1-svc","ports":[{"protocol":"TCP","port":80}]},"netChar":{}}],"netChar":{}}]}]}]},{"id":"operator1","name":"operator1","type":"OPERATOR","netChar":{"latency":15,"latencyVariation":3,"throughputDl":1000,"throughputUl":1000},"zones":[{"id":"operator1-COMMON","name":"operator1-COMMON","type":"COMMON","netChar":{"latency":5,"latencyVariation":1,"throughputDl":1000000,"throughputUl":1000000},"networkLocations":[{"id":"operator1-COMMON-DEFAULT","name":"operator1-COMMON-DEFAULT","type":"DEFAULT","netChar":{"latency":1,"latencyVariation":1,"throughputDl":50000,"throughputUl":50000,"packetLoss":1}}]},{"id":"zone1","name":"zone1","type":"ZONE","netChar":{"latency":5,"latencyVariation":1,"throughputDl":1000,"throughputUl":1000},"networkLocations":[{"id":"zone1-DEFAULT","name":"zone1-DEFAULT","type":"DEFAULT","netChar":{"latency":1,"latencyVariation":1,"throughputDl":50000,"throughputUl":50000,"packetLoss":1},"physicalLocations":[{"id":"zone1-edge1","name":"zone1-edge1","type":"EDGE","processes":[{"id":"zone1-edge1-iperf","name":"zone1-edge1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT","commandExe":"/bin/bash","serviceConfig":{"name":"zone1-edge1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]},"netChar":{}},{"id":"zone1-edge1-svc","name":"zone1-edge1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-edge1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone1-edge1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]},"netChar":{}}],"netChar":{}}]},{"id":"zone1-poa1","name":"zone1-poa1","type":"POA","netChar":{"latency":1,"latencyVariation":1,"throughputDl":1000,"throughputUl":1000},"physicalLocations":[{"id":"zone1-fog1","name":"zone1-fog1","type":"FOG","processes":[{"id":"zone1-fog1-iperf","name":"zone1-fog1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT;","commandExe":"/bin/bash","serviceConfig":{"name":"zone1-fog1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]},"netChar":{}},{"id":"zone1-fog1-svc","name":"zone1-fog1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-fog1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone1-fog1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]},"netChar":{}}],"netChar":{}},{"id":"ue1","name":"ue1","type":"UE","processes":[{"id":"ue1-iperf","name":"ue1-iperf","type":"UE-APP","image":"gophernet/iperf-client","commandArguments":"-c, export; iperf -u -c $IPERF_SERVICE_HOST -p $IPERF_SERVICE_PORT -t 3600 -b 50M;","commandExe":"/bin/bash","netChar":{}}],"netChar":{}},{"id":"ue2-ext","name":"ue2-ext","type":"UE","isExternal":true,"processes":[{"id":"ue2-svc","name":"ue2-svc","type":"UE-APP","isExternal":true,"externalConfig":{"ingressServiceMap":[{"name":"svc","port":80,"externalPort":31111,"protocol":"TCP"},{"name":"iperf","port":80,"externalPort":31222,"protocol":"UDP"},{"name":"cloud1-svc","port":80,"externalPort":31112,"protocol":"TCP"},{"name":"cloud1-iperf","port":80,"externalPort":31223,"protocol":"UDP"}]},"netChar":{}}],"netChar":{}}]},{"id":"zone1-poa2","name":"zone1-poa2","type":"POA","netChar":{"latency":10,"latencyVariation":2,"throughputDl":50,"throughputUl":50}}]},{"id":"zone2","name":"zone2","type":"ZONE","netChar":{"latency":5,"latencyVariation":1,"throughputDl":1000,"throughputUl":1000},"networkLocations":[{"id":"zone2-DEFAULT","name":"zone2-DEFAULT","type":"DEFAULT","netChar":{"latency":1,"latencyVariation":1,"throughputDl":50000,"throughputUl":50000,"packetLoss":1},"physicalLocations":[{"id":"zone2-edge1","name":"zone2-edge1","type":"EDGE","processes":[{"id":"zone2-edge1-iperf","name":"zone2-edge1-iperf","type":"EDGE-APP","image":"gophernet/iperf-server","commandArguments":"-c, export; iperf -s -p $IPERF_SERVICE_PORT;","commandExe":"/bin/bash","serviceConfig":{"name":"zone2-edge1-iperf","meSvcName":"iperf","ports":[{"protocol":"UDP","port":80}]},"netChar":{}},{"id":"zone2-edge1-svc","name":"zone2-edge1-svc","type":"EDGE-APP","image":"meep-docker-registry:30001/demo-server","environment":"MGM_GROUP_NAME=svc, MGM_APP_ID=zone2-edge1-svc, MGM_APP_PORT=80","serviceConfig":{"name":"zone2-edge1-svc","meSvcName":"svc","ports":[{"protocol":"TCP","port":80}]},"netChar":{}}],"netChar":{}}]},{"id":"zone2-poa1","name":"zone2-poa1","type":"POA","netChar":{"latency":1,"latencyVariation":1,"throughputDl":20,"throughputUl":20}}]}]}]}}`
func TestNewModel(t *testing.T) {
fmt.Println("--- ", t.Name())
@@ -43,26 +46,30 @@ func TestNewModel(t *testing.T) {
// Keep this one first...
fmt.Println("Invalid Redis DB address")
- _, err := NewModel("ExpectedFailure-InvalidDbLocation", "test-mod", modelName)
+ cfg := ModelCfg{Name: modelName, Namespace: moduleNamespace, Module: "test-mod", DbAddr: "ExpectedFailure-InvalidDbLocation"}
+ _, err := NewModel(cfg)
if err == nil {
- t.Errorf("Should report error on invalid Redis db")
+ t.Fatalf("Should report error on invalid Redis db")
}
fmt.Println("Invalid module")
- _, err = NewModel(modelRedisAddr, "", modelName)
+ cfg = ModelCfg{Name: modelName, Namespace: moduleNamespace, Module: "", DbAddr: modelRedisAddr}
+ _, err = NewModel(cfg)
if err == nil {
- t.Errorf("Should report error on invalid module")
+ t.Fatalf("Should report error on invalid module")
}
fmt.Println("Create normal")
- _, err = NewModel(modelRedisAddr, "test-mod", modelName)
+ cfg = ModelCfg{Name: modelName, Namespace: moduleNamespace, Module: "test-mod", DbAddr: modelRedisAddr}
+ _, err = NewModel(cfg)
if err != nil {
- t.Errorf("Unable to create model")
+ t.Fatalf("Unable to create model")
}
fmt.Println("Create no name")
- _, err = NewModel(modelRedisAddr, "test-mod", "")
+ cfg = ModelCfg{Name: "", Module: "test-mod", DbAddr: modelRedisAddr}
+ _, err = NewModel(cfg)
if err == nil {
- t.Errorf("Should not allow creating model without a name")
+ t.Fatalf("Should not allow creating model without a name")
}
}
@@ -73,42 +80,43 @@ func TestGetSetScenario(t *testing.T) {
// Switch to a different table for testing
redisTable = modelRedisTestTable
- m, err := NewModel(modelRedisAddr, "test-mod", modelName)
+ cfg := ModelCfg{Name: modelName, Namespace: moduleNamespace, Module: "test-mod", DbAddr: modelRedisAddr}
+ m, err := NewModel(cfg)
if err != nil {
- t.Errorf("Unable to create model")
+ t.Fatalf("Unable to create model")
}
fmt.Println("GetSvcMap - error case")
svcMap := m.GetServiceMaps()
if len(*svcMap) != 0 {
- t.Errorf("Service map unexpected")
+ t.Fatalf("Service map unexpected")
}
fmt.Println("Set Model")
err = m.SetScenario([]byte(testScenario))
if err != nil {
- t.Errorf("Error setting model")
+ t.Fatalf("Error setting model")
}
if m.scenario.Name != "demo1" {
- t.Errorf("SetScenario failed")
+ t.Fatalf("SetScenario failed")
}
fmt.Println("Get Model")
s, err := m.GetScenario()
if err != nil {
- t.Errorf("Error getting scenario")
+ t.Fatalf("Error getting scenario")
}
if s == nil {
- t.Errorf("Error getting scenario")
+ t.Fatalf("Error getting scenario")
}
// if s.Name != "demo1" {
- // t.Errorf("GetModel failed")
+ // t.Fatalf("GetModel failed")
// }
fmt.Println("GetSvcMap - existing")
svcMap = m.GetServiceMaps()
if svcMap == nil {
- t.Errorf("Service map expected")
+ t.Fatalf("Service map expected")
}
}
@@ -119,32 +127,33 @@ func TestActivateDeactivate(t *testing.T) {
// Switch to a different table for testing
redisTable = modelRedisTestTable
- m, err := NewModel(modelRedisAddr, "test-mod", modelName)
+ cfg := ModelCfg{Name: modelName, Namespace: moduleNamespace, Module: "test-mod", DbAddr: modelRedisAddr}
+ m, err := NewModel(cfg)
if err != nil {
- t.Errorf("Unable to create model")
+ t.Fatalf("Unable to create model")
}
fmt.Println("Set model")
err = m.SetScenario([]byte(testScenario))
if err != nil {
- t.Errorf("Error setting model")
+ t.Fatalf("Error setting model")
}
if m.scenario.Name != "demo1" {
- t.Errorf("SetScenario failed")
+ t.Fatalf("SetScenario failed")
}
fmt.Println("Activate model")
err = m.Activate()
if err != nil {
- t.Errorf("Error activating model")
+ t.Fatalf("Error activating model")
}
fmt.Println("Set model")
err = m.SetScenario([]byte(testScenario))
if err != nil {
- t.Errorf("Error updating model")
+ t.Fatalf("Error updating model")
}
fmt.Println("Deactivate model")
err = m.Deactivate()
if err != nil {
- t.Errorf("Error deactivating model")
+ t.Fatalf("Error deactivating model")
}
}
@@ -155,130 +164,131 @@ func TestMoveNode(t *testing.T) {
// Switch to a different table for testing
redisTable = modelRedisTestTable
- m, err := NewModel(modelRedisAddr, "test-mod", modelName)
+ cfg := ModelCfg{Name: modelName, Namespace: moduleNamespace, Module: "test-mod", DbAddr: modelRedisAddr}
+ m, err := NewModel(cfg)
if err != nil {
- t.Errorf("Unable to create model")
+ t.Fatalf("Unable to create model")
}
fmt.Println("Set Model")
err = m.SetScenario([]byte(testScenario))
if err != nil {
- t.Errorf("Error setting model")
+ t.Fatalf("Error setting model")
}
if m.scenario.Name != "demo1" {
- t.Errorf("SetScenario failed")
+ t.Fatalf("SetScenario failed")
}
fmt.Println("Move ue1")
old, new, err := m.MoveNode("ue1", "zone2-poa1")
if err != nil {
- t.Errorf("Error moving UE")
+ t.Fatalf("Error moving UE")
}
if old != "zone1-poa1" {
- t.Errorf("Move Node - wrong origin Location " + old)
+ t.Fatalf("Move Node - wrong origin Location " + old)
}
if new != "zone2-poa1" {
- t.Errorf("Move Node - wrong destination Location " + new)
+ t.Fatalf("Move Node - wrong destination Location " + new)
}
fmt.Println("Move ue2-ext")
old, new, err = m.MoveNode("ue2-ext", "zone2-poa1")
if err != nil {
- t.Errorf("Error moving UE")
+ t.Fatalf("Error moving UE")
}
if old != "zone1-poa1" {
- t.Errorf("Move Node - wrong origin Location " + old)
+ t.Fatalf("Move Node - wrong origin Location " + old)
}
if new != "zone2-poa1" {
- t.Errorf("Move Node - wrong destination Location " + new)
+ t.Fatalf("Move Node - wrong destination Location " + new)
}
fmt.Println("Move ue1 back")
old, new, err = m.MoveNode("ue1", "zone1-poa1")
if err != nil {
- t.Errorf("Error moving UE")
+ t.Fatalf("Error moving UE")
}
if old != "zone2-poa1" {
- t.Errorf("Move Node - wrong origin Location " + old)
+ t.Fatalf("Move Node - wrong origin Location " + old)
}
if new != "zone1-poa1" {
- t.Errorf("Move Node - wrong destination Location " + new)
+ t.Fatalf("Move Node - wrong destination Location " + new)
}
fmt.Println("Move ue2-ext back")
old, new, err = m.MoveNode("ue2-ext", "zone1-poa1")
if err != nil {
- t.Errorf("Error moving UE")
+ t.Fatalf("Error moving UE")
}
if old != "zone2-poa1" {
- t.Errorf("Move Node - wrong origin Location " + old)
+ t.Fatalf("Move Node - wrong origin Location " + old)
}
if new != "zone1-poa1" {
- t.Errorf("Move Node - wrong destination Location " + new)
+ t.Fatalf("Move Node - wrong destination Location " + new)
}
fmt.Println("Move ue2-ext again")
old, new, err = m.MoveNode("ue2-ext", "zone2-poa1")
if err != nil {
- t.Errorf("Error moving UE")
+ t.Fatalf("Error moving UE")
}
if old != "zone1-poa1" {
- t.Errorf("Move Node - wrong origin Location " + old)
+ t.Fatalf("Move Node - wrong origin Location " + old)
}
if new != "zone2-poa1" {
- t.Errorf("Move Node - wrong destination Location " + new)
+ t.Fatalf("Move Node - wrong destination Location " + new)
}
fmt.Println("Move ue1")
old, new, err = m.MoveNode("ue1", "zone2-poa1")
if err != nil {
- t.Errorf("Error moving UE")
+ t.Fatalf("Error moving UE")
}
if old != "zone1-poa1" {
- t.Errorf("Move Node - wrong origin Location " + old)
+ t.Fatalf("Move Node - wrong origin Location " + old)
}
if new != "zone2-poa1" {
- t.Errorf("Move Node - wrong destination Location " + new)
+ t.Fatalf("Move Node - wrong destination Location " + new)
}
fmt.Println("Move ue1 back again")
old, new, err = m.MoveNode("ue1", "zone1-poa1")
if err != nil {
- t.Errorf("Error moving UE")
+ t.Fatalf("Error moving UE")
}
if old != "zone2-poa1" {
- t.Errorf("Move Node - wrong origin Location " + old)
+ t.Fatalf("Move Node - wrong origin Location " + old)
}
if new != "zone1-poa1" {
- t.Errorf("Move Node - wrong destination Location " + new)
+ t.Fatalf("Move Node - wrong destination Location " + new)
}
fmt.Println("Move zone1-edge1-iperf")
_, _, err = m.MoveNode("zone1-edge1-iperf", "zone2-edge2")
if err == nil {
- t.Errorf("Moving Edge-App part of mobility group should not be allowed")
+ t.Fatalf("Moving Edge-App part of mobility group should not be allowed")
}
fmt.Println("Move zone1-edge1-iperf")
// Remove mobility group
node := m.nodeMap.FindByName("zone1-edge1-iperf")
if node == nil {
- t.Errorf("unable to find node")
+ t.Fatalf("unable to find node")
}
- proc := node.object.(*ceModel.Process)
+ proc := node.object.(*dataModel.Process)
proc.ServiceConfig.MeSvcName = ""
old, new, err = m.MoveNode("zone1-edge1-iperf", "zone2-edge1")
if err != nil {
- t.Errorf("Error moving Edge-App")
+ t.Fatalf("Error moving Edge-App")
}
if old != "zone1-edge1" {
- t.Errorf("Move Node - wrong origin Location " + old)
+ t.Fatalf("Move Node - wrong origin Location " + old)
}
if new != "zone2-edge1" {
- t.Errorf("Move Node - wrong destination Location " + new)
+ t.Fatalf("Move Node - wrong destination Location " + new)
}
fmt.Println("Move Node - not a UE")
_, _, err = m.MoveNode("Not-a-UE", "zone1-poa1")
if err == nil {
- t.Errorf("Error moving UE - inexisting UE")
+ t.Fatalf("Error moving UE - inexisting UE")
}
fmt.Println("Move Node - not a PoA")
_, _, err = m.MoveNode("ue1", "Not-a-poa")
if err == nil {
- t.Errorf("Error moving UE - inexisting PoA")
+ t.Fatalf("Error moving UE - inexisting PoA")
}
}
@@ -290,265 +300,306 @@ func TestUpdateNetChar(t *testing.T) {
// Switch to a different table for testing
redisTable = modelRedisTestTable
- m, err := NewModel(modelRedisAddr, "test-mod", modelName)
+ cfg := ModelCfg{Name: modelName, Namespace: moduleNamespace, Module: "test-mod", DbAddr: modelRedisAddr}
+ m, err := NewModel(cfg)
if err != nil {
- t.Errorf("Unable to create model")
+ t.Fatalf("Unable to create model")
}
fmt.Println("Set Model")
err = m.SetScenario([]byte(testScenario))
if err != nil {
- t.Errorf("Error setting model")
+ t.Fatalf("Error setting model")
}
if m.scenario.Name != "demo1" {
- t.Errorf("SetScenario failed")
+ t.Fatalf("SetScenario failed")
}
- var nc ceModel.EventNetworkCharacteristicsUpdate
+ var nc dataModel.EventNetworkCharacteristicsUpdate
nc.ElementName = "demo1"
- nc.ElementType = "SCENARIO"
- nc.Latency = 1
- nc.LatencyVariation = 2
- nc.Throughput = 3
- nc.PacketLoss = 4
+ nc.ElementType = NodeTypeScenario
+ var netChar dataModel.NetworkCharacteristics
+ netChar.Latency = 1
+ netChar.LatencyVariation = 2
+ netChar.LatencyDistribution = "Normal"
+ netChar.ThroughputDl = 3
+ netChar.ThroughputUl = 5
+ netChar.PacketLoss = 4
+ nc.NetChar = &netChar
err = m.UpdateNetChar(&nc)
if err != nil {
- t.Errorf("Update " + nc.ElementType + " failed")
+ t.Fatalf("Update " + nc.ElementType + " failed")
+ }
+ if m.scenario.Deployment.NetChar.Latency != 1 {
+ t.Fatalf("Update " + nc.ElementType + " latency failed")
}
- if m.scenario.Deployment.InterDomainLatency != 1 {
- t.Errorf("Update " + nc.ElementType + " latency failed")
+ if m.scenario.Deployment.NetChar.LatencyVariation != 2 {
+ t.Fatalf("Update " + nc.ElementType + " jitter failed")
}
- if m.scenario.Deployment.InterDomainLatencyVariation != 2 {
- t.Errorf("Update " + nc.ElementType + " jitter failed")
+ if m.scenario.Deployment.NetChar.LatencyDistribution != "Normal" {
+ t.Fatalf("Update " + nc.ElementType + " distribution failed")
}
- if m.scenario.Deployment.InterDomainThroughput != 3 {
- t.Errorf("Update " + nc.ElementType + " throughput failed")
+ if m.scenario.Deployment.NetChar.ThroughputDl != 3 {
+ t.Fatalf("Update " + nc.ElementType + " throughputDl failed")
}
- if m.scenario.Deployment.InterDomainPacketLoss != 4 {
- t.Errorf("Update " + nc.ElementType + " packet loss failed")
+ if m.scenario.Deployment.NetChar.ThroughputUl != 5 {
+ t.Fatalf("Update " + nc.ElementType + " throughputUl failed")
+ }
+ if m.scenario.Deployment.NetChar.PacketLoss != 4 {
+ t.Fatalf("Update " + nc.ElementType + " packet loss failed")
}
nc.ElementName = "operator1"
- nc.ElementType = "OPERATOR"
+ nc.ElementType = NodeTypeOperator
err = m.UpdateNetChar(&nc)
if err != nil {
- t.Errorf("Update " + nc.ElementType + " failed")
+ t.Fatalf("Update " + nc.ElementType + " failed")
}
n := m.nodeMap.FindByName(nc.ElementName)
- d := n.object.(*ceModel.Domain)
- if d.InterZoneLatency != 1 {
- t.Errorf("Update " + nc.ElementType + " latency failed")
+ d := n.object.(*dataModel.Domain)
+ if d.NetChar.Latency != 1 {
+ t.Fatalf("Update " + nc.ElementType + " latency failed")
+ }
+ if d.NetChar.LatencyVariation != 2 {
+ t.Fatalf("Update " + nc.ElementType + " jitter failed")
}
- if d.InterZoneLatencyVariation != 2 {
- t.Errorf("Update " + nc.ElementType + " jitter failed")
+ if d.NetChar.ThroughputDl != 3 {
+ t.Fatalf("Update " + nc.ElementType + " throughput failed")
}
- if d.InterZoneThroughput != 3 {
- t.Errorf("Update " + nc.ElementType + " throughput failed")
+ if d.NetChar.ThroughputUl != 5 {
+ t.Fatalf("Update " + nc.ElementType + " throughput failed")
}
- if d.InterZonePacketLoss != 4 {
- t.Errorf("Update " + nc.ElementType + " packet loss failed")
+ if d.NetChar.PacketLoss != 4 {
+ t.Fatalf("Update " + nc.ElementType + " packet loss failed")
}
nc.ElementName = "zone1"
- nc.ElementType = "ZONE"
+ nc.ElementType = NodeTypeZone
err = m.UpdateNetChar(&nc)
if err != nil {
- t.Errorf("Update " + nc.ElementType + " failed")
+ t.Fatalf("Update " + nc.ElementType + " failed")
}
n = m.nodeMap.FindByName(nc.ElementName)
- z := n.object.(*ceModel.Zone)
+ z := n.object.(*dataModel.Zone)
if z.NetChar.Latency != 1 {
- t.Errorf("Update " + nc.ElementType + " latency failed")
+ t.Fatalf("Update " + nc.ElementType + " latency failed")
}
if z.NetChar.LatencyVariation != 2 {
- t.Errorf("Update " + nc.ElementType + " jitter failed")
+ t.Fatalf("Update " + nc.ElementType + " jitter failed")
}
- if z.NetChar.Throughput != 3 {
- t.Errorf("Update " + nc.ElementType + " throughput failed")
+ if z.NetChar.ThroughputDl != 3 {
+ t.Fatalf("Update " + nc.ElementType + " throughputDl failed")
+ }
+ if z.NetChar.ThroughputUl != 5 {
+ t.Fatalf("Update " + nc.ElementType + " throughputUl failed")
}
if z.NetChar.PacketLoss != 4 {
- t.Errorf("Update " + nc.ElementType + " packet loss failed")
+ t.Fatalf("Update " + nc.ElementType + " packet loss failed")
}
nc.ElementName = "zone1-poa1"
- nc.ElementType = "POA"
+ nc.ElementType = NodeTypePoa
err = m.UpdateNetChar(&nc)
if err != nil {
- t.Errorf("Update " + nc.ElementType + " failed")
+ t.Fatalf("Update " + nc.ElementType + " failed")
}
n = m.nodeMap.FindByName(nc.ElementName)
- nl := n.object.(*ceModel.NetworkLocation)
- if nl.TerminalLinkLatency != 1 {
- t.Errorf("Update " + nc.ElementType + " latency failed")
+ nl := n.object.(*dataModel.NetworkLocation)
+ if nl.NetChar.Latency != 1 {
+ t.Fatalf("Update " + nc.ElementType + " latency failed")
+ }
+ if nl.NetChar.LatencyVariation != 2 {
+ t.Fatalf("Update " + nc.ElementType + " jitter failed")
}
- if nl.TerminalLinkLatencyVariation != 2 {
- t.Errorf("Update " + nc.ElementType + " jitter failed")
+ if nl.NetChar.ThroughputDl != 3 {
+ t.Fatalf("Update " + nc.ElementType + " throughputDl failed")
}
- if nl.TerminalLinkThroughput != 3 {
- t.Errorf("Update " + nc.ElementType + " throughput failed")
+ if nl.NetChar.ThroughputUl != 5 {
+ t.Fatalf("Update " + nc.ElementType + " throughputUl failed")
}
- if nl.TerminalLinkPacketLoss != 4 {
- t.Errorf("Update " + nc.ElementType + " packet loss failed")
+ if nl.NetChar.PacketLoss != 4 {
+ t.Fatalf("Update " + nc.ElementType + " packet loss failed")
}
nc.ElementName = "zone1-fog1"
- nc.ElementType = "FOG"
+ nc.ElementType = NodeTypeFog
err = m.UpdateNetChar(&nc)
if err != nil {
- t.Errorf("Update " + nc.ElementType + " failed")
+ t.Fatalf("Update " + nc.ElementType + " failed")
}
n = m.nodeMap.FindByName(nc.ElementName)
- pl := n.object.(*ceModel.PhysicalLocation)
- if pl.LinkLatency != 1 {
- t.Errorf("Update " + nc.ElementType + " latency failed")
+ pl := n.object.(*dataModel.PhysicalLocation)
+ if pl.NetChar.Latency != 1 {
+ t.Fatalf("Update " + nc.ElementType + " latency failed")
+ }
+ if pl.NetChar.LatencyVariation != 2 {
+ t.Fatalf("Update " + nc.ElementType + " jitter failed")
}
- if pl.LinkLatencyVariation != 2 {
- t.Errorf("Update " + nc.ElementType + " jitter failed")
+ if pl.NetChar.ThroughputDl != 3 {
+ t.Fatalf("Update " + nc.ElementType + " throughputDl failed")
}
- if pl.LinkThroughput != 3 {
- t.Errorf("Update " + nc.ElementType + " throughput failed")
+ if pl.NetChar.ThroughputUl != 5 {
+ t.Fatalf("Update " + nc.ElementType + " throughputUl failed")
}
- if pl.LinkPacketLoss != 4 {
- t.Errorf("Update " + nc.ElementType + " packet loss failed")
+ if pl.NetChar.PacketLoss != 4 {
+ t.Fatalf("Update " + nc.ElementType + " packet loss failed")
}
nc.ElementName = "zone1-edge1"
- nc.ElementType = "EDGE"
+ nc.ElementType = NodeTypeEdge
err = m.UpdateNetChar(&nc)
if err != nil {
- t.Errorf("Update " + nc.ElementType + " failed")
+ t.Fatalf("Update " + nc.ElementType + " failed")
}
n = m.nodeMap.FindByName(nc.ElementName)
- pl = n.object.(*ceModel.PhysicalLocation)
- if pl.LinkLatency != 1 {
- t.Errorf("Update " + nc.ElementType + " latency failed")
+ pl = n.object.(*dataModel.PhysicalLocation)
+ if pl.NetChar.Latency != 1 {
+ t.Fatalf("Update " + nc.ElementType + " latency failed")
}
- if pl.LinkLatencyVariation != 2 {
- t.Errorf("Update " + nc.ElementType + " jitter failed")
+ if pl.NetChar.LatencyVariation != 2 {
+ t.Fatalf("Update " + nc.ElementType + " jitter failed")
}
- if pl.LinkThroughput != 3 {
- t.Errorf("Update " + nc.ElementType + " throughput failed")
+ if pl.NetChar.ThroughputDl != 3 {
+ t.Fatalf("Update " + nc.ElementType + " throughputDl failed")
}
- if pl.LinkPacketLoss != 4 {
- t.Errorf("Update " + nc.ElementType + " packet loss failed")
+ if pl.NetChar.ThroughputUl != 5 {
+ t.Fatalf("Update " + nc.ElementType + " throughputUl failed")
+ }
+ if pl.NetChar.PacketLoss != 4 {
+ t.Fatalf("Update " + nc.ElementType + " packet loss failed")
}
nc.ElementName = "ue1"
- nc.ElementType = "UE"
+ nc.ElementType = NodeTypeUE
err = m.UpdateNetChar(&nc)
if err != nil {
- t.Errorf("Update " + nc.ElementType + " failed")
+ t.Fatalf("Update " + nc.ElementType + " failed")
}
n = m.nodeMap.FindByName(nc.ElementName)
- pl = n.object.(*ceModel.PhysicalLocation)
- if pl.LinkLatency != 1 {
- t.Errorf("Update " + nc.ElementType + " latency failed")
+ pl = n.object.(*dataModel.PhysicalLocation)
+ if pl.NetChar.Latency != 1 {
+ t.Fatalf("Update " + nc.ElementType + " latency failed")
+ }
+ if pl.NetChar.LatencyVariation != 2 {
+ t.Fatalf("Update " + nc.ElementType + " jitter failed")
}
- if pl.LinkLatencyVariation != 2 {
- t.Errorf("Update " + nc.ElementType + " jitter failed")
+ if pl.NetChar.ThroughputDl != 3 {
+ t.Fatalf("Update " + nc.ElementType + " throughputDl failed")
}
- if pl.LinkThroughput != 3 {
- t.Errorf("Update " + nc.ElementType + " throughput failed")
+ if pl.NetChar.ThroughputUl != 5 {
+ t.Fatalf("Update " + nc.ElementType + " throughputUl failed")
}
- if pl.LinkPacketLoss != 4 {
- t.Errorf("Update " + nc.ElementType + " packet loss failed")
+ if pl.NetChar.PacketLoss != 4 {
+ t.Fatalf("Update " + nc.ElementType + " packet loss failed")
}
nc.ElementName = "cloud1"
- nc.ElementType = "DISTANT CLOUD"
+ nc.ElementType = NodeTypeCloud
err = m.UpdateNetChar(&nc)
if err != nil {
- t.Errorf("Update " + nc.ElementType + " failed")
+ t.Fatalf("Update " + nc.ElementType + " failed")
}
n = m.nodeMap.FindByName(nc.ElementName)
- pl = n.object.(*ceModel.PhysicalLocation)
- if pl.LinkLatency != 1 {
- t.Errorf("Update " + nc.ElementType + " latency failed")
+ pl = n.object.(*dataModel.PhysicalLocation)
+ if pl.NetChar.Latency != 1 {
+ t.Fatalf("Update " + nc.ElementType + " latency failed")
}
- if pl.LinkLatencyVariation != 2 {
- t.Errorf("Update " + nc.ElementType + " jitter failed")
+ if pl.NetChar.LatencyVariation != 2 {
+ t.Fatalf("Update " + nc.ElementType + " jitter failed")
}
- if pl.LinkThroughput != 3 {
- t.Errorf("Update " + nc.ElementType + " throughput failed")
+ if pl.NetChar.ThroughputDl != 3 {
+ t.Fatalf("Update " + nc.ElementType + " throughputDl failed")
}
- if pl.LinkPacketLoss != 4 {
- t.Errorf("Update " + nc.ElementType + " packet loss failed")
+ if pl.NetChar.ThroughputUl != 5 {
+ t.Fatalf("Update " + nc.ElementType + " throughputUl failed")
+ }
+ if pl.NetChar.PacketLoss != 4 {
+ t.Fatalf("Update " + nc.ElementType + " packet loss failed")
}
nc.ElementName = "zone1-edge1-iperf"
- nc.ElementType = "EDGE APPLICATION"
+ nc.ElementType = NodeTypeEdgeApp
err = m.UpdateNetChar(&nc)
if err != nil {
- t.Errorf("Update " + nc.ElementType + " failed")
+ t.Fatalf("Update " + nc.ElementType + " failed")
}
n = m.nodeMap.FindByName(nc.ElementName)
- proc := n.object.(*ceModel.Process)
- if proc.AppLatency != 1 {
- t.Errorf("Update " + nc.ElementType + " latency failed")
+ proc := n.object.(*dataModel.Process)
+ if proc.NetChar.Latency != 1 {
+ t.Fatalf("Update " + nc.ElementType + " latency failed")
+ }
+ if proc.NetChar.LatencyVariation != 2 {
+ t.Fatalf("Update " + nc.ElementType + " jitter failed")
}
- if proc.AppLatencyVariation != 2 {
- t.Errorf("Update " + nc.ElementType + " jitter failed")
+ if proc.NetChar.ThroughputDl != 3 {
+ t.Fatalf("Update " + nc.ElementType + " throughputDl failed")
}
- if proc.AppThroughput != 3 {
- t.Errorf("Update " + nc.ElementType + " throughput failed")
+ if proc.NetChar.ThroughputUl != 5 {
+ t.Fatalf("Update " + nc.ElementType + " throughputUl failed")
}
- if proc.AppPacketLoss != 4 {
- t.Errorf("Update " + nc.ElementType + " packet loss failed")
+ if proc.NetChar.PacketLoss != 4 {
+ t.Fatalf("Update " + nc.ElementType + " packet loss failed")
}
nc.ElementName = "ue1-iperf"
- nc.ElementType = "UE APPLICATION"
+ nc.ElementType = NodeTypeUEApp
err = m.UpdateNetChar(&nc)
if err != nil {
- t.Errorf("Update " + nc.ElementType + " failed")
+ t.Fatalf("Update " + nc.ElementType + " failed")
}
n = m.nodeMap.FindByName(nc.ElementName)
- proc = n.object.(*ceModel.Process)
- if proc.AppLatency != 1 {
- t.Errorf("Update " + nc.ElementType + " latency failed")
+ proc = n.object.(*dataModel.Process)
+ if proc.NetChar.Latency != 1 {
+ t.Fatalf("Update " + nc.ElementType + " latency failed")
}
- if proc.AppLatencyVariation != 2 {
- t.Errorf("Update " + nc.ElementType + " jitter failed")
+ if proc.NetChar.LatencyVariation != 2 {
+ t.Fatalf("Update " + nc.ElementType + " jitter failed")
}
- if proc.AppThroughput != 3 {
- t.Errorf("Update " + nc.ElementType + " throughput failed")
+ if proc.NetChar.ThroughputDl != 3 {
+ t.Fatalf("Update " + nc.ElementType + " throughputDl failed")
}
- if proc.AppPacketLoss != 4 {
- t.Errorf("Update " + nc.ElementType + " packet loss failed")
+ if proc.NetChar.ThroughputUl != 5 {
+ t.Fatalf("Update " + nc.ElementType + " throughputUl failed")
+ }
+ if proc.NetChar.PacketLoss != 4 {
+ t.Fatalf("Update " + nc.ElementType + " packet loss failed")
}
nc.ElementName = "cloud1-iperf"
- nc.ElementType = "CLOUD APPLICATION"
+ nc.ElementType = NodeTypeCloudApp
err = m.UpdateNetChar(&nc)
if err != nil {
- t.Errorf("Update " + nc.ElementType + " failed")
+ t.Fatalf("Update " + nc.ElementType + " failed")
}
n = m.nodeMap.FindByName(nc.ElementName)
- proc = n.object.(*ceModel.Process)
- if proc.AppLatency != 1 {
- t.Errorf("Update " + nc.ElementType + " latency failed")
+ proc = n.object.(*dataModel.Process)
+ if proc.NetChar.Latency != 1 {
+ t.Fatalf("Update " + nc.ElementType + " latency failed")
+ }
+ if proc.NetChar.LatencyVariation != 2 {
+ t.Fatalf("Update " + nc.ElementType + " jitter failed")
}
- if proc.AppLatencyVariation != 2 {
- t.Errorf("Update " + nc.ElementType + " jitter failed")
+ if proc.NetChar.ThroughputDl != 3 {
+ t.Fatalf("Update " + nc.ElementType + " throughputDl failed")
}
- if proc.AppThroughput != 3 {
- t.Errorf("Update " + nc.ElementType + " throughput failed")
+ if proc.NetChar.ThroughputUl != 5 {
+ t.Fatalf("Update " + nc.ElementType + " throughputUl failed")
}
- if proc.AppPacketLoss != 4 {
- t.Errorf("Update " + nc.ElementType + " packet loss failed")
+ if proc.NetChar.PacketLoss != 4 {
+ t.Fatalf("Update " + nc.ElementType + " packet loss failed")
}
nc.ElementName = "Not-a-Name"
- nc.ElementType = "POA"
+ nc.ElementType = NodeTypePoa
err = m.UpdateNetChar(&nc)
if err == nil {
- t.Errorf("Update " + nc.ElementType + " should fail")
+ t.Fatalf("Update " + nc.ElementType + " should fail")
}
nc.ElementName = "ue1"
nc.ElementType = "Not-a-Type"
err = m.UpdateNetChar(&nc)
if err == nil {
- t.Errorf("Unsupported type should fail")
+ t.Fatalf("Unsupported type should fail")
}
}
@@ -561,18 +612,19 @@ func TestListenModel(t *testing.T) {
redisTable = modelRedisTestTable
fmt.Println("Create Publisher")
- mPub, err := NewModel(modelRedisAddr, moduleName+"-Pub", modelName)
+ cfg := ModelCfg{Name: modelName, Namespace: moduleNamespace, Module: moduleName + "-Pub", DbAddr: modelRedisAddr}
+ mPub, err := NewModel(cfg)
if err != nil {
- t.Errorf("Unable to create model")
+ t.Fatalf("Unable to create model")
}
if mPub.GetScenarioName() != "" {
- t.Errorf("Scenario name should be empty")
+ t.Fatalf("Scenario name should be empty")
}
fmt.Println("Activate")
err = mPub.Activate()
if err != nil {
- t.Errorf("Failed to activate model")
+ t.Fatalf("Failed to activate model")
}
time.Sleep(50 * time.Millisecond)
@@ -580,153 +632,119 @@ func TestListenModel(t *testing.T) {
err = mPub.SetScenario([]byte(testScenario))
time.Sleep(50 * time.Millisecond)
if err != nil {
- t.Errorf("Error setting model")
+ t.Fatalf("Error setting model")
}
if mPub.GetScenarioName() != "demo1" {
- t.Errorf("Scenario name should be demo1")
+ t.Fatalf("Scenario name should be demo1")
}
// create listener after model has been published to test initialization
fmt.Println("Create Listener")
- mLis, err := NewModel(modelRedisAddr, moduleName+"-Lis", "Active")
+ cfg = ModelCfg{Name: "Active", Namespace: moduleNamespace, Module: moduleName + "-Lis", DbAddr: modelRedisAddr}
+ mLis, err := NewModel(cfg)
if err != nil {
- t.Errorf("Unable to create model")
+ t.Fatalf("Unable to create model")
}
if mLis.GetScenarioName() != "" {
- t.Errorf("Scenario name should be empty")
- }
-
- fmt.Println("Register listener (no handler)")
- err = mLis.Listen(nil)
- if err == nil {
- t.Errorf("Should not allow registering without a handler")
+ t.Fatalf("Scenario name should be empty")
}
- var testCount = 0
- eventCount = 0
-
- fmt.Println("Register listener")
- testCount++
- err = mLis.Listen(eventHandler)
- if err != nil {
- t.Errorf("Unable to listen for events")
- }
- time.Sleep(50 * time.Millisecond)
- if eventCount != testCount {
- t.Errorf("No event received for SetScenario")
- }
+ fmt.Println("Sync listener")
+ mLis.UpdateScenario()
lis, _ := mLis.GetScenario()
pub, _ := mPub.GetScenario()
if string(lis) != string(pub) {
- t.Errorf("Published model different than received one")
+ t.Fatalf("Published model different than received one")
}
if mLis.GetScenarioName() != "demo1" {
- t.Errorf("Scenario name should be demo1")
+ t.Fatalf("Scenario name should be demo1")
}
// MoveNode
fmt.Println("Move ue1")
- testCount++
old, new, err := mPub.MoveNode("ue1", "zone2-poa1")
if err != nil {
- t.Errorf("Error moving UE")
+ t.Fatalf("Error moving UE")
}
if old != "zone1-poa1" {
- t.Errorf("Move Node - wrong origin Location " + old)
+ t.Fatalf("Move Node - wrong origin Location " + old)
}
if new != "zone2-poa1" {
- t.Errorf("Move Node - wrong destination Location " + new)
- }
- time.Sleep(50 * time.Millisecond)
- if eventCount != testCount {
- t.Errorf("No event received for MoveUE")
+ t.Fatalf("Move Node - wrong destination Location " + new)
}
+ mLis.UpdateScenario()
n := mLis.nodeMap.FindByName("ue1")
- parent := n.parent.(*ceModel.NetworkLocation)
+ parent := n.parent.(*dataModel.NetworkLocation)
if parent.Name != "zone2-poa1" {
- t.Errorf("Published model not as expected")
+ t.Fatalf("Published model not as expected")
}
//UpdateNetChar
fmt.Println("Update net-char")
- testCount++
- var nc ceModel.EventNetworkCharacteristicsUpdate
+ var nc dataModel.EventNetworkCharacteristicsUpdate
nc.ElementName = "demo1"
nc.ElementType = "SCENARIO"
- nc.Latency = 1
- nc.LatencyVariation = 2
- nc.Throughput = 3
- nc.PacketLoss = 4
+ var netChar dataModel.NetworkCharacteristics
+ netChar.Latency = 1
+ netChar.LatencyVariation = 2
+ netChar.LatencyDistribution = "Normal"
+ netChar.ThroughputDl = 3
+ netChar.ThroughputUl = 5
+ netChar.PacketLoss = 4
+ nc.NetChar = &netChar
err = mPub.UpdateNetChar(&nc)
if err != nil {
- t.Errorf("Update " + nc.ElementType + " failed")
+ t.Fatalf("Update " + nc.ElementType + " failed")
}
- time.Sleep(50 * time.Millisecond)
- if eventCount != testCount {
- t.Errorf("No event received for UpdateNetChar")
+ mLis.UpdateScenario()
+ if mLis.scenario.Deployment.NetChar.Latency != 1 {
+ t.Fatalf("Update " + nc.ElementType + " latency failed")
+ }
+ if mLis.scenario.Deployment.NetChar.LatencyVariation != 2 {
+ t.Fatalf("Update " + nc.ElementType + " jitter failed")
}
- if mLis.scenario.Deployment.InterDomainLatency != 1 {
- t.Errorf("Update " + nc.ElementType + " latency failed")
+ if mLis.scenario.Deployment.NetChar.LatencyDistribution != "Normal" {
+ t.Fatalf("Update " + nc.ElementType + " distribution failed")
}
- if mLis.scenario.Deployment.InterDomainLatencyVariation != 2 {
- t.Errorf("Update " + nc.ElementType + " jitter failed")
+ if mLis.scenario.Deployment.NetChar.ThroughputDl != 3 {
+ t.Fatalf("Update " + nc.ElementType + " throughputDl failed")
}
- if mLis.scenario.Deployment.InterDomainThroughput != 3 {
- t.Errorf("Update " + nc.ElementType + " throughput failed")
+ if mLis.scenario.Deployment.NetChar.ThroughputUl != 5 {
+ t.Fatalf("Update " + nc.ElementType + " throughputUl failed")
}
- if mLis.scenario.Deployment.InterDomainPacketLoss != 4 {
- t.Errorf("Update " + nc.ElementType + " packet loss failed")
+ if mLis.scenario.Deployment.NetChar.PacketLoss != 4 {
+ t.Fatalf("Update " + nc.ElementType + " packet loss failed")
}
fmt.Println("Dectivate")
- testCount++
err = mPub.Deactivate()
if err != nil {
- t.Errorf("Failed to deactivate")
- }
- time.Sleep(50 * time.Millisecond)
- if eventCount != testCount {
- t.Errorf("No event received for Activate")
+ t.Fatalf("Failed to deactivate")
}
+ mLis.UpdateScenario()
lis, _ = mLis.GetScenario()
if string(lis) != "{}" {
- t.Errorf("Deployment should be nil")
+ t.Fatalf("Deployment should be nil")
}
if mPub.GetScenarioName() != "demo1" {
- t.Errorf("Scenario name should be demo1")
+ t.Fatalf("Scenario name should be demo1")
}
if mLis.GetScenarioName() != "" {
- t.Errorf("Scenario name should be empty")
+ t.Fatalf("Scenario name should be empty")
}
fmt.Println("Re-Activate")
- testCount++
err = mPub.Activate()
if err != nil {
- t.Errorf("Failed to activate")
- }
- time.Sleep(50 * time.Millisecond)
- if eventCount != testCount {
- t.Errorf("No event received for Activate")
+ t.Fatalf("Failed to activate")
}
+ mLis.UpdateScenario()
if mPub.GetScenarioName() != "demo1" {
- t.Errorf("Scenario name should be demo1")
+ t.Fatalf("Scenario name should be demo1")
}
if mLis.GetScenarioName() != "demo1" {
- t.Errorf("Scenario name should be demo1")
+ t.Fatalf("Scenario name should be demo1")
}
-
-}
-
-var eventChannel string
-var eventPayload string
-var eventCount int
-
-func eventHandler(channel string, payload string) {
- eventChannel = channel
- eventPayload = payload
- eventCount++
- fmt.Println("Event#", eventCount, " ch:", channel)
}
func TestGetters(t *testing.T) {
@@ -737,27 +755,28 @@ func TestGetters(t *testing.T) {
redisTable = modelRedisTestTable
fmt.Println("Create Model")
- m, err := NewModel(modelRedisAddr, moduleName, modelName)
+ cfg := ModelCfg{Name: modelName, Namespace: moduleNamespace, Module: moduleName, DbAddr: modelRedisAddr}
+ m, err := NewModel(cfg)
if err != nil {
- t.Errorf("Unable to create model")
+ t.Fatalf("Unable to create model")
}
fmt.Println("Get Node Names (empty)")
l := m.GetNodeNames("")
if len(l) != 0 {
- t.Errorf("Node name list should be empty")
+ t.Fatalf("Node name list should be empty")
}
fmt.Println("Set Model")
err = m.SetScenario([]byte(testScenario))
if err != nil {
- t.Errorf("Error setting model")
+ t.Fatalf("Error setting model")
}
fmt.Println("Get Node Names")
l = m.GetNodeNames("ANY")
if len(l) != 30 {
- t.Errorf("Node name list should not be empty")
+ t.Fatalf("Node name list should not be empty")
}
fmt.Println(l)
fmt.Println(len(l))
@@ -765,7 +784,7 @@ func TestGetters(t *testing.T) {
fmt.Println("Get UE Node Names")
l = m.GetNodeNames("UE")
if len(l) != 2 {
- t.Errorf("UE node name list should be 2")
+ t.Fatalf("UE node name list should be 2")
}
fmt.Println(l)
fmt.Println(len(l))
@@ -773,7 +792,7 @@ func TestGetters(t *testing.T) {
fmt.Println("Get POA Node Names")
l = m.GetNodeNames("POA")
if len(l) != 3 {
- t.Errorf("POA node name list should be 3")
+ t.Fatalf("POA node name list should be 3")
}
fmt.Println(l)
fmt.Println(len(l))
@@ -781,7 +800,7 @@ func TestGetters(t *testing.T) {
fmt.Println("Get Zone Node Names")
l = m.GetNodeNames("ZONE")
if len(l) != 2 {
- t.Errorf("Zone node name list should be 2")
+ t.Fatalf("Zone node name list should be 2")
}
fmt.Println(l)
fmt.Println(len(l))
@@ -789,7 +808,7 @@ func TestGetters(t *testing.T) {
fmt.Println("Get UE + POA Node Names")
l = m.GetNodeNames("UE", "POA")
if len(l) != 5 {
- t.Errorf("UE + POA node name list should be 5")
+ t.Fatalf("UE + POA node name list should be 5")
}
fmt.Println(l)
fmt.Println(len(l))
@@ -797,7 +816,7 @@ func TestGetters(t *testing.T) {
fmt.Println("Get UE + POA + ZONE Node Names")
l = m.GetNodeNames("UE", "POA", "ZONE")
if len(l) != 7 {
- t.Errorf("UE + POA + ZONE node name list should be 10")
+ t.Fatalf("UE + POA + ZONE node name list should be 10")
}
fmt.Println(l)
fmt.Println(len(l))
@@ -805,141 +824,308 @@ func TestGetters(t *testing.T) {
fmt.Println("Get invalid node")
n := m.GetNode("NOT-A-NODE")
if n != nil {
- t.Errorf("Node should not exist")
+ t.Fatalf("Node should not exist")
}
fmt.Println("Get ue1 node")
n = m.GetNode("ue1")
if n == nil {
- t.Errorf("Failed getting ue1 node")
+ t.Fatalf("Failed getting ue1 node")
}
- pl, ok := n.(*ceModel.PhysicalLocation)
+ pl, ok := n.(*dataModel.PhysicalLocation)
if !ok {
- t.Errorf("ue1 has wrong type %T -- expected *model.PhysicalLocation", n)
+ t.Fatalf("ue1 has wrong type %T -- expected *model.PhysicalLocation", n)
}
if pl.Name != "ue1" {
- t.Errorf("Could not find ue1")
+ t.Fatalf("Could not find ue1")
}
fmt.Println("Get edges")
edges := m.GetEdges()
if len(edges) != 28 {
- t.Errorf("Missing edges - expected 28")
+ t.Fatalf("Missing edges - expected 28")
}
if edges["ue1"] != "zone1-poa1" {
- t.Errorf("UE1 edge - expected zone1-poa1 -- got %s", edges["ue1"])
+ t.Fatalf("UE1 edge - expected zone1-poa1 -- got %s", edges["ue1"])
}
if edges["zone1"] != "operator1" {
- t.Errorf("Zone1 edge - expected operator1 -- got %s", edges["zone1"])
+ t.Fatalf("Zone1 edge - expected operator1 -- got %s", edges["zone1"])
}
// Node Type
fmt.Println("Get node type for invalid node")
nodeType := m.GetNodeType("NOT-A-NODE")
if nodeType != "" {
- t.Errorf("Node type should be empty")
+ t.Fatalf("Node type should be empty")
}
fmt.Println("Get node type for OPERATOR")
nodeType = m.GetNodeType("operator1")
if nodeType != "OPERATOR" {
- t.Errorf("Invalid node type")
+ t.Fatalf("Invalid node type")
}
fmt.Println("Get node type for ZONE")
nodeType = m.GetNodeType("zone1")
if nodeType != "ZONE" {
- t.Errorf("Invalid node type")
+ t.Fatalf("Invalid node type")
}
fmt.Println("Get node type for POA")
nodeType = m.GetNodeType("zone1-poa1")
if nodeType != "POA" {
- t.Errorf("Invalid node type")
+ t.Fatalf("Invalid node type")
}
fmt.Println("Get node type for FOG")
nodeType = m.GetNodeType("zone1-fog1")
if nodeType != "FOG" {
- t.Errorf("Invalid node type")
+ t.Fatalf("Invalid node type")
}
fmt.Println("Get node type for UE")
nodeType = m.GetNodeType("ue1")
if nodeType != "UE" {
- t.Errorf("Invalid node type")
+ t.Fatalf("Invalid node type")
}
fmt.Println("Get node type for UE-APP")
nodeType = m.GetNodeType("ue1-iperf")
if nodeType != "UE-APP" {
- t.Errorf("Invalid node type")
+ t.Fatalf("Invalid node type")
}
fmt.Println("Get node type for EDGE-APP")
nodeType = m.GetNodeType("zone1-edge1-svc")
if nodeType != "EDGE-APP" {
- t.Errorf("Invalid node type")
+ t.Fatalf("Invalid node type")
}
// Node Context
fmt.Println("Get context for invalid node")
ctx := m.GetNodeContext("NOT-A-NODE")
if ctx != nil {
- t.Errorf("Node context should not exist")
+ t.Fatalf("Node context should not exist")
}
fmt.Println("Get Deployment context")
ctx = m.GetNodeContext("demo1")
if ctx == nil {
- t.Errorf("Node context should exist")
+ t.Fatalf("Node context should exist")
}
nodeCtx, ok := ctx.(*NodeContext)
if !ok || !validateNodeContext(nodeCtx, "demo1", "", "", "", "") {
- t.Errorf("Invalid Deployment context")
+ t.Fatalf("Invalid Deployment context")
}
fmt.Println("Get Operator context")
ctx = m.GetNodeContext("operator1")
if ctx == nil {
- t.Errorf("Node context should exist")
+ t.Fatalf("Node context should exist")
}
nodeCtx, ok = ctx.(*NodeContext)
if !ok || !validateNodeContext(nodeCtx, "demo1", "operator1", "", "", "") {
- t.Errorf("Invalid Operator context")
+ t.Fatalf("Invalid Operator context")
}
fmt.Println("Get Zone context")
ctx = m.GetNodeContext("zone1")
if ctx == nil {
- t.Errorf("Node context should exist")
+ t.Fatalf("Node context should exist")
}
nodeCtx, ok = ctx.(*NodeContext)
if !ok || !validateNodeContext(nodeCtx, "demo1", "operator1", "zone1", "", "") {
- t.Errorf("Invalid Operator context")
+ t.Fatalf("Invalid Operator context")
}
fmt.Println("Get Net Location context")
ctx = m.GetNodeContext("zone1-poa1")
if ctx == nil {
- t.Errorf("Node context should exist")
+ t.Fatalf("Node context should exist")
}
nodeCtx, ok = ctx.(*NodeContext)
if !ok || !validateNodeContext(nodeCtx, "demo1", "operator1", "zone1", "zone1-poa1", "") {
- t.Errorf("Invalid Operator context")
+ t.Fatalf("Invalid Operator context")
}
fmt.Println("Get Phy Location context")
ctx = m.GetNodeContext("zone1-fog1")
if ctx == nil {
- t.Errorf("Node context should exist")
+ t.Fatalf("Node context should exist")
}
nodeCtx, ok = ctx.(*NodeContext)
if !ok || !validateNodeContext(nodeCtx, "demo1", "operator1", "zone1", "zone1-poa1", "zone1-fog1") {
- t.Errorf("Invalid Operator context")
+ t.Fatalf("Invalid Operator context")
}
fmt.Println("Get App context")
ctx = m.GetNodeContext("ue1-iperf")
if ctx == nil {
- t.Errorf("Node context should exist")
+ t.Fatalf("Node context should exist")
}
nodeCtx, ok = ctx.(*NodeContext)
if !ok || !validateNodeContext(nodeCtx, "demo1", "operator1", "zone1", "zone1-poa1", "ue1") {
- t.Errorf("Invalid Operator context")
+ t.Fatalf("Invalid Operator context")
}
// Network Graph
graph := m.GetNetworkGraph()
if len(graph.Verticies) != 29 {
- t.Errorf("Invalid Network Graph")
+ t.Fatalf("Invalid Network Graph")
+ }
+}
+
+func TestScenarioUpdate(t *testing.T) {
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ // Switch to a different table for testing
+ redisTable = modelRedisTestTable
+
+ cfg := ModelCfg{Name: modelName, Namespace: moduleNamespace, Module: "test-mod", DbAddr: modelRedisAddr}
+ m, err := NewModel(cfg)
+ if err != nil {
+ t.Fatalf("Unable to create model")
+ }
+ fmt.Println("Set Model")
+ err = m.SetScenario([]byte(testScenario))
+ if err != nil {
+ t.Fatalf("Error setting model")
+ }
+ if m.scenario.Name != "demo1" {
+ t.Fatalf("SetScenario failed")
+ }
+
+ fmt.Println("Invalid Add Requests")
+ ue_data := dataModel.NodeDataUnion{}
+ ue_node := dataModel.ScenarioNode{NodeDataUnion: &ue_data, Parent: "zone1-poa1"}
+ err = m.AddScenarioNode(&ue_node)
+ if err == nil {
+ t.Fatalf("Action should have failed")
+ }
+ ue_data = dataModel.NodeDataUnion{}
+ ue_node = dataModel.ScenarioNode{Type_: NodeTypeUE, Parent: "zone1-poa1"}
+ err = m.AddScenarioNode(&ue_node)
+ if err == nil {
+ t.Fatalf("Action should have failed")
+ }
+ ue_data = dataModel.NodeDataUnion{}
+ ue_node = dataModel.ScenarioNode{Type_: NodeTypeUE, NodeDataUnion: &ue_data}
+ err = m.AddScenarioNode(&ue_node)
+ if err == nil {
+ t.Fatalf("Action should have failed")
+ }
+ ue_data = dataModel.NodeDataUnion{}
+ ue_node = dataModel.ScenarioNode{Type_: NodeTypeUE, NodeDataUnion: &ue_data, Parent: "zone1-poa1"}
+ err = m.AddScenarioNode(&ue_node)
+ if err == nil {
+ t.Fatalf("Action should have failed")
+ }
+ ue_pl := dataModel.PhysicalLocation{Id: "ue-id", Type_: NodeTypeUE}
+ ue_data = dataModel.NodeDataUnion{PhysicalLocation: &ue_pl}
+ ue_node = dataModel.ScenarioNode{Type_: NodeTypeUE, NodeDataUnion: &ue_data, Parent: "zone1-poa1"}
+ err = m.AddScenarioNode(&ue_node)
+ if err == nil {
+ t.Fatalf("Action should have failed")
+ }
+ ue_pl = dataModel.PhysicalLocation{Id: "ue-id", Name: "ue"}
+ ue_data = dataModel.NodeDataUnion{PhysicalLocation: &ue_pl}
+ ue_node = dataModel.ScenarioNode{Type_: NodeTypeUE, NodeDataUnion: &ue_data, Parent: "zone1-poa1"}
+ err = m.AddScenarioNode(&ue_node)
+ if err == nil {
+ t.Fatalf("Action should have failed")
+ }
+ ue1_pl := dataModel.PhysicalLocation{Id: "ue1-id", Name: "ue1", Type_: NodeTypeUE}
+ ue1_data := dataModel.NodeDataUnion{PhysicalLocation: &ue1_pl}
+ ue1_node := dataModel.ScenarioNode{Type_: NodeTypeUE, NodeDataUnion: &ue1_data, Parent: "zone1-poa1"}
+ err = m.AddScenarioNode(&ue1_node)
+ if err == nil {
+ t.Fatalf("Action should have failed")
+ }
+
+ fmt.Println("Invalid Remove Requests")
+ ue_data = dataModel.NodeDataUnion{}
+ ue_node = dataModel.ScenarioNode{NodeDataUnion: &ue_data}
+ err = m.RemoveScenarioNode(&ue_node)
+ if err == nil {
+ t.Fatalf("Action should have failed")
+ }
+ ue_data = dataModel.NodeDataUnion{}
+ ue_node = dataModel.ScenarioNode{Type_: NodeTypeUE}
+ err = m.RemoveScenarioNode(&ue_node)
+ if err == nil {
+ t.Fatalf("Action should have failed")
+ }
+ ue_data = dataModel.NodeDataUnion{}
+ ue_node = dataModel.ScenarioNode{Type_: NodeTypeUE, NodeDataUnion: &ue_data}
+ err = m.RemoveScenarioNode(&ue_node)
+ if err == nil {
+ t.Fatalf("Action should have failed")
+ }
+ ue_pl = dataModel.PhysicalLocation{Id: "ue-id", Type_: NodeTypeUE}
+ ue_data = dataModel.NodeDataUnion{PhysicalLocation: &ue_pl}
+ ue_node = dataModel.ScenarioNode{Type_: NodeTypeUE, NodeDataUnion: &ue_data}
+ err = m.RemoveScenarioNode(&ue_node)
+ if err == nil {
+ t.Fatalf("Action should have failed")
+ }
+ ue_pl = dataModel.PhysicalLocation{Id: "ue-id", Name: "ue"}
+ ue_data = dataModel.NodeDataUnion{PhysicalLocation: &ue_pl}
+ ue_node = dataModel.ScenarioNode{Type_: NodeTypeUE, NodeDataUnion: &ue_data}
+ err = m.RemoveScenarioNode(&ue_node)
+ if err == nil {
+ t.Fatalf("Action should have failed")
+ }
+
+ fmt.Println("Add ue3")
+ ue3_pl := dataModel.PhysicalLocation{Id: "ue3-id", Name: "ue3", Type_: NodeTypeUE}
+ ue3_data := dataModel.NodeDataUnion{PhysicalLocation: &ue3_pl}
+ ue3_node := dataModel.ScenarioNode{Type_: NodeTypeUE, NodeDataUnion: &ue3_data, Parent: "zone1-poa1"}
+ err = m.AddScenarioNode(&ue3_node)
+ if err != nil {
+ t.Fatalf("Error adding nodes")
+ }
+ n := m.nodeMap.FindByName("ue3")
+ if n == nil || n.name != "ue3" {
+ t.Fatalf("Failed to add nodes")
+ }
+ p := n.parent.(*dataModel.NetworkLocation)
+ if p == nil || p.Name != "zone1-poa1" {
+ t.Fatalf("Failed to add nodes")
+ }
+ d := n.object.(*dataModel.PhysicalLocation)
+ if d == nil || d.Name != "ue3" {
+ t.Fatalf("Failed to add nodes")
+ }
+
+ fmt.Println("Add ue4")
+ ue4_pl := dataModel.PhysicalLocation{Id: "ue4-id", Name: "ue4", Type_: NodeTypeUE}
+ ue4_data := dataModel.NodeDataUnion{PhysicalLocation: &ue4_pl}
+ ue4_node := dataModel.ScenarioNode{Type_: NodeTypeUE, NodeDataUnion: &ue4_data, Parent: "zone1-poa1"}
+ err = m.AddScenarioNode(&ue4_node)
+ if err != nil {
+ t.Fatalf("Error adding nodes")
+ }
+ n = m.nodeMap.FindByName("ue4")
+ if n == nil || n.name != "ue4" {
+ t.Fatalf("Failed to add nodes")
+ }
+ p = n.parent.(*dataModel.NetworkLocation)
+ if p == nil || p.Name != "zone1-poa1" {
+ t.Fatalf("Failed to add nodes")
+ }
+ d = n.object.(*dataModel.PhysicalLocation)
+ if d == nil || d.Name != "ue4" {
+ t.Fatalf("Failed to add nodes")
+ }
+
+ fmt.Println("Remove ue4")
+ ue4_node = dataModel.ScenarioNode{Type_: NodeTypeUE, NodeDataUnion: &ue4_data}
+ err = m.RemoveScenarioNode(&ue4_node)
+ if err != nil {
+ t.Fatalf("Error removing nodes")
+ }
+ n = m.nodeMap.FindByName("ue4")
+ if n != nil {
+ t.Fatalf("Failed to remove nodes")
+ }
+
+ fmt.Println("Remove ue3 & ue5")
+ ue3_node = dataModel.ScenarioNode{Type_: NodeTypeUE, NodeDataUnion: &ue3_data}
+ err = m.RemoveScenarioNode(&ue3_node)
+ if err != nil {
+ t.Fatalf("Error removing nodes")
+ }
+ n = m.nodeMap.FindByName("ue3")
+ if n != nil {
+ t.Fatalf("Failed to remove nodes")
}
}
@@ -958,55 +1144,55 @@ func TestValidateScenario(t *testing.T) {
fmt.Println("--- ", t.Name())
log.MeepTextLogInit(t.Name())
+ ValidatorVersion = semver.Version{Major: 1, Minor: 5, Patch: 0}
+
// Incompatible scenarios
fmt.Println("Validate empty scenario")
validJsonScenario, status, err := ValidateScenario([]byte(""))
if validJsonScenario != nil || status != ValidatorStatusError || err == nil {
- t.Errorf("Empty scenario should not be valid")
+ t.Fatalf("Empty scenario should not be valid")
}
- fmt.Println("Validate scenario: scenarioVer[none] < validatorVer[2.0.0]")
- ValidatorVersion = semver.Version{Major: 2, Minor: 0, Patch: 0}
- validJsonScenario, status, err = ValidateScenario([]byte(testScenario))
- if validJsonScenario != nil || status != ValidatorStatusError || err == nil {
- t.Errorf("validJsonScenario should not be compatible")
- }
-
- fmt.Println("Validate scenario: scenarioVer[1.0.0] < validatorVer[2.0.0]")
- ValidatorVersion = semver.Version{Major: 2, Minor: 0, Patch: 0}
+ fmt.Println("Validate scenario: scenarioVer[1.0.0] == too old")
validJsonScenario, status, err = ValidateScenario([]byte(testScenario_v1_0_0))
if validJsonScenario != nil || status != ValidatorStatusError || err == nil {
- t.Errorf("validJsonScenario should not be compatible")
+ t.Fatalf("validJsonScenario should not be compatible")
}
// Compatible Scenarios
- fmt.Println("Validate scenario: scenarioVer[none] < validatorVer[1.3.0]")
- ValidatorVersion = semver.Version{Major: 1, Minor: 3, Patch: 0}
+ fmt.Println("Validate scenario: scenarioVer[none] == validatorVer[1.5.0]")
validJsonScenario, status, err = ValidateScenario([]byte(testScenario))
if validJsonScenario == nil || status != ValidatorStatusUpdated || err != nil {
- t.Errorf("validJsonScenario should not be nil")
+ t.Fatalf("validJsonScenario should not be nil")
}
- if string(validJsonScenario) != testScenario_v1_3_0 {
- t.Errorf("validJsonScenario != testScenario_v1_3_0")
+ if string(validJsonScenario) != testScenario_v1_5_0 {
+ t.Fatalf("validJsonScenario != testScenario_v1_5_0")
}
- fmt.Println("Validate scenario: scenarioVer[1.0.0] < validatorVer[1.3.0]")
- ValidatorVersion = semver.Version{Major: 1, Minor: 3, Patch: 0}
- validJsonScenario, status, err = ValidateScenario([]byte(testScenario_v1_0_0))
+ fmt.Println("Validate scenario: scenarioVer[1.5.0] == validatorVer[1.5.0]")
+ validJsonScenario, status, err = ValidateScenario([]byte(testScenario_v1_5_0))
+ if validJsonScenario == nil || status != ValidatorStatusValid || err != nil {
+ t.Fatalf("validJsonScenario should not be nil")
+ }
+ if string(validJsonScenario) != testScenario_v1_5_0 {
+ t.Fatalf("validJsonScenario != testScenario_v1_5_0")
+ }
+
+ fmt.Println("Validate scenario: scenarioVer[1.4.0] < validatorVer[1.5.0]")
+ validJsonScenario, status, err = ValidateScenario([]byte(testScenario_v1_4_0))
if validJsonScenario == nil || status != ValidatorStatusUpdated || err != nil {
- t.Errorf("validJsonScenario should not be nil")
+ t.Fatalf("validJsonScenario should not be nil")
}
- if string(validJsonScenario) != testScenario_v1_3_0 {
- t.Errorf("validJsonScenario != testScenario_v1_3_0")
+ if string(validJsonScenario) != testScenario_v1_5_0 {
+ t.Fatalf("validJsonScenario != testScenario_v1_5_0")
}
- fmt.Println("Validate scenario: scenarioVer[1.3.0] == validatorVer[1.3.0]")
- ValidatorVersion = semver.Version{Major: 1, Minor: 3, Patch: 0}
+ fmt.Println("Validate scenario: scenarioVer[1.3.0] < validatorVer[1.5.0]")
validJsonScenario, status, err = ValidateScenario([]byte(testScenario_v1_3_0))
- if validJsonScenario == nil || status != ValidatorStatusValid || err != nil {
- t.Errorf("validJsonScenario should not be nil")
+ if validJsonScenario == nil || status != ValidatorStatusUpdated || err != nil {
+ t.Fatalf("validJsonScenario should not be nil")
}
- if string(validJsonScenario) != testScenario_v1_3_0 {
- t.Errorf("validJsonScenario != testScenario_v1_3_0")
+ if string(validJsonScenario) != testScenario_v1_5_0 {
+ t.Fatalf("validJsonScenario != testScenario_v1_5_0")
}
}
diff --git a/go-packages/meep-model/nodeMap_test.go b/go-packages/meep-model/nodeMap_test.go
index ece34370795d394b471414a7f5e779b792d3f455..cd3a2f5443c822d5308eb7da45c8242acff588f6 100644
--- a/go-packages/meep-model/nodeMap_test.go
+++ b/go-packages/meep-model/nodeMap_test.go
@@ -21,7 +21,7 @@ import (
"fmt"
"testing"
- ceModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model"
+ dataModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model"
log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
)
@@ -30,7 +30,7 @@ func TestNodeMapDomains(t *testing.T) {
log.MeepTextLogInit(t.Name())
fmt.Println("Create a scenario structure")
- scenario := new(ceModel.Scenario)
+ scenario := new(dataModel.Scenario)
err := json.Unmarshal([]byte(testScenario), scenario)
if err != nil {
t.Errorf("Unable to unmarshall scenario")
@@ -83,21 +83,21 @@ func TestNodeMapDomains(t *testing.T) {
}
// Change an object field via the node
testID := "new-test-id"
- objPtr := n.object.(*ceModel.Domain)
+ objPtr := n.object.(*dataModel.Domain)
////fmt.Printf(" node.object ptr %p\n%+v\n", objPtr, *objPtr)
objPtr.Id = testID
if scenario.Deployment.Domains[1].Id != testID {
t.Errorf("Failed changing domain id")
}
// Change a child field via the node
- childPtr := n.child.(*[]ceModel.Zone)
+ childPtr := n.child.(*[]dataModel.Zone)
//fmt.Printf(" node.child ptr %p\n%+v\n", childPtr, *childPtr)
(*childPtr)[0].Id = testID
if scenario.Deployment.Domains[1].Zones[0].Id != testID {
t.Errorf("Failed changing zone[0] id")
}
// Change a parent field via the node
- parentPtr := n.parent.(*ceModel.Deployment)
+ parentPtr := n.parent.(*dataModel.Deployment)
//fmt.Printf(" node.parent ptr %p\n%+v\n", parentPtr, *parentPtr)
parentPtr.InterDomainLatency = 500
if scenario.Deployment.InterDomainLatency != 500 {
@@ -115,7 +115,7 @@ func TestNodeMapZone(t *testing.T) {
log.MeepTextLogInit(t.Name())
fmt.Println("Create a scenario structure")
- scenario := new(ceModel.Scenario)
+ scenario := new(dataModel.Scenario)
err := json.Unmarshal([]byte(testScenario), scenario)
if err != nil {
t.Errorf("Unable to unmarshall scenario")
@@ -159,21 +159,21 @@ func TestNodeMapZone(t *testing.T) {
// Change an object field via the node
testID := "new-test-id"
- objPtr := n.object.(*ceModel.Zone)
+ objPtr := n.object.(*dataModel.Zone)
//fmt.Printf(" node.object ptr %p\n%+v\n", objPtr, *objPtr)
objPtr.Id = testID
if domain.Zones[1].Id != testID {
t.Errorf("Failed changing zone id")
}
// Change a child field via the node
- childPtr := n.child.(*[]ceModel.NetworkLocation)
+ childPtr := n.child.(*[]dataModel.NetworkLocation)
//fmt.Printf(" node.child ptr %p\n%+v\n", childPtr, *childPtr)
(*childPtr)[0].Id = testID
if domain.Zones[1].NetworkLocations[0].Id != testID {
t.Errorf("Failed changing NetworkLocation[0] id")
}
// Change a parent field via the node
- parentPtr := n.parent.(*ceModel.Domain)
+ parentPtr := n.parent.(*dataModel.Domain)
//fmt.Printf(" node.parent ptr %p\n%+v\n", parentPtr, *parentPtr)
parentPtr.Id = testID
if domain.Id != testID {
@@ -191,7 +191,7 @@ func TestNodeMapNetworkLocation(t *testing.T) {
log.MeepTextLogInit(t.Name())
fmt.Println("Create a scenario structure")
- scenario := new(ceModel.Scenario)
+ scenario := new(dataModel.Scenario)
err := json.Unmarshal([]byte(testScenario), scenario)
if err != nil {
t.Errorf("Unable to unmarshall scenario")
@@ -235,21 +235,21 @@ func TestNodeMapNetworkLocation(t *testing.T) {
// Change an object field via the node
testID := "new-test-id"
- objPtr := n.object.(*ceModel.NetworkLocation)
+ objPtr := n.object.(*dataModel.NetworkLocation)
//fmt.Printf(" node.object ptr %p\n%+v\n", objPtr, *objPtr)
objPtr.Id = testID
if zone.NetworkLocations[1].Id != testID {
t.Errorf("Failed changing NL id")
}
// Change a child field via the node
- childPtr := n.child.(*[]ceModel.PhysicalLocation)
+ childPtr := n.child.(*[]dataModel.PhysicalLocation)
//fmt.Printf(" node.child ptr %p\n%+v\n", childPtr, *childPtr)
(*childPtr)[0].Id = testID
if zone.NetworkLocations[1].PhysicalLocations[0].Id != testID {
t.Errorf("Failed changing PL[0] id")
}
// Change a parent field via the node
- parentPtr := n.parent.(*ceModel.Zone)
+ parentPtr := n.parent.(*dataModel.Zone)
//fmt.Printf(" node.parent ptr %p\n%+v\n", parentPtr, *parentPtr)
parentPtr.Id = testID
if zone.Id != testID {
@@ -267,7 +267,7 @@ func TestNodeMapPhysicalLocation(t *testing.T) {
log.MeepTextLogInit(t.Name())
fmt.Println("Create a scenario structure")
- scenario := new(ceModel.Scenario)
+ scenario := new(dataModel.Scenario)
err := json.Unmarshal([]byte(testScenario), scenario)
if err != nil {
t.Errorf("Unable to unmarshall scenario")
@@ -311,21 +311,21 @@ func TestNodeMapPhysicalLocation(t *testing.T) {
// Change an object field via the node
testID := "new-test-id"
- objPtr := n.object.(*ceModel.PhysicalLocation)
+ objPtr := n.object.(*dataModel.PhysicalLocation)
//fmt.Printf(" node.object ptr %p\n%+v\n", objPtr, *objPtr)
objPtr.Id = testID
if nl.PhysicalLocations[1].Id != testID {
t.Errorf("Failed changing PL id")
}
// Change a child field via the node
- childPtr := n.child.(*[]ceModel.Process)
+ childPtr := n.child.(*[]dataModel.Process)
//fmt.Printf(" node.child ptr %p\n%+v\n", childPtr, *childPtr)
(*childPtr)[0].Id = testID
if nl.PhysicalLocations[1].Processes[0].Id != testID {
t.Errorf("Failed changing Process[0] id")
}
// Change a parent field via the node
- parentPtr := n.parent.(*ceModel.NetworkLocation)
+ parentPtr := n.parent.(*dataModel.NetworkLocation)
//fmt.Printf(" node.parent ptr %p\n%+v\n", parentPtr, *parentPtr)
parentPtr.Id = testID
if nl.Id != testID {
@@ -343,7 +343,7 @@ func TestNodeMapProcess(t *testing.T) {
log.MeepTextLogInit(t.Name())
fmt.Println("Create a scenario structure")
- scenario := new(ceModel.Scenario)
+ scenario := new(dataModel.Scenario)
err := json.Unmarshal([]byte(testScenario), scenario)
if err != nil {
t.Errorf("Unable to unmarshall scenario")
@@ -387,14 +387,14 @@ func TestNodeMapProcess(t *testing.T) {
// Change an object field via the node
testID := "new-test-id"
- objPtr := n.object.(*ceModel.Process)
+ objPtr := n.object.(*dataModel.Process)
//fmt.Printf(" node.object ptr %p\n%+v\n", objPtr, *objPtr)
objPtr.Id = testID
if pl.Processes[1].Id != testID {
t.Errorf("Failed changing Process id")
}
// Change a parent field via the node
- parentPtr := n.parent.(*ceModel.PhysicalLocation)
+ parentPtr := n.parent.(*dataModel.PhysicalLocation)
//fmt.Printf(" node.parent ptr %p\n%+v\n", parentPtr, *parentPtr)
parentPtr.Id = testID
if pl.Id != testID {
diff --git a/go-packages/meep-model/validator.go b/go-packages/meep-model/validator.go
index 558c1c97b72a39b6959641702ae61c138f546b8a..13a090a7e7be2c19e5bdac775caaf8aa25ddc117 100644
--- a/go-packages/meep-model/validator.go
+++ b/go-packages/meep-model/validator.go
@@ -20,7 +20,7 @@ import (
"encoding/json"
"errors"
- ceModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model"
+ dataModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model"
log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
"github.com/blang/semver"
@@ -33,83 +33,270 @@ const (
ValidatorStatusError = "SCENARIO-ERROR"
)
-var DefaultVersion = semver.Version{Major: 1, Minor: 0, Patch: 0}
-var ValidatorVersion = semver.Version{Major: 1, Minor: 4, Patch: 0}
+// Current validator version
+var ValidatorVersion = semver.Version{Major: 1, Minor: 5, Patch: 0}
+
+// Versions requiring scenario update
+var Version130 = semver.Version{Major: 1, Minor: 3, Patch: 0}
+var Version140 = semver.Version{Major: 1, Minor: 4, Patch: 0}
+var Version150 = semver.Version{Major: 1, Minor: 5, Patch: 0}
+
+// Default latency distribution
+const DEFAULT_LATENCY_DISTRIBUTION = "Normal"
+
+// setNetChar - Creates a new netchar object if non-existent and migrate values from deprecated fields
+func createNetChar(lat int32, latVar int32, dist string, tputDl int32, tputUl int32, loss float64) *dataModel.NetworkCharacteristics {
+ nc := new(dataModel.NetworkCharacteristics)
+ nc.Latency = lat
+ nc.LatencyVariation = latVar
+ nc.LatencyDistribution = dist
+ nc.PacketLoss = loss
+ nc.ThroughputDl = tputDl
+ nc.ThroughputUl = tputUl
+ return nc
+}
// ValidateScenario - Verify if json scenario is valid & supported. Upgrade scenario if possible & necessary.
func ValidateScenario(jsonScenario []byte) (validJsonScenario []byte, status string, err error) {
var scenarioVersion semver.Version
// Unmarshal scenario
- scenario := new(ceModel.Scenario)
+ scenario := new(dataModel.Scenario)
err = json.Unmarshal(jsonScenario, scenario)
if err != nil {
log.Error(err.Error())
return nil, ValidatorStatusError, err
}
-
// Retrieve scenario version
+ // If no version found, assume current validator version
if scenario.Version == "" {
- scenarioVersion = DefaultVersion
+ scenarioVersion = ValidatorVersion
} else {
scenarioVersion, err = semver.Make(scenario.Version)
if err != nil {
log.Error(err.Error())
return nil, ValidatorStatusError, err
}
+
+ // Verify that scenario is compatible
+ if scenarioVersion.Major != ValidatorVersion.Major ||
+ scenarioVersion.GT(ValidatorVersion) ||
+ scenarioVersion.LT(Version130) {
+ err = errors.New("Scenario version " + scenario.Version + " incompatible with validator version " + ValidatorVersion.String())
+ return nil, ValidatorStatusError, err
+ }
+
+ // Skip validation if already current version
+ if scenarioVersion.EQ(ValidatorVersion) {
+ return jsonScenario, ValidatorStatusValid, nil
+ }
+ }
+
+ // Run upgrade functions starting from oldest applicable patch to newest
+
+ // UPGRADE TO 1.4.0
+ if scenarioVersion.LT(Version140) {
+ upgradeScenarioTo140(scenario)
+ scenarioVersion = Version140
+ }
+ // UPGRADE TO 1.5.0
+ if scenarioVersion.LT(Version150) {
+ upgradeScenarioTo150(scenario)
+ scenarioVersion = Version150
}
- // Verify that scenario is compatible
- if scenarioVersion.Major != ValidatorVersion.Major || scenarioVersion.GT(ValidatorVersion) {
- err = errors.New("Scenario version " + scenario.Version + " incompatible with validator version " + ValidatorVersion.String())
+ // Set current scenario version
+ scenario.Version = ValidatorVersion.String()
+
+ // Marshal updated scenario
+ validJsonScenario, err = json.Marshal(scenario)
+ if err != nil {
return nil, ValidatorStatusError, err
}
+ return validJsonScenario, ValidatorStatusUpdated, err
+}
- // Upgrade scenario if necessary
- if scenarioVersion.EQ(ValidatorVersion) {
- return jsonScenario, ValidatorStatusValid, nil
- } else {
- // Set updated version
- scenario.Version = ValidatorVersion.String()
-
- // Migrate zone information
- if scenario.Deployment != nil {
- for iDomain := range scenario.Deployment.Domains {
- domain := &scenario.Deployment.Domains[iDomain]
- for iZone := range domain.Zones {
- zone := &domain.Zones[iZone]
-
- // Create new Network Characteristic field and migrate values from EdgeFog
- if zone.NetChar == nil {
- zone.NetChar = new(ceModel.NetworkCharacteristics)
- zone.NetChar.Latency = zone.EdgeFogLatency
- zone.NetChar.LatencyVariation = zone.EdgeFogLatencyVariation
- zone.NetChar.PacketLoss = zone.EdgeFogPacketLoss
- zone.NetChar.Throughput = zone.EdgeFogThroughput
+func upgradeScenarioTo140(scenario *dataModel.Scenario) {
+ // Set updated version
+ scenario.Version = Version140.String()
+
+ if scenario.Deployment != nil {
+ for iDomain := range scenario.Deployment.Domains {
+ domain := &scenario.Deployment.Domains[iDomain]
+ for iZone := range domain.Zones {
+ zone := &domain.Zones[iZone]
+
+ // Create new Network Characteristic field and migrate values from EdgeFog
+ if zone.NetChar == nil {
+ zone.NetChar = new(dataModel.NetworkCharacteristics)
+ zone.NetChar.Latency = zone.EdgeFogLatency
+ zone.NetChar.LatencyVariation = zone.EdgeFogLatencyVariation
+ zone.NetChar.PacketLoss = zone.EdgeFogPacketLoss
+ zone.NetChar.Throughput = zone.EdgeFogThroughput
+ }
+
+ // Reset deprecated values to omit them
+ zone.InterEdgeLatency = 0
+ zone.InterEdgeLatencyVariation = 0
+ zone.InterEdgePacketLoss = 0
+ zone.InterEdgeThroughput = 0
+ zone.InterFogLatency = 0
+ zone.InterFogLatencyVariation = 0
+ zone.InterFogPacketLoss = 0
+ zone.InterFogThroughput = 0
+ zone.EdgeFogLatency = 0
+ zone.EdgeFogLatencyVariation = 0
+ zone.EdgeFogPacketLoss = 0
+ zone.EdgeFogThroughput = 0
+ }
+ }
+ }
+}
+
+func upgradeScenarioTo150(scenario *dataModel.Scenario) {
+ // Set updated version
+ scenario.Version = Version150.String()
+
+ // Migrate netchar information
+ if scenario.Deployment != nil {
+ deploy := scenario.Deployment
+
+ // Create new Network Characteristic field and migrate values, if necessary
+ if deploy.NetChar == nil {
+ deploy.NetChar = createNetChar(
+ deploy.InterDomainLatency,
+ deploy.InterDomainLatencyVariation,
+ DEFAULT_LATENCY_DISTRIBUTION,
+ deploy.InterDomainThroughput,
+ deploy.InterDomainThroughput,
+ deploy.InterDomainPacketLoss)
+ }
+
+ // Reset deprecated values to omit them
+ deploy.InterDomainLatency = 0
+ deploy.InterDomainLatencyVariation = 0
+ deploy.InterDomainPacketLoss = 0
+ deploy.InterDomainThroughput = 0
+
+ for iDomain := range scenario.Deployment.Domains {
+ domain := &scenario.Deployment.Domains[iDomain]
+
+ // Create new Network Characteristic field and migrate values, if necessary
+ if domain.NetChar == nil {
+ domain.NetChar = createNetChar(
+ domain.InterZoneLatency,
+ domain.InterZoneLatencyVariation,
+ "",
+ domain.InterZoneThroughput,
+ domain.InterZoneThroughput,
+ domain.InterZonePacketLoss)
+ }
+
+ // Reset deprecated values to omit them
+ domain.InterZoneLatency = 0
+ domain.InterZoneLatencyVariation = 0
+ domain.InterZonePacketLoss = 0
+ domain.InterZoneThroughput = 0
+
+ for iZone := range domain.Zones {
+ zone := &domain.Zones[iZone]
+
+ // Migrate throughput values, if necessary
+ if zone.NetChar.ThroughputDl == 0 {
+ zone.NetChar.ThroughputDl = zone.NetChar.Throughput
+ zone.NetChar.ThroughputUl = zone.NetChar.Throughput
+ }
+
+ // Reset deprecated values to omit
+ zone.NetChar.Throughput = 0
+
+ for iNl := range zone.NetworkLocations {
+ nl := &zone.NetworkLocations[iNl]
+
+ // Create new Network Characteristic field and migrate values, if necessary
+ if nl.NetChar == nil {
+ nl.NetChar = createNetChar(
+ nl.TerminalLinkLatency,
+ nl.TerminalLinkLatencyVariation,
+ "",
+ nl.TerminalLinkThroughput,
+ nl.TerminalLinkThroughput,
+ nl.TerminalLinkPacketLoss)
}
// Reset deprecated values to omit them
- zone.InterEdgeLatency = 0
- zone.InterEdgeLatencyVariation = 0
- zone.InterEdgePacketLoss = 0
- zone.InterEdgeThroughput = 0
- zone.InterFogLatency = 0
- zone.InterFogLatencyVariation = 0
- zone.InterFogPacketLoss = 0
- zone.InterFogThroughput = 0
- zone.EdgeFogLatency = 0
- zone.EdgeFogLatencyVariation = 0
- zone.EdgeFogPacketLoss = 0
- zone.EdgeFogThroughput = 0
+ nl.TerminalLinkLatency = 0
+ nl.TerminalLinkLatencyVariation = 0
+ nl.TerminalLinkPacketLoss = 0
+ nl.TerminalLinkThroughput = 0
+
+ // Physical Locations
+ for iPl := range nl.PhysicalLocations {
+ pl := &nl.PhysicalLocations[iPl]
+
+ // Create new Network Characteristic field and migrate values, if necessary
+ if pl.NetChar == nil {
+ pl.NetChar = createNetChar(
+ pl.LinkLatency,
+ pl.LinkLatencyVariation,
+ "",
+ pl.LinkThroughput,
+ pl.LinkThroughput,
+ pl.LinkPacketLoss)
+ }
+
+ // Reset deprecated values to omit them
+ pl.LinkLatency = 0
+ pl.LinkLatencyVariation = 0
+ pl.LinkPacketLoss = 0
+ pl.LinkThroughput = 0
+
+ for iProc := range pl.Processes {
+ proc := &pl.Processes[iProc]
+
+ // Create new Network Characteristic field and migrate values, if necessary
+ if proc.NetChar == nil {
+ proc.NetChar = createNetChar(
+ proc.AppLatency,
+ proc.AppLatencyVariation,
+ "",
+ proc.AppThroughput,
+ proc.AppThroughput,
+ proc.AppPacketLoss)
+ }
+
+ // Reset deprecated values to omit them
+ proc.AppLatency = 0
+ proc.AppLatencyVariation = 0
+ proc.AppPacketLoss = 0
+ proc.AppThroughput = 0
+ }
+ }
}
}
}
}
+}
- // Marshal updated scenario
- validJsonScenario, err = json.Marshal(scenario)
- if err != nil {
- return nil, ValidatorStatusError, err
+// Validate the provided PL
+func validatePL(pl *dataModel.PhysicalLocation) error {
+
+ if pl.Id == "" {
+ pl.Id = pl.Name
}
- return validJsonScenario, ValidatorStatusUpdated, err
+ if pl.Name == "" {
+ return errors.New("Invalid Name")
+ }
+ if pl.Type_ != NodeTypeUE {
+ return errors.New("Unsupported PL Type: " + pl.Type_)
+ }
+ if pl.NetChar != nil {
+ if pl.NetChar.ThroughputDl == 0 {
+ pl.NetChar.ThroughputDl = 1000
+ }
+ if pl.NetChar.ThroughputUl == 0 {
+ pl.NetChar.ThroughputUl = 1000
+ }
+ }
+ return nil
}
diff --git a/go-packages/meep-mq/go.mod b/go-packages/meep-mq/go.mod
new file mode 100644
index 0000000000000000000000000000000000000000..834d9a619820b92d7c24643f55605b26754fd268
--- /dev/null
+++ b/go-packages/meep-mq/go.mod
@@ -0,0 +1,13 @@
+module github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq
+
+go 1.12
+
+require (
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis v0.0.0
+)
+
+replace (
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger => ../../go-packages/meep-logger
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis => ../../go-packages/meep-redis
+)
diff --git a/go-packages/meep-mq/go.sum b/go-packages/meep-mq/go.sum
new file mode 100644
index 0000000000000000000000000000000000000000..dd58e92dad341189b6f189dfbbaf4cc6919bc436
--- /dev/null
+++ b/go-packages/meep-mq/go.sum
@@ -0,0 +1,28 @@
+github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db/go.mod h1:RU+6d0CNIRSp6yo1mXLIIrnFa/3LHhvcDVLVJyovptM=
+github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351 h1:1u1XrfCBnY+GijnyU6O1k4odp5TnqZQTsp5v7+n/E4Y=
+github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351/go.mod h1:HxwfbuElTuGf+/uKZfjJrCnv0BmmpkPJDI7gBwj1KkM=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/go-redis/redis v6.15.2+incompatible h1:9SpNVG76gr6InJGxoZ6IuuxaCOQwDAhzyXg+Bs+0Sb4=
+github.com/go-redis/redis v6.15.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k=
+github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
+github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e h1:o3PsSEY8E4eXWkXrIP9YJALUkVZqzHJT5DOasTyn8Vs=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/go-packages/meep-mq/mq.go b/go-packages/meep-mq/mq.go
new file mode 100644
index 0000000000000000000000000000000000000000..107e4c3a3d2e63eaed696c5e1655c783f6117329
--- /dev/null
+++ b/go-packages/meep-mq/mq.go
@@ -0,0 +1,299 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package mq
+
+import (
+ "encoding/json"
+ "errors"
+ "fmt"
+ "time"
+
+ log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
+ redis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis"
+)
+
+type Msg struct {
+ SrcName string `json:"src,omitempty"`
+ SrcNamespace string `json:"src-ns,omitempty"`
+ DstName string `json:"dst,omitempty"`
+ DstNamespace string `json:"dst-ns,omitempty"`
+ Scope string `json:"scope,omitempty"`
+ Message Message `json:"msg,omitempty"`
+ Payload map[string]string `json:"payload,omitempty"`
+}
+
+type MsgHandler struct {
+ Handler func(msg *Msg, userData interface{})
+ UserData interface{}
+}
+
+type MsgQueue struct {
+ name string
+ moduleName string
+ moduleNamespace string
+ rc *redis.Connector
+ handlers map[int]MsgHandler
+ counter int
+}
+
+// Messages
+type Message string
+
+const (
+ // Sandbox Control
+ MsgSandboxCreate Message = "SANDBOX-CREATE"
+ MsgSandboxDestroy Message = "SANDBOX-DESTROY"
+
+ // Scenario Management
+ MsgScenarioActivate Message = "SCENARIO-ACTIVATE"
+ MsgScenarioUpdate Message = "SCENARIO-UPDATE"
+ MsgScenarioTerminate Message = "SCENARIO-TERMINATE"
+
+ // Mobility Groups
+ MsgMgLbRulesUpdate Message = "MG-LB-RULES-UPDATE"
+
+ // Traffic Control
+ MsgTcLbRulesUpdate Message = "TC-LB-RULES-UPDATE"
+ MsgTcNetRulesUpdate Message = "TC-NET-RULES-UPDATE"
+
+ // GIS Engine
+ MsgGeUpdate Message = "GIS-ENGINE-UPDATE"
+
+ // Watchdog
+ MsgPing Message = "PING"
+ MsgPong Message = "PONG"
+)
+
+const globalQueueName = "mq:global"
+const localQueueNamePrefix = "mq:"
+const TargetAll = "all"
+const redisTable = 0
+
+// MsgQueue - Creates and initialize a Message Queue instance
+func NewMsgQueue(name string, moduleName string, moduleNamespace string, addr string) (*MsgQueue, error) {
+ var err error
+
+ // Validate input params
+ if name == "" {
+ err = errors.New("Invalid name")
+ log.Error(err.Error())
+ return nil, err
+ }
+ if moduleName == "" {
+ err = errors.New("Invalid name or namespace")
+ log.Error(err.Error())
+ return nil, err
+ }
+ if moduleNamespace == "" {
+ err = errors.New("Invalid module namespace name or namespace")
+ log.Error(err.Error())
+ return nil, err
+ }
+
+ // Create new Message Queue
+ log.Info("Creating new MsgQueue")
+ mq := new(MsgQueue)
+ mq.name = name
+ mq.moduleName = moduleName
+ mq.moduleNamespace = moduleNamespace
+ mq.counter = 0
+ mq.handlers = make(map[int]MsgHandler)
+
+ // Connect to Redis DB
+ mq.rc, err = redis.NewConnector(addr, redisTable)
+ if err != nil {
+ log.Error("Failed connection to Message Queue redis DB. Error: ", err)
+ return nil, err
+ }
+ log.Info("Connected to Message Queue Redis DB")
+
+ return mq, nil
+}
+
+// CreateMsg - Create a new message
+func (mq *MsgQueue) CreateMsg(message Message, dstName string, dstNamespace string) *Msg {
+ msg := new(Msg)
+ msg.SrcName = mq.moduleName
+ msg.SrcNamespace = mq.moduleNamespace
+ msg.DstName = dstName
+ msg.DstNamespace = dstNamespace
+ msg.Scope = mq.name
+ msg.Message = message
+ msg.Payload = make(map[string]string)
+ return msg
+}
+
+// SendMsg - Send the provided message
+func (mq *MsgQueue) SendMsg(msg *Msg) error {
+ // Validate message format
+ err := mq.validateMsg(msg)
+ if err != nil {
+ log.Error("Message validation failed with err: ", err.Error())
+ return err
+ }
+ // Validate message source
+ if msg.SrcName != mq.moduleName || msg.SrcNamespace != mq.moduleNamespace {
+ err = errors.New("Message source not equal to Msg Queue module name/namespace")
+ log.Error(err.Error())
+ return err
+ }
+ log.Trace("Sending message: ", PrintMsg(msg))
+
+ // Marshal message
+ jsonMsg, err := json.Marshal(msg)
+ if err != nil {
+ log.Error("Failed to marshal message with err: ", err.Error())
+ return err
+ }
+
+ // Publish message on queue
+ err = mq.rc.Publish(mq.name, string(jsonMsg))
+ if err != nil {
+ log.Error("Failed to publish message on queue ", mq.name, " with err: ", err.Error())
+ return err
+ }
+
+ return nil
+}
+
+// Register - Add a message handler
+func (mq *MsgQueue) RegisterHandler(handler MsgHandler) (id int, err error) {
+
+ // Validate handler
+ if handler.Handler == nil {
+ err = errors.New("Invalid handler")
+ return
+ }
+
+ // Add Handler
+ mq.counter++
+ mq.handlers[mq.counter] = handler
+
+ // Start listening for messages if first handler
+ if len(mq.handlers) == 1 {
+ // Subscribe to channels
+ err = mq.rc.Subscribe([]string{mq.name}...)
+ if err != nil {
+ log.Error("Failed to subscribe to channels with err: ", err.Error())
+ delete(mq.handlers, mq.counter)
+ return
+ }
+
+ // Start goroutine to listen on subscribed channels
+ go func() {
+ err := mq.rc.Listen(mq.eventHandler)
+ if err != nil {
+ log.Error("Error listening on subscribed channels: ", err.Error())
+ }
+ log.Info("Exiting listener goroutine")
+ }()
+
+ // Give the Listener time to create the stop channel
+ time.Sleep(100 * time.Millisecond)
+ }
+
+ // Return handler ID
+ return mq.counter, nil
+}
+
+// Unregister - Remove a message handler
+func (mq *MsgQueue) UnregisterHandler(id int) {
+ // lock.Lock()
+ // defer lock.Unlock()
+
+ // Remove handler
+ delete(mq.handlers, id)
+
+ // Stop listening if no more handlers
+ if len(mq.handlers) == 0 {
+ mq.rc.StopListen()
+ _ = mq.rc.Unsubscribe([]string{mq.name}...)
+ }
+}
+
+// Event handler
+func (mq *MsgQueue) eventHandler(channel string, payload string) {
+ log.Trace("Received message on channel[", channel, "]")
+
+ // Unmarshal message
+ msg := new(Msg)
+ err := json.Unmarshal([]byte(payload), msg)
+ if err != nil {
+ log.Error("Failed to unmarshal message")
+ return
+ }
+
+ // Validate message format
+ err = mq.validateMsg(msg)
+ if err != nil {
+ log.Error("Message validation failed with err: ", err.Error())
+ return
+ }
+ // Validate message destination
+ if (msg.DstName != TargetAll && msg.DstName != mq.moduleName) ||
+ (msg.DstNamespace != TargetAll && msg.DstNamespace != mq.moduleNamespace) {
+ log.Trace("Ignoring message with other destination")
+ return
+ }
+ log.Trace("Received message: ", PrintMsg(msg))
+
+ // Invoke registered handlers
+ for _, handler := range mq.handlers {
+ handler.Handler(msg, handler.UserData)
+ }
+}
+
+// Validate message format
+func (mq *MsgQueue) validateMsg(msg *Msg) error {
+ if msg == nil {
+ return errors.New("nil message")
+ }
+ if msg.SrcName == "" || msg.SrcNamespace == "" {
+ return errors.New("Invalid source")
+ }
+ if msg.DstName == "" || msg.DstNamespace == "" {
+ return errors.New("Invalid destination")
+ }
+ if msg.Scope != mq.name {
+ return errors.New("Invalid scope")
+ }
+ if msg.Message == "" {
+ return errors.New("Invalid message type")
+ }
+ return nil
+}
+
+// GetGlobalName - Get global queue name
+func GetGlobalName() string {
+ return globalQueueName
+}
+
+// GetLocalName - Get local namespace-specific queue name
+func GetLocalName(namespace string) string {
+ return localQueueNamePrefix + namespace
+}
+
+// Convert message to string
+func PrintMsg(msg *Msg) string {
+ msgStr := "Message[" + string(msg.Message) +
+ "] Src[" + msg.SrcNamespace + ":" + msg.SrcName +
+ "] Dst[" + msg.DstNamespace + ":" + msg.DstName +
+ "] Scope[" + msg.Scope +
+ "] Payload[" + fmt.Sprintf("%+v", msg.Payload) + "]"
+
+ return msgStr
+}
diff --git a/go-packages/meep-mq/mq_test.go b/go-packages/meep-mq/mq_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..b92ae23113d7bd037e331cfd27f0fe7531e9c2e9
--- /dev/null
+++ b/go-packages/meep-mq/mq_test.go
@@ -0,0 +1,359 @@
+/*
+ * Copyright (c) 2019 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package mq
+
+import (
+ "fmt"
+ "testing"
+ "time"
+
+ log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
+)
+
+const mqRedisAddr string = "localhost:30380"
+const mqModName string = "module-name"
+const mqModNs string = "sbox-1"
+
+const key1 = "key1"
+const val1 = "val1"
+const key2 = "key2"
+const val2 = "val2"
+const key3 = "key3"
+const val3 = "val3"
+
+var RxMsg *Msg = nil
+var RxMsgUpdateCount int = 0
+
+func TestMsgQueueNew(t *testing.T) {
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+ var mq *MsgQueue
+ var err error
+
+ fmt.Println("Invalid Message Queue")
+ mq, err = NewMsgQueue("", mqModName, mqModNs, mqRedisAddr)
+ if err == nil || mq != nil {
+ t.Fatalf("Message Queue creation should have failed")
+ }
+ mq, err = NewMsgQueue(GetGlobalName(), "", mqModNs, mqRedisAddr)
+ if err == nil || mq != nil {
+ t.Fatalf("Message Queue creation should have failed")
+ }
+ mq, err = NewMsgQueue(GetGlobalName(), mqModName, "", mqRedisAddr)
+ if err == nil || mq != nil {
+ t.Fatalf("Message Queue creation should have failed")
+ }
+
+ fmt.Println("Create Message Queue")
+ mq, err = NewMsgQueue(GetLocalName(mqModNs), mqModName, mqModNs, mqRedisAddr)
+ if err != nil {
+ t.Fatalf("Unable to create Message Queue")
+ }
+ if mq.name != GetLocalName(mqModNs) || mq.moduleName != mqModName || mq.moduleNamespace != mqModNs {
+ t.Fatalf("Invalid Message Queue")
+ }
+}
+
+func TestMsgQueueSendMsg(t *testing.T) {
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+ var mq *MsgQueue
+ var msg *Msg
+ var err error
+
+ fmt.Println("Create Message Queue")
+ mq, err = NewMsgQueue(GetLocalName(mqModNs), mqModName, mqModNs, mqRedisAddr)
+ if err != nil {
+ t.Fatalf("Unable to create Message Queue")
+ }
+
+ fmt.Println("Send Message with invalid format")
+ err = mq.SendMsg(nil)
+ if err == nil {
+ t.Fatalf("SendMsg should have failed")
+ }
+ msg = mq.CreateMsg(MsgSandboxCreate, "", mqModNs)
+ err = mq.SendMsg(msg)
+ if err == nil {
+ t.Fatalf("SendMsg should have failed")
+ }
+ msg = mq.CreateMsg(MsgSandboxCreate, mqModName, "")
+ err = mq.SendMsg(msg)
+ if err == nil {
+ t.Fatalf("SendMsg should have failed")
+ }
+ msg = mq.CreateMsg("", mqModName, mqModNs)
+ err = mq.SendMsg(msg)
+ if err == nil {
+ t.Fatalf("SendMsg should have failed")
+ }
+
+ fmt.Println("Send valid Message")
+ msg = mq.CreateMsg(MsgSandboxCreate, mqModName, mqModNs)
+ err = mq.SendMsg(msg)
+ if err != nil {
+ t.Fatalf("Unable to send message")
+ }
+}
+
+func TestMsgQueueListen(t *testing.T) {
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+ var mq *MsgQueue
+ var msg *Msg
+ var err error
+
+ fmt.Println("Create Message Queue")
+ mq, err = NewMsgQueue(GetLocalName(mqModNs), mqModName, mqModNs, mqRedisAddr)
+ if err != nil {
+ t.Fatalf("Unable to create Message Queue")
+ }
+
+ fmt.Println("Invalid handler")
+ handler := MsgHandler{Handler: nil, UserData: nil}
+ _, err = mq.RegisterHandler(handler)
+ if err == nil {
+ t.Fatalf("Handler registration should have failed")
+ }
+
+ fmt.Println("Register message handler")
+ handler = MsgHandler{Handler: msgHandler, UserData: nil}
+ id1, err := mq.RegisterHandler(handler)
+ if err != nil {
+ t.Fatalf("Unable to register handler")
+ }
+ mq.UnregisterHandler(id1)
+
+ fmt.Println("Re-register message handler")
+ handler = MsgHandler{Handler: msgHandler, UserData: nil}
+ id1, err = mq.RegisterHandler(handler)
+ if err != nil {
+ t.Fatalf("Unable to register handler")
+ }
+
+ fmt.Println("Send messages with invalid target")
+ msg = mq.CreateMsg(MsgSandboxCreate, "invalid", mqModNs)
+ err = mq.SendMsg(msg)
+ if err != nil {
+ t.Fatalf("Unable to send message")
+ }
+ if !validateRxMsg(nil, 0) {
+ t.Fatalf("Invalid Rx Message")
+ }
+ resetHandlerData()
+ msg = mq.CreateMsg(MsgSandboxCreate, mqModName, "invalid")
+ err = mq.SendMsg(msg)
+ if err != nil {
+ t.Fatalf("Unable to send message")
+ }
+ if !validateRxMsg(nil, 0) {
+ t.Fatalf("Invalid Rx Message")
+ }
+ resetHandlerData()
+
+ fmt.Println("Send messages with valid target")
+ msg = mq.CreateMsg(MsgSandboxCreate, mqModName, mqModNs)
+ msg.Payload[key1] = val1
+ err = mq.SendMsg(msg)
+ if err != nil {
+ t.Fatalf("Unable to send message")
+ }
+ if !validateRxMsg(msg, 1) {
+ t.Fatalf("Invalid Rx Message")
+ }
+ resetHandlerData()
+ msg = mq.CreateMsg(MsgSandboxDestroy, mqModName, mqModNs)
+ msg.Payload[key1] = val1
+ msg.Payload[key2] = val2
+ err = mq.SendMsg(msg)
+ if err != nil {
+ t.Fatalf("Unable to send message")
+ }
+ if !validateRxMsg(msg, 1) {
+ t.Fatalf("Invalid Rx Message")
+ }
+ resetHandlerData()
+ msg = mq.CreateMsg(MsgSandboxCreate, mqModName, TargetAll)
+ msg.Payload[key1] = val1
+ err = mq.SendMsg(msg)
+ if err != nil {
+ t.Fatalf("Unable to send message")
+ }
+ if !validateRxMsg(msg, 1) {
+ t.Fatalf("Invalid Rx Message")
+ }
+ resetHandlerData()
+ msg = mq.CreateMsg(MsgSandboxDestroy, TargetAll, mqModNs)
+ msg.Payload[key2] = val2
+ err = mq.SendMsg(msg)
+ if err != nil {
+ t.Fatalf("Unable to send message")
+ }
+ if !validateRxMsg(msg, 1) {
+ t.Fatalf("Invalid Rx Message")
+ }
+ resetHandlerData()
+ msg = mq.CreateMsg(MsgSandboxCreate, TargetAll, TargetAll)
+ msg.Payload[key1] = val1
+ msg.Payload[key2] = val2
+ err = mq.SendMsg(msg)
+ if err != nil {
+ t.Fatalf("Unable to send message")
+ }
+ if !validateRxMsg(msg, 1) {
+ t.Fatalf("Invalid Rx Message")
+ }
+ resetHandlerData()
+ mq.UnregisterHandler(id1)
+}
+
+func TestMsgQueueMultipleListen(t *testing.T) {
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+ var mq *MsgQueue
+ var msg *Msg
+ var err error
+
+ fmt.Println("Create Message Queue")
+ mq, err = NewMsgQueue(GetLocalName(mqModNs), mqModName, mqModNs, mqRedisAddr)
+ if err != nil {
+ t.Fatalf("Unable to create Message Queue")
+ }
+
+ fmt.Println("Register multiple message handlers")
+ handler := MsgHandler{Handler: msgHandler, UserData: nil}
+ id1, err := mq.RegisterHandler(handler)
+ if err != nil {
+ t.Fatalf("Unable to register listener")
+ }
+ handler = MsgHandler{Handler: msgHandler, UserData: nil}
+ id2, err := mq.RegisterHandler(handler)
+ if err != nil {
+ t.Fatalf("Unable to register listener")
+ }
+ handler = MsgHandler{Handler: msgHandler, UserData: nil}
+ id3, err := mq.RegisterHandler(handler)
+ if err != nil {
+ t.Fatalf("Unable to register listener")
+ }
+
+ fmt.Println("Send messages with invalid target")
+ msg = mq.CreateMsg(MsgSandboxCreate, "invalid", mqModNs)
+ err = mq.SendMsg(msg)
+ if err != nil {
+ t.Fatalf("Unable to send message")
+ }
+ if !validateRxMsg(nil, 0) {
+ t.Fatalf("Invalid Rx Message")
+ }
+ resetHandlerData()
+ msg = mq.CreateMsg(MsgSandboxCreate, mqModName, "invalid")
+ err = mq.SendMsg(msg)
+ if err != nil {
+ t.Fatalf("Unable to send message")
+ }
+ if !validateRxMsg(nil, 0) {
+ t.Fatalf("Invalid Rx Message")
+ }
+ resetHandlerData()
+
+ fmt.Println("Send messages with valid target")
+ msg = mq.CreateMsg(MsgSandboxCreate, mqModName, mqModNs)
+ msg.Payload[key1] = val1
+ err = mq.SendMsg(msg)
+ if err != nil {
+ t.Fatalf("Unable to send message")
+ }
+ if !validateRxMsg(msg, 3) {
+ t.Fatalf("Invalid Rx Message")
+ }
+ resetHandlerData()
+ msg = mq.CreateMsg(MsgSandboxDestroy, TargetAll, mqModNs)
+ msg.Payload[key1] = val1
+ msg.Payload[key2] = val2
+ err = mq.SendMsg(msg)
+ if err != nil {
+ t.Fatalf("Unable to send message")
+ }
+ if !validateRxMsg(msg, 3) {
+ t.Fatalf("Invalid Rx Message")
+ }
+ resetHandlerData()
+ msg = mq.CreateMsg(MsgSandboxDestroy, mqModName, TargetAll)
+ msg.Payload[key1] = val1
+ msg.Payload[key2] = val2
+ msg.Payload[key3] = val3
+ err = mq.SendMsg(msg)
+ if err != nil {
+ t.Fatalf("Unable to send message")
+ }
+ if !validateRxMsg(msg, 3) {
+ t.Fatalf("Invalid Rx Message")
+ }
+ resetHandlerData()
+ mq.UnregisterHandler(id1)
+ mq.UnregisterHandler(id2)
+ mq.UnregisterHandler(id3)
+}
+
+func msgHandler(msg *Msg, userData interface{}) {
+ fmt.Println("msgHandler")
+ fmt.Println(msg)
+
+ RxMsgUpdateCount++
+ RxMsg = msg
+}
+
+func resetHandlerData() {
+ RxMsgUpdateCount = 0
+ RxMsg = nil
+}
+
+func validateRxMsg(msg *Msg, updateCount int) bool {
+ // Give time for the message to arrive
+ time.Sleep(50 * time.Millisecond)
+
+ // Make sure Message received if expected
+ if updateCount != RxMsgUpdateCount {
+ return false
+ }
+
+ // Validate message contents
+ if msg != nil {
+ if RxMsg == nil ||
+ msg.SrcName != RxMsg.SrcName ||
+ msg.SrcNamespace != RxMsg.SrcNamespace ||
+ msg.DstName != RxMsg.DstName ||
+ msg.DstNamespace != RxMsg.DstNamespace ||
+ msg.Scope != RxMsg.Scope ||
+ msg.Message != RxMsg.Message ||
+ len(msg.Payload) != len(RxMsg.Payload) {
+ return false
+ }
+ if len(msg.Payload) != 0 {
+ for k, v := range msg.Payload {
+ if v != RxMsg.Payload[k] {
+ return false
+ }
+ }
+ }
+ } else if RxMsg != nil {
+ return false
+ }
+
+ return true
+}
diff --git a/go-packages/meep-net-char-mgr/algo-segment.go b/go-packages/meep-net-char-mgr/algo-segment.go
index eebb7114e67db538df7dbfaffbb3c7a18f58ec87..714f2e15e9ed4dd22511888b4f2ac7b15a120eef 100644
--- a/go-packages/meep-net-char-mgr/algo-segment.go
+++ b/go-packages/meep-net-char-mgr/algo-segment.go
@@ -23,7 +23,8 @@ import (
"strings"
"time"
- ceModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model"
+ dkm "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr"
+ dataModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model"
log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
mod "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model"
redis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis"
@@ -34,7 +35,7 @@ const THROUGHPUT_UNIT = 1000000 //convert from Mbps to bps
const DEFAULT_THROUGHPUT_LINK = 1000.0
const metricsDb = 0
-const moduleMetrics string = "metrics"
+const metricsKey string = "metrics:"
// SegAlgoConfig - Segment Algorithm Config
type SegAlgoConfig struct {
@@ -106,11 +107,14 @@ type SegAlgoNetElem struct {
PoaName string
ZoneName string
DomainName string
- ConfiguredNetChar NetChar
+ ConfiguredNetChar ElemNetChar
}
// SegmentAlgorithm -
type SegmentAlgorithm struct {
+ Name string
+ Namespace string
+ BaseKey string
FlowMap map[string]*SegAlgoFlow
SegmentMap map[string]*SegAlgoSegment
Config SegAlgoConfig
@@ -118,10 +122,13 @@ type SegmentAlgorithm struct {
}
// NewSegmentAlgorithm - Create, Initialize and connect
-func NewSegmentAlgorithm(redisAddr string) (*SegmentAlgorithm, error) {
+func NewSegmentAlgorithm(name string, namespace string, redisAddr string) (*SegmentAlgorithm, error) {
// Create new instance & set default config
var err error
var algo SegmentAlgorithm
+ algo.Name = name
+ algo.Namespace = namespace
+ algo.BaseKey = dkm.GetKeyRoot(namespace) + metricsKey
algo.FlowMap = make(map[string]*SegAlgoFlow)
algo.SegmentMap = make(map[string]*SegAlgoSegment)
algo.Config.MaxBwPerInactiveFlow = 20.0
@@ -139,7 +146,7 @@ func NewSegmentAlgorithm(redisAddr string) (*SegmentAlgorithm, error) {
log.Error("Failed connection to Metrics redis DB. Error: ", err)
return nil, err
}
- _ = algo.rc.DBFlush(moduleMetrics)
+ _ = algo.rc.DBFlush(algo.BaseKey)
log.Info("Connected to Metrics redis DB")
return &algo, nil
@@ -170,7 +177,7 @@ func (algo *SegmentAlgorithm) ProcessScenario(model *mod.Model) error {
err := errors.New("Error finding process: " + name)
return err
}
- proc, ok := node.(*ceModel.Process)
+ proc, ok := node.(*dataModel.Process)
if !ok {
err := errors.New("Error casting process: " + name)
return err
@@ -201,14 +208,22 @@ func (algo *SegmentAlgorithm) ProcessScenario(model *mod.Model) error {
element.ZoneName = nodeCtx.Parents[mod.Zone]
}
+ deployment := model.GetNodeParent(element.DomainName).(*dataModel.Deployment)
+
// Set max App Net chars (use default if set to 0)
- element.ConfiguredNetChar.Throughput = float64(proc.AppThroughput)
- if element.ConfiguredNetChar.Throughput == 0 {
- element.ConfiguredNetChar.Throughput = DEFAULT_THROUGHPUT_LINK
+ element.ConfiguredNetChar.Latency = float64(proc.NetChar.Latency)
+ element.ConfiguredNetChar.Jitter = float64(proc.NetChar.LatencyVariation)
+ element.ConfiguredNetChar.Distribution = deployment.NetChar.LatencyDistribution //set global value
+ element.ConfiguredNetChar.ThroughputDl = float64(proc.NetChar.ThroughputUl)
+ element.ConfiguredNetChar.ThroughputUl = float64(proc.NetChar.ThroughputUl)
+ element.ConfiguredNetChar.PacketLoss = float64(proc.NetChar.PacketLoss)
+
+ if element.ConfiguredNetChar.ThroughputUl == 0 {
+ element.ConfiguredNetChar.ThroughputUl = DEFAULT_THROUGHPUT_LINK
+ }
+ if element.ConfiguredNetChar.ThroughputDl == 0 {
+ element.ConfiguredNetChar.ThroughputDl = DEFAULT_THROUGHPUT_LINK
}
- element.ConfiguredNetChar.Latency = float64(proc.AppLatency)
- element.ConfiguredNetChar.Jitter = float64(proc.AppLatencyVariation)
- element.ConfiguredNetChar.PacketLoss = float64(proc.AppPacketLoss)
// Add element to list
netElemList = append(netElemList, *element)
@@ -243,7 +258,7 @@ func (algo *SegmentAlgorithm) CalculateNetChar() []FlowNetChar {
algo.logTimeLapse(¤tTime, "time to print")
// Update flow with latest metrics
- keyName := moduleMetrics + ":*:throughput"
+ keyName := algo.BaseKey + "*:throughput"
err := algo.rc.ForEachEntry(keyName, algo.getMetricsThroughputEntryHandler, nil)
if err != nil {
log.Error("Failed to get entries: ", err)
@@ -262,29 +277,37 @@ func (algo *SegmentAlgorithm) CalculateNetChar() []FlowNetChar {
if algo.Config.LogVerbose {
log.Info("Update allocated bandwidth for ", flow.Name, " to ", flow.MaxPlannedThroughput, " from ", flow.AllocatedThroughput)
}
-
- flow.AllocatedThroughput = flow.MaxPlannedThroughput
- flow.AllocatedThroughputLowerBound = flow.MaxPlannedLowerBound
- flow.AllocatedThroughputUpperBound = flow.MaxPlannedUpperBound
- flow.AppliedNetChar.Throughput = flow.AllocatedThroughput
- updateNeeded = true
+ if flow.MaxPlannedThroughput >= 0 {
+ flow.AllocatedThroughput = flow.MaxPlannedThroughput
+ flow.AllocatedThroughputLowerBound = flow.MaxPlannedLowerBound
+ flow.AllocatedThroughputUpperBound = flow.MaxPlannedUpperBound
+ flow.AppliedNetChar.Throughput = flow.AllocatedThroughput
+ updateNeeded = true
+ if flow.MaxPlannedThroughput == 0 {
+ log.Error("Impossible 0 result: ", printFlow(flow))
+ }
+ } else {
+ log.Error("Impossible negative result: ", printFlow(flow))
+ }
}
if (flow.ComputedLatency != flow.AppliedNetChar.Latency) ||
(flow.ComputedJitter != flow.AppliedNetChar.Jitter) ||
- (flow.ComputedPacketLoss != flow.AppliedNetChar.PacketLoss) {
+ (flow.ComputedPacketLoss != flow.AppliedNetChar.PacketLoss) ||
+ (flow.ConfiguredNetChar.Distribution != flow.AppliedNetChar.Distribution) {
if algo.Config.LogVerbose {
- log.Info("Update other netchars for ", flow.Name, " to ", flow.ComputedLatency, "-", flow.ComputedJitter, "-", flow.ComputedPacketLoss, " from ", flow.AppliedNetChar.Latency, "-", flow.AppliedNetChar.Jitter, "-", flow.AppliedNetChar.PacketLoss)
+ log.Info("Update other netchars for ", flow.Name, " to ", flow.ComputedLatency, "-", flow.ComputedJitter, "-", flow.ComputedPacketLoss, " from ", flow.AppliedNetChar.Latency, "-", flow.AppliedNetChar.Jitter, "-", flow.AppliedNetChar.PacketLoss, "-", flow.AppliedNetChar.Distribution)
}
flow.AppliedNetChar.Latency = flow.ComputedLatency
flow.AppliedNetChar.Jitter = flow.ComputedJitter
flow.AppliedNetChar.PacketLoss = flow.ComputedPacketLoss
+ flow.AppliedNetChar.Distribution = flow.ConfiguredNetChar.Distribution
updateNeeded = true
}
if updateNeeded {
- netchar := NetChar{flow.AppliedNetChar.Latency, flow.AppliedNetChar.Jitter, flow.AppliedNetChar.PacketLoss, flow.AppliedNetChar.Throughput}
+ netchar := NetChar{flow.AppliedNetChar.Latency, flow.AppliedNetChar.Jitter, flow.AppliedNetChar.PacketLoss, flow.AppliedNetChar.Throughput, flow.ConfiguredNetChar.Distribution}
flowNetChar := FlowNetChar{flow.SrcNetElem, flow.DstNetElem, netchar}
updatedNetCharList = append(updatedNetCharList, flowNetChar)
}
@@ -349,7 +372,7 @@ func (algo *SegmentAlgorithm) logTimeLapse(currentTime *time.Time, message strin
if algo.Config.LogVerbose {
elapsed := time.Since(*currentTime)
log.WithFields(log.Fields{
- "meep.log.component": moduleName,
+ "meep.log.component": algo.Name,
"meep.time.location": message,
"meep.time.exec": elapsed,
}).Info("Measurements log")
@@ -363,16 +386,16 @@ func (algo *SegmentAlgorithm) createMetricsEntry(srcElem string, dstElem string)
creationTime["creationTime"] = time.Now()
// Entries are created with no values, sidecar will only fill them, otherwise, won't be cleared
- _ = algo.rc.SetEntry(moduleMetrics+":"+dstElem+":"+srcElem, creationTime)
- _ = algo.rc.SetEntry(moduleMetrics+":"+dstElem+":throughput", creationTime)
+ _ = algo.rc.SetEntry(algo.BaseKey+dstElem+":"+srcElem, creationTime)
+ _ = algo.rc.SetEntry(algo.BaseKey+dstElem+":throughput", creationTime)
}
// deleteMetricsEntries -
func (algo *SegmentAlgorithm) deleteMetricsEntries() {
for _, flow := range algo.FlowMap {
// Entries are created with no values, sidecar will only fill them, otherwise, won't be cleared
- _ = algo.rc.DelEntry(moduleMetrics + ":" + flow.DstNetElem + ":" + flow.SrcNetElem)
- _ = algo.rc.DelEntry(moduleMetrics + ":" + flow.DstNetElem + ":throughput")
+ _ = algo.rc.DelEntry(algo.BaseKey + flow.DstNetElem + ":" + flow.SrcNetElem)
+ _ = algo.rc.DelEntry(algo.BaseKey + flow.DstNetElem + ":throughput")
}
}
@@ -393,13 +416,16 @@ func (algo *SegmentAlgorithm) populateFlow(flowName string, srcElement *SegAlgoN
// Set maxBw to the minimum of the 2 ends if a max is not forced
if maxBw == 0 {
- if srcElement.ConfiguredNetChar.Throughput < destElement.ConfiguredNetChar.Throughput {
- maxBw = srcElement.ConfiguredNetChar.Throughput
+ if srcElement.ConfiguredNetChar.ThroughputUl < destElement.ConfiguredNetChar.ThroughputDl {
+ maxBw = srcElement.ConfiguredNetChar.ThroughputUl
} else {
- maxBw = destElement.ConfiguredNetChar.Throughput
+ maxBw = destElement.ConfiguredNetChar.ThroughputDl
}
}
+
flow.ConfiguredNetChar.Throughput = maxBw
+ //using distribution to pass it down, since it is global, they all have the same data at this point, so use any elements distribution
+ flow.ConfiguredNetChar.Distribution = srcElement.ConfiguredNetChar.Distribution
flow.ConfiguredNetChar.Latency = 0
flow.ConfiguredNetChar.Jitter = 0
flow.ConfiguredNetChar.PacketLoss = 0
@@ -431,7 +457,6 @@ func (algo *SegmentAlgorithm) comparePath(oldPath *SegAlgoPath, newPath *SegAlgo
func (algo *SegmentAlgorithm) createPath(flowName string, srcElement *SegAlgoNetElem, destElement *SegAlgoNetElem, model *mod.Model) *SegAlgoPath {
direction := ""
- segmentName := ""
var segment *SegAlgoSegment
path := new(SegAlgoPath)
@@ -439,22 +464,18 @@ func (algo *SegmentAlgorithm) createPath(flowName string, srcElement *SegAlgoNet
//app segment ul, dl
direction = "uplink"
- segmentName = srcElement.Name + direction
- segment = algo.createSegment(segmentName, flowName, srcElement.Name, model)
+ segment = algo.createSegment(srcElement.Name, direction, flowName, model)
path.Segments = append(path.Segments, segment)
direction = "downlink"
- segmentName = destElement.Name + direction
- segment = algo.createSegment(segmentName, flowName, destElement.Name, model)
+ segment = algo.createSegment(destElement.Name, direction, flowName, model)
path.Segments = append(path.Segments, segment)
//node segment ul, dl
direction = "uplink"
- segmentName = srcElement.PhyLocName + direction
- segment = algo.createSegment(segmentName, flowName, srcElement.PhyLocName, model)
+ segment = algo.createSegment(srcElement.PhyLocName, direction, flowName, model)
path.Segments = append(path.Segments, segment)
direction = "downlink"
- segmentName = destElement.PhyLocName + direction
- segment = algo.createSegment(segmentName, flowName, destElement.PhyLocName, model)
+ segment = algo.createSegment(destElement.PhyLocName, direction, flowName, model)
path.Segments = append(path.Segments, segment)
//if on same node, return
@@ -465,15 +486,13 @@ func (algo *SegmentAlgorithm) createPath(flowName string, srcElement *SegAlgoNet
//network location ul, dl
if srcElement.Type == "UE" {
direction = "uplink"
- segmentName = srcElement.PoaName + direction
- segment = algo.createSegment(segmentName, flowName, srcElement.PoaName, model)
+ segment = algo.createSegment(srcElement.PoaName, direction, flowName, model)
path.Segments = append(path.Segments, segment)
}
if destElement.Type == "UE" {
direction = "downlink"
- segmentName = destElement.PoaName + direction
- segment = algo.createSegment(segmentName, flowName, destElement.PoaName, model)
+ segment = algo.createSegment(destElement.PoaName, direction, flowName, model)
path.Segments = append(path.Segments, segment)
}
@@ -485,16 +504,14 @@ func (algo *SegmentAlgorithm) createPath(flowName string, srcElement *SegAlgoNet
//zone ul, dl
if srcElement.Type != "DC" {
direction = "uplink"
- segmentName = srcElement.ZoneName + direction
- segment = algo.createSegment(segmentName, flowName, srcElement.ZoneName, model)
+ segment = algo.createSegment(srcElement.ZoneName, direction, flowName, model)
path.Segments = append(path.Segments, segment)
}
if destElement.Type != "DC" {
direction = "downlink"
- segmentName = destElement.ZoneName + direction
- segment = algo.createSegment(segmentName, flowName, destElement.ZoneName, model)
+ segment = algo.createSegment(destElement.ZoneName, direction, flowName, model)
path.Segments = append(path.Segments, segment)
}
@@ -507,16 +524,14 @@ func (algo *SegmentAlgorithm) createPath(flowName string, srcElement *SegAlgoNet
//domain ul, dl
if srcElement.Type != "DC" {
direction = "uplink"
- segmentName = srcElement.DomainName + direction
- segment = algo.createSegment(segmentName, flowName, srcElement.DomainName, model)
+ segment = algo.createSegment(srcElement.DomainName, direction, flowName, model)
path.Segments = append(path.Segments, segment)
}
if destElement.Type != "DC" {
direction = "downlink"
- segmentName = destElement.DomainName + direction
- segment = algo.createSegment(segmentName, flowName, destElement.DomainName, model)
+ segment = algo.createSegment(destElement.DomainName, direction, flowName, model)
path.Segments = append(path.Segments, segment)
}
@@ -526,207 +541,24 @@ func (algo *SegmentAlgorithm) createPath(flowName string, srcElement *SegAlgoNet
return path
}
- //cloud ul, dl
- if srcElement.Type == "DC" {
- direction = "uplink"
- segmentName = model.GetScenarioName() + "-cloud-" + direction
- segment = algo.createSegment(segmentName, flowName, model.GetScenarioName(), model)
- path.Segments = append(path.Segments, segment)
-
- }
-
- if destElement.Type == "DC" {
- direction = "downlink"
- segmentName = model.GetScenarioName() + "-cloud-" + direction
- segment = algo.createSegment(segmentName, flowName, model.GetScenarioName(), model)
- path.Segments = append(path.Segments, segment)
-
- }
-
- return path
-}
-
-/*
-
-// createPath -
-func (algo *SegmentAlgorithm) createPath(flowName string, srcElement *SegAlgoNetElem, destElement *SegAlgoNetElem, model *mod.Model) *SegAlgoPath {
-
- //Tier 1 -- check if they are in the same poa
- //Tier 2 -- check if they are in the same zone, but different poa
- //Tier 3 -- check if they are in the same domain, but different zone
- //Tier 4 -- check if they are in different domains
-
- direction := ""
- segmentName := ""
- var segment *SegAlgoSegment
-
- path := new(SegAlgoPath)
- path.Name = flowName
-
- //Tier 1
- if srcElement.PoaName != "" {
- //segments from element to POA
- //2 possibilities
- //UE->POA
- //segments for srcElement(app) -> 1A. UE-Node uplink-> 2A. POA-TermLink uplink
- //FOG-POA
- //segments for srcElement(app) -> 1B. FogNode uplink
- direction = "uplink"
- //segment 1A or 1B
- segmentName = srcElement.PhyLocName + "-" + direction
- segment = algo.createSegment(segmentName, flowName, srcElement.PhyLocName, model)
- path.Segments = append(path.Segments, segment)
-
- if srcElement.Type == "UE" {
- //segment 2A
- segmentName = srcElement.PoaName + "-" + direction
- segment = algo.createSegment(segmentName, flowName, srcElement.PoaName, model)
- path.Segments = append(path.Segments, segment)
- }
- }
-
- if destElement.PoaName != "" {
- //segments from POA to element
- //2 possibilities
- //POA->FOG
- //3A. Fog-Node downlink -> dstElement(app)
- //POA-UE
- //2B. POA-TermLink downlink -> 3B. UE-Node downlink -> dstElement(app)
- direction = "downlink"
- if destElement.Type == "UE" {
- //segment 2B
- segmentName = destElement.PoaName + "-" + direction
- segment = algo.createSegment(segmentName, flowName, destElement.PoaName, model)
- path.Segments = append(path.Segments, segment)
- }
+ //interdomain
- //segment 3A or 3B
- segmentName = destElement.PhyLocName + "-" + direction
- segment = algo.createSegment(segmentName, flowName, destElement.PhyLocName, model)
- path.Segments = append(path.Segments, segment)
- }
-
- //Tier 2
- //if same zone, different POA, OR no POA at all (Edge-Edge)
- if (srcElement.PoaName != destElement.PoaName) || (srcElement.PoaName == "" && destElement.PoaName == "") {
- //segments to intraZone backbone
- //2 possibilities
- //EDGE->IntraZoneBackbone
- //srcElement(app) -> 1A. Edge-Node uplink -> 2A. IntraZone uplink
- //POA->IntraZoneBackbone
- //2B. IntraZone uplink
- direction = "uplink"
- if srcElement.Type == "EDGE" {
- //segment 1A
- segmentName = srcElement.PhyLocName + "-" + direction
- segment = algo.createSegment(segmentName, flowName, srcElement.PhyLocName, model)
- path.Segments = append(path.Segments, segment)
-
- //segment 2A
- segmentName = srcElement.ZoneName + "-" + srcElement.PhyLocName + "-" + direction
- } else {
- //segment 2B
- segmentName = srcElement.ZoneName + "-" + srcElement.PoaName + "-" + direction
- }
- if srcElement.ZoneName != "" {
- segment = algo.createSegment(segmentName, flowName, srcElement.ZoneName, model)
- path.Segments = append(path.Segments, segment)
- }
-
- //segments from intraZone backbone
- //2 possibilities
- //IntraZoneBackbone->EDGE
- //3A. IntraZone downlink -> 4A. Edge-Node downlink -> srcElement(app)
- //IntraZoneBackbone->POA
- //3B. IntraZone downlink
- direction = "downlink"
- if destElement.Type == "EDGE" {
- //segment 4A
- segmentName = destElement.PhyLocName + "-" + direction
- segment = algo.createSegment(segmentName, flowName, destElement.PhyLocName, model)
- path.Segments = append(path.Segments, segment)
-
- //segment 3A
- segmentName = destElement.ZoneName + "-" + destElement.PhyLocName + "-" + direction
- } else {
- //segment 3B
- segmentName = destElement.ZoneName + "-" + destElement.PoaName + "-" + direction
- }
- if destElement.ZoneName != "" {
- segment = algo.createSegment(segmentName, flowName, destElement.ZoneName, model)
- path.Segments = append(path.Segments, segment)
- }
- }
-
- //Tier 3
- if srcElement.ZoneName != destElement.ZoneName {
- //segments to interZone backbone
- //1 possibility
- //Zone->InterZoneBackbone
- //1A. Zone uplink -> InterZone backbone (if zone exist)
- direction = "uplink"
- //segment 1A
- if srcElement.ZoneName != "" {
- segmentName = srcElement.ZoneName + "-" + direction
- segment = algo.createSegment(segmentName, flowName, srcElement.DomainName, model)
- path.Segments = append(path.Segments, segment)
- }
-
- //segments from interZone backbone
- //1 possibility
- //InterZoneBackbone->Zone
- //2A. InterZone backbone -> Zone downlink (if zone exist)
- direction = "downlink"
- //segment 2A
- if destElement.ZoneName != "" {
- segmentName = destElement.ZoneName + "-" + direction
- segment = algo.createSegment(segmentName, flowName, destElement.DomainName, model)
- path.Segments = append(path.Segments, segment)
- }
- }
-
- //Tier 4
- if srcElement.DomainName != destElement.DomainName {
- //segments to interDomain backbone
- //1 possibility
- //InterZoneBackbone->InterDomainBackbone
- //1A. InterZone backbone -> Domain backbone
- direction = "uplink"
- //segment 1A
- segmentName = srcElement.DomainName + "-" + direction
- segment = algo.createSegment(segmentName, flowName, model.GetScenarioName(), model)
- path.Segments = append(path.Segments, segment)
-
- //segments from interDomain backbone
- //1 possibility
- //InterDomainBackbone->InterZoneBackbone
- //2A. Domain backbone -> InterZone backbone
- direction = "downlink"
- //segment 2A
- segmentName = destElement.DomainName + "-" + direction
- segment = algo.createSegment(segmentName, flowName, model.GetScenarioName(), model)
- path.Segments = append(path.Segments, segment)
+ //computing twice while in the interdomain
+ direction = "uplink"
+ segment = algo.createSegment(model.GetScenarioName(), direction, flowName, model)
+ path.Segments = append(path.Segments, segment)
- //when going through interdomain, either from/to the cloud or another domain, if not cloud, already handled in other tiers sections
- if destElement.Type == "CLOUD" {
- segmentName = destElement.PhyLocName + "-" + direction
- segment = algo.createSegment(segmentName, flowName, destElement.PhyLocName, model)
- path.Segments = append(path.Segments, segment)
- } else if srcElement.Type == "CLOUD" {
- direction = "uplink"
- segmentName = srcElement.PhyLocName + "-" + direction
- segment = algo.createSegment(segmentName, flowName, srcElement.PhyLocName, model)
- path.Segments = append(path.Segments, segment)
- }
- }
+ direction = "downlink"
+ segment = algo.createSegment(model.GetScenarioName(), direction, flowName, model)
+ path.Segments = append(path.Segments, segment)
return path
}
-*/
// createSegment -
-func (algo *SegmentAlgorithm) createSegment(segmentName string, flowName string, elemName string, model *mod.Model) *SegAlgoSegment {
+func (algo *SegmentAlgorithm) createSegment(elemName string, direction string, flowName string, model *mod.Model) *SegAlgoSegment {
// Create new segment if it does not exist
+ segmentName := elemName + direction
segment := algo.SegmentMap[segmentName]
if segment == nil {
segment = new(SegAlgoSegment)
@@ -734,9 +566,19 @@ func (algo *SegmentAlgorithm) createSegment(segmentName string, flowName string,
// Retrieve max throughput from model using model scenario element name
nc := getNetChars(elemName, model)
- segment.ConfiguredNetChar = nc
+ ncThroughput := 0.0
+ if direction == "uplink" {
+ ncThroughput = float64(nc.ThroughputUl)
+ } else {
+ ncThroughput = float64(nc.ThroughputDl)
+ }
- maxThroughput := nc.Throughput
+ segment.ConfiguredNetChar.Latency = float64(nc.Latency)
+ segment.ConfiguredNetChar.Jitter = float64(nc.LatencyVariation)
+ segment.ConfiguredNetChar.PacketLoss = float64(nc.PacketLoss)
+ segment.ConfiguredNetChar.Throughput = float64(ncThroughput)
+
+ maxThroughput := ncThroughput
// Initialize segment-specific BW attributes from Algo config
if algo.Config.IsPercentage {
segment.MaxBwPerInactiveFlow = algo.Config.MaxBwPerInactiveFlow * maxThroughput / 100
@@ -776,7 +618,7 @@ func (algo *SegmentAlgorithm) createSegment(segmentName string, flowName string,
func (algo *SegmentAlgorithm) getMetricsThroughputEntryHandler(key string, fields map[string]string, userData interface{}) error {
subKey := strings.Split(key, ":")
for trafficFrom, throughput := range fields {
- flow := algo.FlowMap[trafficFrom+":"+subKey[1]]
+ flow := algo.FlowMap[trafficFrom+":"+subKey[len(subKey)-2]]
if flow != nil {
value, _ := strconv.ParseFloat(throughput, 64)
flow.CurrentThroughput = value
@@ -948,6 +790,9 @@ func recalculateSegmentBw(segment *SegAlgoSegment, flowsToEvaluate []*SegAlgoFlo
//update or not the throughput
for _, flow := range flowsToEvaluate {
if flow.PlannedThroughput < flow.MaxPlannedThroughput {
+ if flow.PlannedThroughput <= 0 {
+ log.Error("Max : ", flow.PlannedThroughput, "---", flow.MaxPlannedThroughput)
+ }
flow.MaxPlannedThroughput = flow.PlannedThroughput
flow.MaxPlannedLowerBound = flow.PlannedLowerBound
flow.MaxPlannedUpperBound = flow.PlannedUpperBound
@@ -990,7 +835,10 @@ func updateMaxFairShareBwPerFlow(segment *SegAlgoSegment) {
}
// getNetChars - Retrieve all network characteristics from model for provided element name
-func getNetChars(elemName string, model *mod.Model) (nc NetChar) {
+func getNetChars(elemName string, model *mod.Model) *dataModel.NetworkCharacteristics {
+
+ nc := new(dataModel.NetworkCharacteristics)
+
// Get Node
node := model.GetNode(elemName)
if node == nil {
@@ -998,56 +846,30 @@ func getNetChars(elemName string, model *mod.Model) (nc NetChar) {
return nc
}
- maxThroughput := 0.0
- latency := 0.0
- jitter := 0.0
- packetLoss := 0.0
// Get max throughput based on Node Type, as well as other netcharse
- if p, ok := node.(*ceModel.Process); ok {
- maxThroughput = float64(p.AppThroughput)
- latency = float64(p.AppLatency)
- jitter = float64(p.AppLatencyVariation)
- packetLoss = float64(p.AppPacketLoss)
- } else if pl, ok := node.(*ceModel.PhysicalLocation); ok {
- maxThroughput = float64(pl.LinkThroughput)
- latency = float64(pl.LinkLatency)
- jitter = float64(pl.LinkLatencyVariation)
- packetLoss = float64(pl.LinkPacketLoss)
- } else if nl, ok := node.(*ceModel.NetworkLocation); ok {
- maxThroughput = float64(nl.TerminalLinkThroughput)
- latency = float64(nl.TerminalLinkLatency)
- jitter = float64(nl.TerminalLinkLatencyVariation)
- packetLoss = float64(nl.TerminalLinkPacketLoss)
- } else if zone, ok := node.(*ceModel.Zone); ok {
- if zone.NetChar != nil {
- maxThroughput = float64(zone.NetChar.Throughput)
- latency = float64(zone.NetChar.Latency)
- jitter = float64(zone.NetChar.LatencyVariation)
- packetLoss = float64(zone.NetChar.PacketLoss)
- }
- } else if domain, ok := node.(*ceModel.Domain); ok {
- maxThroughput = float64(domain.InterZoneThroughput)
- latency = float64(domain.InterZoneLatency)
- jitter = float64(domain.InterZoneLatencyVariation)
- packetLoss = float64(domain.InterZonePacketLoss)
- } else if deployment, ok := node.(*ceModel.Deployment); ok {
- maxThroughput = float64(deployment.InterDomainThroughput)
- latency = float64(deployment.InterDomainLatency)
- jitter = float64(deployment.InterDomainLatencyVariation)
- packetLoss = float64(deployment.InterDomainPacketLoss)
+ if p, ok := node.(*dataModel.Process); ok {
+ nc = p.NetChar
+ } else if pl, ok := node.(*dataModel.PhysicalLocation); ok {
+ nc = pl.NetChar
+ } else if nl, ok := node.(*dataModel.NetworkLocation); ok {
+ nc = nl.NetChar
+ } else if zone, ok := node.(*dataModel.Zone); ok {
+ nc = zone.NetChar
+ } else if domain, ok := node.(*dataModel.Domain); ok {
+ nc = domain.NetChar
+ } else if deployment, ok := node.(*dataModel.Deployment); ok {
+ nc = deployment.NetChar
} else {
log.Error("Error casting element: " + elemName)
}
// For compatiblity reasons, set to default value if 0
- if maxThroughput == 0 {
- maxThroughput = DEFAULT_THROUGHPUT_LINK
+ if nc.ThroughputUl == 0 {
+ nc.ThroughputUl = DEFAULT_THROUGHPUT_LINK
+ }
+ if nc.ThroughputDl == 0 {
+ nc.ThroughputDl = DEFAULT_THROUGHPUT_LINK
}
-
- nc.Throughput = maxThroughput
- nc.Latency = latency
- nc.Jitter = jitter
- nc.PacketLoss = packetLoss
return nc
}
@@ -1076,6 +898,7 @@ func printFlow(flow *SegAlgoFlow) string {
s2t := fmt.Sprintf("%f", flow.ConfiguredNetChar.Throughput)
s2l := fmt.Sprintf("%f", flow.ConfiguredNetChar.Latency)
s2j := fmt.Sprintf("%f", flow.ConfiguredNetChar.Jitter)
+ s2d := flow.ConfiguredNetChar.Distribution
s2p := fmt.Sprintf("%f", flow.ConfiguredNetChar.PacketLoss)
s3a := fmt.Sprintf("%f", flow.AllocatedThroughput)
s4a := fmt.Sprintf("%f", flow.AllocatedThroughputLowerBound)
@@ -1093,8 +916,9 @@ func printFlow(flow *SegAlgoFlow) string {
s8l := fmt.Sprintf("%f", flow.AppliedNetChar.Latency)
s8j := fmt.Sprintf("%f", flow.AppliedNetChar.Jitter)
s8p := fmt.Sprintf("%f", flow.AppliedNetChar.PacketLoss)
+ s8d := flow.AppliedNetChar.Distribution
- str := s1 + ": " + "Current: " + s6 + " - Configured: [" + s2t + "-" + s2l + "-" + s2j + "-" + s2p + "] Allocated: " + s3a + "[" + s4a + "-" + s5a + "]" + " - MaxPlanned: " + s3m + "[" + s4m + "-" + s5m + "]" + " - Planned: " + s3p + "[" + s4p + "-" + s5p + "] Computed Net Char: [" + s7l + "-" + s7j + "-" + s7p + "] Applied Net Char: [" + s8l + "-" + s8j + "-" + s8p + "]"
+ str := s1 + ": " + "Current: " + s6 + " - Configured: [" + s2t + "-" + s2l + "-" + s2j + "-" + s2p + "-" + s2d + "] Allocated: " + s3a + "[" + s4a + "-" + s5a + "]" + " - MaxPlanned: " + s3m + "[" + s4m + "-" + s5m + "]" + " - Planned: " + s3p + "[" + s4p + "-" + s5p + "] Computed Net Char: [" + s7l + "-" + s7j + "-" + s7p + "] Applied Net Char: [" + s8l + "-" + s8j + "-" + s8p + "-" + s8d + "]"
str += printPath(flow.Path)
return str
}
diff --git a/go-packages/meep-net-char-mgr/algo-segment_test.go b/go-packages/meep-net-char-mgr/algo-segment_test.go
index d2356d05767889ef0b141656f06d1e33ec63d41b..6c30803129a7fdc5c158683ffa2130bd735c6b1d 100644
--- a/go-packages/meep-net-char-mgr/algo-segment_test.go
+++ b/go-packages/meep-net-char-mgr/algo-segment_test.go
@@ -20,15 +20,18 @@ import (
"fmt"
"testing"
- ceModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model"
+ dkm "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr"
+ dataModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model"
log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
mod "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model"
redis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis"
)
const segAlgoRedisAddr string = "localhost:30380"
+const testModuleName string = "test-net-char-mgr"
+const testModuleNamespace string = "test-ns"
-var jsonTestScenario = "{\"version\":\"1.3.0\",\"name\":\"demo1\",\"deployment\":{\"interDomainLatency\":50,\"interDomainLatencyVariation\":5,\"interDomainThroughput\":1000,\"domains\":[{\"id\":\"PUBLIC\",\"name\":\"PUBLIC\",\"type\":\"PUBLIC\",\"interZoneLatency\":6,\"interZoneLatencyVariation\":2,\"interZoneThroughput\":1000000,\"zones\":[{\"id\":\"PUBLIC-COMMON\",\"name\":\"PUBLIC-COMMON\",\"type\":\"COMMON\",\"netChar\":{\"latency\":5,\"latencyVariation\":1,\"throughput\":1000000},\"networkLocations\":[{\"id\":\"PUBLIC-COMMON-DEFAULT\",\"name\":\"PUBLIC-COMMON-DEFAULT\",\"type\":\"DEFAULT\",\"terminalLinkLatency\":1,\"terminalLinkLatencyVariation\":1,\"terminalLinkThroughput\":50000,\"terminalLinkPacketLoss\":1,\"physicalLocations\":[{\"id\":\"cloud1\",\"name\":\"cloud1\",\"type\":\"DC\",\"processes\":[{\"id\":\"cloud1-iperf\",\"name\":\"cloud1-iperf\",\"type\":\"CLOUD-APP\",\"image\":\"meep-docker-registry:30001/iperf-server\",\"commandArguments\":\"-c,export;iperf-s-p$IPERF_SERVICE_PORT\",\"commandExe\":\"/bin/bash\",\"serviceConfig\":{\"name\":\"cloud1-iperf\",\"ports\":[{\"protocol\":\"UDP\",\"port\":80,\"externalPort\":null}],\"meSvcName\":null},\"isExternal\":null,\"environment\":null,\"gpuConfig\":null,\"externalConfig\":null,\"status\":null,\"userChartLocation\":null,\"userChartAlternateValues\":null,\"userChartGroup\":null,\"meta\":null,\"userMeta\":null,\"appLatency\":null,\"appLatencyVariation\":null,\"appThroughput\":null,\"appPacketLoss\":null,\"placementId\":null},{\"id\":\"cloud1-svc\",\"name\":\"cloud1-svc\",\"type\":\"CLOUD-APP\",\"image\":\"meep-docker-registry:30001/demo-server\",\"environment\":\"MGM_GROUP_NAME=cloud1-svc,MGM_APP_ID=cloud1-svc,MGM_APP_PORT=80\",\"serviceConfig\":{\"name\":\"cloud1-svc\",\"ports\":[{\"protocol\":\"TCP\",\"port\":80,\"externalPort\":null}],\"meSvcName\":null},\"isExternal\":null,\"commandArguments\":null,\"commandExe\":null,\"gpuConfig\":null,\"externalConfig\":null,\"status\":null,\"userChartLocation\":null,\"userChartAlternateValues\":null,\"userChartGroup\":null,\"meta\":null,\"userMeta\":null,\"appLatency\":null,\"appLatencyVariation\":null,\"appThroughput\":null,\"appPacketLoss\":null,\"placementId\":null}],\"isExternal\":null,\"networkLocationsInRange\":null,\"meta\":null,\"userMeta\":null,\"linkLatency\":null,\"linkLatencyVariation\":null,\"linkThroughput\":null,\"linkPacketLoss\":null}],\"meta\":null,\"userMeta\":null}],\"netChar\":{\"latency\":null,\"latencyVariation\":null,\"throughput\":null},\"meta\":null,\"userMeta\":null}],\"interZonePacketLoss\":null,\"meta\":null,\"userMeta\":null},{\"id\":\"operator1\",\"name\":\"operator1\",\"type\":\"OPERATOR\",\"interZoneLatency\":15,\"interZoneLatencyVariation\":3,\"interZoneThroughput\":1000,\"zones\":[{\"id\":\"operator1-COMMON\",\"name\":\"operator1-COMMON\",\"type\":\"COMMON\",\"netChar\":{\"latency\":5,\"latencyVariation\":1,\"throughput\":1000000},\"networkLocations\":[{\"id\":\"operator1-COMMON-DEFAULT\",\"name\":\"operator1-COMMON-DEFAULT\",\"type\":\"DEFAULT\",\"terminalLinkLatency\":1,\"terminalLinkLatencyVariation\":1,\"terminalLinkThroughput\":50000,\"terminalLinkPacketLoss\":1,\"meta\":null,\"userMeta\":null,\"physicalLocations\":null}],\"netChar\":{\"latency\":null,\"latencyVariation\":null,\"throughput\":null},\"meta\":null,\"userMeta\":null},{\"id\":\"zone1\",\"name\":\"zone1\",\"type\":\"ZONE\",\"netChar\":{\"latency\":5,\"latencyVariation\":1,\"throughput\":1000},\"networkLocations\":[{\"id\":\"zone1-DEFAULT\",\"name\":\"zone1-DEFAULT\",\"type\":\"DEFAULT\",\"terminalLinkLatency\":1,\"terminalLinkLatencyVariation\":1,\"terminalLinkThroughput\":50000,\"terminalLinkPacketLoss\":1,\"physicalLocations\":[{\"id\":\"zone1-edge1\",\"name\":\"zone1-edge1\",\"type\":\"EDGE\",\"processes\":[{\"id\":\"zone1-edge1-iperf\",\"name\":\"zone1-edge1-iperf\",\"type\":\"EDGE-APP\",\"image\":\"meep-docker-registry:30001/iperf-server\",\"commandArguments\":\"-c,export;iperf-s-p$IPERF_SERVICE_PORT\",\"commandExe\":\"/bin/bash\",\"serviceConfig\":{\"name\":\"zone1-edge1-iperf\",\"meSvcName\":\"iperf\",\"ports\":[{\"protocol\":\"UDP\",\"port\":80,\"externalPort\":null}]},\"isExternal\":null,\"environment\":null,\"gpuConfig\":null,\"externalConfig\":null,\"status\":null,\"userChartLocation\":null,\"userChartAlternateValues\":null,\"userChartGroup\":null,\"meta\":null,\"userMeta\":null,\"appLatency\":null,\"appLatencyVariation\":null,\"appThroughput\":null,\"appPacketLoss\":null,\"placementId\":null},{\"id\":\"zone1-edge1-svc\",\"name\":\"zone1-edge1-svc\",\"type\":\"EDGE-APP\",\"image\":\"meep-docker-registry:30001/demo-server\",\"environment\":\"MGM_GROUP_NAME=svc,MGM_APP_ID=zone1-edge1-svc,MGM_APP_PORT=80\",\"serviceConfig\":{\"name\":\"zone1-edge1-svc\",\"meSvcName\":\"svc\",\"ports\":[{\"protocol\":\"TCP\",\"port\":80,\"externalPort\":null}]},\"isExternal\":null,\"commandArguments\":null,\"commandExe\":null,\"gpuConfig\":null,\"externalConfig\":null,\"status\":null,\"userChartLocation\":null,\"userChartAlternateValues\":null,\"userChartGroup\":null,\"meta\":null,\"userMeta\":null,\"appLatency\":null,\"appLatencyVariation\":null,\"appThroughput\":null,\"appPacketLoss\":null,\"placementId\":null}],\"isExternal\":null,\"networkLocationsInRange\":null,\"meta\":null,\"userMeta\":null,\"linkLatency\":null,\"linkLatencyVariation\":null,\"linkThroughput\":null,\"linkPacketLoss\":null}],\"meta\":null,\"userMeta\":null},{\"id\":\"zone1-poa1\",\"name\":\"zone1-poa1\",\"type\":\"POA\",\"terminalLinkLatency\":1,\"terminalLinkLatencyVariation\":1,\"terminalLinkThroughput\":1000,\"physicalLocations\":[{\"id\":\"zone1-fog1\",\"name\":\"zone1-fog1\",\"type\":\"FOG\",\"processes\":[{\"id\":\"zone1-fog1-iperf\",\"name\":\"zone1-fog1-iperf\",\"type\":\"EDGE-APP\",\"image\":\"meep-docker-registry:30001/iperf-server\",\"commandArguments\":\"-c,export;iperf-s-p$IPERF_SERVICE_PORT;\",\"commandExe\":\"/bin/bash\",\"serviceConfig\":{\"name\":\"zone1-fog1-iperf\",\"meSvcName\":\"iperf\",\"ports\":[{\"protocol\":\"UDP\",\"port\":80,\"externalPort\":null}]},\"isExternal\":null,\"environment\":null,\"gpuConfig\":null,\"externalConfig\":null,\"status\":null,\"userChartLocation\":null,\"userChartAlternateValues\":null,\"userChartGroup\":null,\"meta\":null,\"userMeta\":null,\"appLatency\":null,\"appLatencyVariation\":null,\"appThroughput\":null,\"appPacketLoss\":null,\"placementId\":null},{\"id\":\"zone1-fog1-svc\",\"name\":\"zone1-fog1-svc\",\"type\":\"EDGE-APP\",\"image\":\"meep-docker-registry:30001/demo-server\",\"environment\":\"MGM_GROUP_NAME=svc,MGM_APP_ID=zone1-fog1-svc,MGM_APP_PORT=80\",\"serviceConfig\":{\"name\":\"zone1-fog1-svc\",\"meSvcName\":\"svc\",\"ports\":[{\"protocol\":\"TCP\",\"port\":80,\"externalPort\":null}]},\"isExternal\":null,\"commandArguments\":null,\"commandExe\":null,\"gpuConfig\":null,\"externalConfig\":null,\"status\":null,\"userChartLocation\":null,\"userChartAlternateValues\":null,\"userChartGroup\":null,\"meta\":null,\"userMeta\":null,\"appLatency\":null,\"appLatencyVariation\":null,\"appThroughput\":null,\"appPacketLoss\":null,\"placementId\":null}],\"isExternal\":null,\"networkLocationsInRange\":null,\"meta\":null,\"userMeta\":null,\"linkLatency\":null,\"linkLatencyVariation\":null,\"linkThroughput\":null,\"linkPacketLoss\":null},{\"id\":\"ue1\",\"name\":\"ue1\",\"type\":\"UE\",\"processes\":[{\"id\":\"ue1-iperf\",\"name\":\"ue1-iperf\",\"type\":\"UE-APP\",\"image\":\"meep-docker-registry:30001/iperf-client\",\"commandArguments\":\"-c,export;iperf-u-c$IPERF_SERVICE_HOST-p$IPERF_SERVICE_PORT-t3600-b50M;\",\"commandExe\":\"/bin/bash\",\"isExternal\":null,\"environment\":null,\"serviceConfig\":null,\"gpuConfig\":null,\"externalConfig\":null,\"status\":null,\"userChartLocation\":null,\"userChartAlternateValues\":null,\"userChartGroup\":null,\"meta\":null,\"userMeta\":null,\"appLatency\":null,\"appLatencyVariation\":null,\"appThroughput\":null,\"appPacketLoss\":null,\"placementId\":null}],\"isExternal\":null,\"networkLocationsInRange\":null,\"meta\":null,\"userMeta\":null,\"linkLatency\":null,\"linkLatencyVariation\":null,\"linkThroughput\":null,\"linkPacketLoss\":null},{\"id\":\"ue2-ext\",\"name\":\"ue2-ext\",\"type\":\"UE\",\"isExternal\":true,\"processes\":[{\"id\":\"ue2-svc\",\"name\":\"ue2-svc\",\"type\":\"UE-APP\",\"isExternal\":true,\"externalConfig\":{\"ingressServiceMap\":[{\"name\":\"svc\",\"port\":80,\"externalPort\":31111,\"protocol\":\"TCP\"},{\"name\":\"iperf\",\"port\":80,\"externalPort\":31222,\"protocol\":\"UDP\"},{\"name\":\"cloud1-svc\",\"port\":80,\"externalPort\":31112,\"protocol\":\"TCP\"},{\"name\":\"cloud1-iperf\",\"port\":80,\"externalPort\":31223,\"protocol\":\"UDP\"}],\"egressServiceMap\":null},\"image\":null,\"environment\":null,\"commandArguments\":null,\"commandExe\":null,\"serviceConfig\":null,\"gpuConfig\":null,\"status\":null,\"userChartLocation\":null,\"userChartAlternateValues\":null,\"userChartGroup\":null,\"meta\":null,\"userMeta\":null,\"appLatency\":null,\"appLatencyVariation\":null,\"appThroughput\":null,\"appPacketLoss\":null,\"placementId\":null}],\"networkLocationsInRange\":null,\"meta\":null,\"userMeta\":null,\"linkLatency\":null,\"linkLatencyVariation\":null,\"linkThroughput\":null,\"linkPacketLoss\":null}],\"terminalLinkPacketLoss\":null,\"meta\":null,\"userMeta\":null},{\"id\":\"zone1-poa2\",\"name\":\"zone1-poa2\",\"type\":\"POA\",\"terminalLinkLatency\":10,\"terminalLinkLatencyVariation\":2,\"terminalLinkThroughput\":50,\"terminalLinkPacketLoss\":null,\"meta\":null,\"userMeta\":null,\"physicalLocations\":null}],\"netChar\":{\"latency\":null,\"latencyVariation\":null,\"throughput\":null},\"meta\":null,\"userMeta\":null},{\"id\":\"zone2\",\"name\":\"zone2\",\"type\":\"ZONE\",\"netChar\":{\"latency\":5,\"latencyVariation\":1,\"throughput\":1000},\"networkLocations\":[{\"id\":\"zone2-DEFAULT\",\"name\":\"zone2-DEFAULT\",\"type\":\"DEFAULT\",\"terminalLinkLatency\":1,\"terminalLinkLatencyVariation\":1,\"terminalLinkThroughput\":50000,\"terminalLinkPacketLoss\":1,\"physicalLocations\":[{\"id\":\"zone2-edge1\",\"name\":\"zone2-edge1\",\"type\":\"EDGE\",\"processes\":[{\"id\":\"zone2-edge1-iperf\",\"name\":\"zone2-edge1-iperf\",\"type\":\"EDGE-APP\",\"image\":\"meep-docker-registry:30001/iperf-server\",\"commandArguments\":\"-c,export;iperf-s-p$IPERF_SERVICE_PORT;\",\"commandExe\":\"/bin/bash\",\"serviceConfig\":{\"name\":\"zone2-edge1-iperf\",\"meSvcName\":\"iperf\",\"ports\":[{\"protocol\":\"UDP\",\"port\":80,\"externalPort\":null}]},\"isExternal\":null,\"environment\":null,\"gpuConfig\":null,\"externalConfig\":null,\"status\":null,\"userChartLocation\":null,\"userChartAlternateValues\":null,\"userChartGroup\":null,\"meta\":null,\"userMeta\":null,\"appLatency\":null,\"appLatencyVariation\":null,\"appThroughput\":null,\"appPacketLoss\":null,\"placementId\":null},{\"id\":\"zone2-edge1-svc\",\"name\":\"zone2-edge1-svc\",\"type\":\"EDGE-APP\",\"image\":\"meep-docker-registry:30001/demo-server\",\"environment\":\"MGM_GROUP_NAME=svc,MGM_APP_ID=zone2-edge1-svc,MGM_APP_PORT=80\",\"serviceConfig\":{\"name\":\"zone2-edge1-svc\",\"meSvcName\":\"svc\",\"ports\":[{\"protocol\":\"TCP\",\"port\":80,\"externalPort\":null}]},\"isExternal\":null,\"commandArguments\":null,\"commandExe\":null,\"gpuConfig\":null,\"externalConfig\":null,\"status\":null,\"userChartLocation\":null,\"userChartAlternateValues\":null,\"userChartGroup\":null,\"meta\":null,\"userMeta\":null,\"appLatency\":null,\"appLatencyVariation\":null,\"appThroughput\":null,\"appPacketLoss\":null,\"placementId\":null}],\"isExternal\":null,\"networkLocationsInRange\":null,\"meta\":null,\"userMeta\":null,\"linkLatency\":null,\"linkLatencyVariation\":null,\"linkThroughput\":null,\"linkPacketLoss\":null}],\"meta\":null,\"userMeta\":null},{\"id\":\"zone2-poa1\",\"name\":\"zone2-poa1\",\"type\":\"POA\",\"terminalLinkLatency\":1,\"terminalLinkLatencyVariation\":1,\"terminalLinkThroughput\":20,\"terminalLinkPacketLoss\":null,\"meta\":null,\"userMeta\":null,\"physicalLocations\":null}],\"netChar\":{\"latency\":null,\"latencyVariation\":null,\"throughput\":null},\"meta\":null,\"userMeta\":null}],\"interZonePacketLoss\":null,\"meta\":null,\"userMeta\":null}],\"interDomainPacketLoss\":null,\"meta\":null,\"userMeta\":null},\"config\":null}"
+var jsonTestScenario = "{\"version\":\"1.5.0\",\"name\":\"demo1\",\"deployment\":{\"netChar\":{\"latency\":50,\"latencyVariation\":5,\"latencyDistribution\":\"Normal\",\"throughputDl\":1000,\"throughputUl\":1000,\"throughput\":null,\"packetLoss\":null},\"domains\":[{\"id\":\"PUBLIC\",\"name\":\"PUBLIC\",\"type\":\"PUBLIC\",\"netChar\":{\"latency\":6,\"latencyVariation\":2,\"throughputDl\":1000000,\"throughputUl\":1000000,\"latencyDistribution\":null,\"throughput\":null,\"packetLoss\":null},\"zones\":[{\"id\":\"PUBLIC-COMMON\",\"name\":\"PUBLIC-COMMON\",\"type\":\"COMMON\",\"netChar\":{\"latency\":5,\"latencyVariation\":1,\"latencyDistribution\":null,\"throughput\":null,\"throughputDl\":null,\"throughputUl\":null,\"packetLoss\":null},\"networkLocations\":[{\"id\":\"PUBLIC-COMMON-DEFAULT\",\"name\":\"PUBLIC-COMMON-DEFAULT\",\"type\":\"DEFAULT\",\"netChar\":{\"latency\":1,\"latencyVariation\":1,\"throughputDl\":50000,\"throughputUl\":50000,\"packetLoss\":1,\"latencyDistribution\":null,\"throughput\":null},\"physicalLocations\":[{\"id\":\"cloud\",\"name\":\"cloud\",\"type\":\"DC\",\"processes\":[{\"id\":\"cloud-iperf\",\"name\":\"cloud-iperf\",\"type\":\"CLOUD-APP\",\"image\":\"meep-docker-registry:30001/iperf-server\",\"commandArguments\":\"-c, export; iperf -s -p $IPERF_SERVICE_PORT\",\"commandExe\":\"/bin/bash\",\"serviceConfig\":{\"name\":\"cloud-iperf\",\"ports\":[{\"protocol\":\"UDP\",\"port\":80,\"externalPort\":null}],\"meSvcName\":null},\"netChar\":{\"latency\":null,\"latencyVariation\":null,\"latencyDistribution\":null,\"throughput\":null,\"throughputDl\":null,\"throughputUl\":null,\"packetLoss\":null},\"isExternal\":null,\"environment\":null,\"gpuConfig\":null,\"externalConfig\":null,\"status\":null,\"userChartLocation\":null,\"userChartAlternateValues\":null,\"userChartGroup\":null,\"meta\":null,\"userMeta\":null,\"appLatency\":null,\"appLatencyVariation\":null,\"appThroughput\":null,\"appPacketLoss\":null,\"placementId\":null},{\"id\":\"cloud-svc\",\"name\":\"cloud-svc\",\"type\":\"CLOUD-APP\",\"image\":\"meep-docker-registry:30001/demo-server\",\"environment\":\"MGM_GROUP_NAME=cloud-svc, MGM_APP_ID=cloud-svc, MGM_APP_PORT=80\",\"serviceConfig\":{\"name\":\"cloud-svc\",\"ports\":[{\"protocol\":\"TCP\",\"port\":80,\"externalPort\":null}],\"meSvcName\":null},\"netChar\":{\"latency\":null,\"latencyVariation\":null,\"latencyDistribution\":null,\"throughput\":null,\"throughputDl\":null,\"throughputUl\":null,\"packetLoss\":null},\"isExternal\":null,\"commandArguments\":null,\"commandExe\":null,\"gpuConfig\":null,\"externalConfig\":null,\"status\":null,\"userChartLocation\":null,\"userChartAlternateValues\":null,\"userChartGroup\":null,\"meta\":null,\"userMeta\":null,\"appLatency\":null,\"appLatencyVariation\":null,\"appThroughput\":null,\"appPacketLoss\":null,\"placementId\":null}],\"netChar\":{\"latency\":null,\"latencyVariation\":null,\"latencyDistribution\":null,\"throughput\":null,\"throughputDl\":null,\"throughputUl\":null,\"packetLoss\":null},\"isExternal\":null,\"geoData\":null,\"networkLocationsInRange\":null,\"meta\":null,\"userMeta\":null,\"linkLatency\":null,\"linkLatencyVariation\":null,\"linkThroughput\":null,\"linkPacketLoss\":null}],\"terminalLinkLatency\":null,\"terminalLinkLatencyVariation\":null,\"terminalLinkThroughput\":null,\"terminalLinkPacketLoss\":null,\"meta\":null,\"userMeta\":null,\"cellularPoaConfig\":null,\"geoData\":null}],\"interFogLatency\":null,\"interFogLatencyVariation\":null,\"interFogThroughput\":null,\"interFogPacketLoss\":null,\"interEdgeLatency\":null,\"interEdgeLatencyVariation\":null,\"interEdgeThroughput\":null,\"interEdgePacketLoss\":null,\"edgeFogLatency\":null,\"edgeFogLatencyVariation\":null,\"edgeFogThroughput\":null,\"edgeFogPacketLoss\":null,\"meta\":null,\"userMeta\":null}],\"interZoneLatency\":null,\"interZoneLatencyVariation\":null,\"interZoneThroughput\":null,\"interZonePacketLoss\":null,\"meta\":null,\"userMeta\":null,\"cellularDomainConfig\":null},{\"id\":\"operator1\",\"name\":\"operator1\",\"type\":\"OPERATOR\",\"netChar\":{\"latency\":15,\"latencyVariation\":3,\"throughputDl\":1000,\"throughputUl\":1000,\"latencyDistribution\":null,\"throughput\":null,\"packetLoss\":null},\"zones\":[{\"id\":\"operator1-COMMON\",\"name\":\"operator1-COMMON\",\"type\":\"COMMON\",\"netChar\":{\"latency\":5,\"latencyVariation\":1,\"latencyDistribution\":null,\"throughput\":null,\"throughputDl\":null,\"throughputUl\":null,\"packetLoss\":null},\"networkLocations\":[{\"id\":\"operator1-COMMON-DEFAULT\",\"name\":\"operator1-COMMON-DEFAULT\",\"type\":\"DEFAULT\",\"netChar\":{\"latency\":1,\"latencyVariation\":1,\"throughputDl\":50000,\"throughputUl\":50000,\"packetLoss\":1,\"latencyDistribution\":null,\"throughput\":null},\"terminalLinkLatency\":null,\"terminalLinkLatencyVariation\":null,\"terminalLinkThroughput\":null,\"terminalLinkPacketLoss\":null,\"meta\":null,\"userMeta\":null,\"cellularPoaConfig\":null,\"geoData\":null,\"physicalLocations\":null}],\"interFogLatency\":null,\"interFogLatencyVariation\":null,\"interFogThroughput\":null,\"interFogPacketLoss\":null,\"interEdgeLatency\":null,\"interEdgeLatencyVariation\":null,\"interEdgeThroughput\":null,\"interEdgePacketLoss\":null,\"edgeFogLatency\":null,\"edgeFogLatencyVariation\":null,\"edgeFogThroughput\":null,\"edgeFogPacketLoss\":null,\"meta\":null,\"userMeta\":null},{\"id\":\"zone1\",\"name\":\"zone1\",\"type\":\"ZONE\",\"netChar\":{\"latency\":5,\"latencyVariation\":1,\"latencyDistribution\":null,\"throughput\":null,\"throughputDl\":null,\"throughputUl\":null,\"packetLoss\":null},\"networkLocations\":[{\"id\":\"zone1-DEFAULT\",\"name\":\"zone1-DEFAULT\",\"type\":\"DEFAULT\",\"netChar\":{\"latency\":1,\"latencyVariation\":1,\"throughputDl\":50000,\"throughputUl\":50000,\"packetLoss\":1,\"latencyDistribution\":null,\"throughput\":null},\"physicalLocations\":[{\"id\":\"zone1-edge1\",\"name\":\"zone1-edge1\",\"type\":\"EDGE\",\"processes\":[{\"id\":\"zone1-edge1-iperf\",\"name\":\"zone1-edge1-iperf\",\"type\":\"EDGE-APP\",\"image\":\"meep-docker-registry:30001/iperf-server\",\"commandArguments\":\"-c, export; iperf -s -p $IPERF_SERVICE_PORT\",\"commandExe\":\"/bin/bash\",\"serviceConfig\":{\"name\":\"zone1-edge1-iperf\",\"meSvcName\":\"iperf\",\"ports\":[{\"protocol\":\"UDP\",\"port\":80,\"externalPort\":null}]},\"netChar\":{\"latency\":null,\"latencyVariation\":null,\"latencyDistribution\":null,\"throughput\":null,\"throughputDl\":null,\"throughputUl\":null,\"packetLoss\":null},\"isExternal\":null,\"environment\":null,\"gpuConfig\":null,\"externalConfig\":null,\"status\":null,\"userChartLocation\":null,\"userChartAlternateValues\":null,\"userChartGroup\":null,\"meta\":null,\"userMeta\":null,\"appLatency\":null,\"appLatencyVariation\":null,\"appThroughput\":null,\"appPacketLoss\":null,\"placementId\":null},{\"id\":\"zone1-edge1-svc\",\"name\":\"zone1-edge1-svc\",\"type\":\"EDGE-APP\",\"image\":\"meep-docker-registry:30001/demo-server\",\"environment\":\"MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-edge1-svc, MGM_APP_PORT=80\",\"serviceConfig\":{\"name\":\"zone1-edge1-svc\",\"meSvcName\":\"svc\",\"ports\":[{\"protocol\":\"TCP\",\"port\":80,\"externalPort\":null}]},\"netChar\":{\"latency\":null,\"latencyVariation\":null,\"latencyDistribution\":null,\"throughput\":null,\"throughputDl\":null,\"throughputUl\":null,\"packetLoss\":null},\"isExternal\":null,\"commandArguments\":null,\"commandExe\":null,\"gpuConfig\":null,\"externalConfig\":null,\"status\":null,\"userChartLocation\":null,\"userChartAlternateValues\":null,\"userChartGroup\":null,\"meta\":null,\"userMeta\":null,\"appLatency\":null,\"appLatencyVariation\":null,\"appThroughput\":null,\"appPacketLoss\":null,\"placementId\":null}],\"netChar\":{\"latency\":null,\"latencyVariation\":null,\"latencyDistribution\":null,\"throughput\":null,\"throughputDl\":null,\"throughputUl\":null,\"packetLoss\":null},\"isExternal\":null,\"geoData\":null,\"networkLocationsInRange\":null,\"meta\":null,\"userMeta\":null,\"linkLatency\":null,\"linkLatencyVariation\":null,\"linkThroughput\":null,\"linkPacketLoss\":null}],\"terminalLinkLatency\":null,\"terminalLinkLatencyVariation\":null,\"terminalLinkThroughput\":null,\"terminalLinkPacketLoss\":null,\"meta\":null,\"userMeta\":null,\"cellularPoaConfig\":null,\"geoData\":null},{\"id\":\"zone1-poa1\",\"name\":\"zone1-poa1\",\"type\":\"POA\",\"netChar\":{\"latency\":1,\"latencyVariation\":1,\"throughputDl\":1000,\"throughputUl\":1000,\"latencyDistribution\":null,\"throughput\":null,\"packetLoss\":null},\"physicalLocations\":[{\"id\":\"zone1-fog1\",\"name\":\"zone1-fog1\",\"type\":\"FOG\",\"processes\":[{\"id\":\"zone1-fog1-iperf\",\"name\":\"zone1-fog1-iperf\",\"type\":\"EDGE-APP\",\"image\":\"meep-docker-registry:30001/iperf-server\",\"commandArguments\":\"-c, export; iperf -s -p $IPERF_SERVICE_PORT;\",\"commandExe\":\"/bin/bash\",\"serviceConfig\":{\"name\":\"zone1-fog1-iperf\",\"meSvcName\":\"iperf\",\"ports\":[{\"protocol\":\"UDP\",\"port\":80,\"externalPort\":null}]},\"netChar\":{\"latency\":null,\"latencyVariation\":null,\"latencyDistribution\":null,\"throughput\":null,\"throughputDl\":null,\"throughputUl\":null,\"packetLoss\":null},\"isExternal\":null,\"environment\":null,\"gpuConfig\":null,\"externalConfig\":null,\"status\":null,\"userChartLocation\":null,\"userChartAlternateValues\":null,\"userChartGroup\":null,\"meta\":null,\"userMeta\":null,\"appLatency\":null,\"appLatencyVariation\":null,\"appThroughput\":null,\"appPacketLoss\":null,\"placementId\":null},{\"id\":\"zone1-fog1-svc\",\"name\":\"zone1-fog1-svc\",\"type\":\"EDGE-APP\",\"image\":\"meep-docker-registry:30001/demo-server\",\"environment\":\"MGM_GROUP_NAME=svc, MGM_APP_ID=zone1-fog1-svc, MGM_APP_PORT=80\",\"serviceConfig\":{\"name\":\"zone1-fog1-svc\",\"meSvcName\":\"svc\",\"ports\":[{\"protocol\":\"TCP\",\"port\":80,\"externalPort\":null}]},\"netChar\":{\"latency\":null,\"latencyVariation\":null,\"latencyDistribution\":null,\"throughput\":null,\"throughputDl\":null,\"throughputUl\":null,\"packetLoss\":null},\"isExternal\":null,\"commandArguments\":null,\"commandExe\":null,\"gpuConfig\":null,\"externalConfig\":null,\"status\":null,\"userChartLocation\":null,\"userChartAlternateValues\":null,\"userChartGroup\":null,\"meta\":null,\"userMeta\":null,\"appLatency\":null,\"appLatencyVariation\":null,\"appThroughput\":null,\"appPacketLoss\":null,\"placementId\":null}],\"netChar\":{\"latency\":null,\"latencyVariation\":null,\"latencyDistribution\":null,\"throughput\":null,\"throughputDl\":null,\"throughputUl\":null,\"packetLoss\":null},\"isExternal\":null,\"geoData\":null,\"networkLocationsInRange\":null,\"meta\":null,\"userMeta\":null,\"linkLatency\":null,\"linkLatencyVariation\":null,\"linkThroughput\":null,\"linkPacketLoss\":null},{\"id\":\"ue1\",\"name\":\"ue1\",\"type\":\"UE\",\"processes\":[{\"id\":\"ue1-iperf\",\"name\":\"ue1-iperf\",\"type\":\"UE-APP\",\"image\":\"meep-docker-registry:30001/iperf-client\",\"commandArguments\":\"-c, export; iperf -u -c $IPERF_SERVICE_HOST -p $IPERF_SERVICE_PORT -t 3600 -b 50M;\",\"commandExe\":\"/bin/bash\",\"netChar\":{\"latency\":null,\"latencyVariation\":null,\"latencyDistribution\":null,\"throughput\":null,\"throughputDl\":null,\"throughputUl\":null,\"packetLoss\":null},\"isExternal\":null,\"environment\":null,\"serviceConfig\":null,\"gpuConfig\":null,\"externalConfig\":null,\"status\":null,\"userChartLocation\":null,\"userChartAlternateValues\":null,\"userChartGroup\":null,\"meta\":null,\"userMeta\":null,\"appLatency\":null,\"appLatencyVariation\":null,\"appThroughput\":null,\"appPacketLoss\":null,\"placementId\":null}],\"netChar\":{\"latency\":null,\"latencyVariation\":null,\"latencyDistribution\":null,\"throughput\":null,\"throughputDl\":null,\"throughputUl\":null,\"packetLoss\":null},\"isExternal\":null,\"geoData\":null,\"networkLocationsInRange\":null,\"meta\":null,\"userMeta\":null,\"linkLatency\":null,\"linkLatencyVariation\":null,\"linkThroughput\":null,\"linkPacketLoss\":null},{\"id\":\"ue2-ext\",\"name\":\"ue2-ext\",\"type\":\"UE\",\"isExternal\":true,\"processes\":[{\"id\":\"ue2-svc\",\"name\":\"ue2-svc\",\"type\":\"UE-APP\",\"isExternal\":true,\"externalConfig\":{\"ingressServiceMap\":[{\"name\":\"svc\",\"port\":80,\"externalPort\":31111,\"protocol\":\"TCP\"},{\"name\":\"iperf\",\"port\":80,\"externalPort\":31222,\"protocol\":\"UDP\"},{\"name\":\"cloud-svc\",\"port\":80,\"externalPort\":31112,\"protocol\":\"TCP\"},{\"name\":\"cloud-iperf\",\"port\":80,\"externalPort\":31223,\"protocol\":\"UDP\"}],\"egressServiceMap\":null},\"netChar\":{\"latency\":null,\"latencyVariation\":null,\"latencyDistribution\":null,\"throughput\":null,\"throughputDl\":null,\"throughputUl\":null,\"packetLoss\":null},\"image\":null,\"environment\":null,\"commandArguments\":null,\"commandExe\":null,\"serviceConfig\":null,\"gpuConfig\":null,\"status\":null,\"userChartLocation\":null,\"userChartAlternateValues\":null,\"userChartGroup\":null,\"meta\":null,\"userMeta\":null,\"appLatency\":null,\"appLatencyVariation\":null,\"appThroughput\":null,\"appPacketLoss\":null,\"placementId\":null}],\"netChar\":{\"latency\":null,\"latencyVariation\":null,\"latencyDistribution\":null,\"throughput\":null,\"throughputDl\":null,\"throughputUl\":null,\"packetLoss\":null},\"geoData\":null,\"networkLocationsInRange\":null,\"meta\":null,\"userMeta\":null,\"linkLatency\":null,\"linkLatencyVariation\":null,\"linkThroughput\":null,\"linkPacketLoss\":null}],\"terminalLinkLatency\":null,\"terminalLinkLatencyVariation\":null,\"terminalLinkThroughput\":null,\"terminalLinkPacketLoss\":null,\"meta\":null,\"userMeta\":null,\"cellularPoaConfig\":null,\"geoData\":null},{\"id\":\"zone1-poa2\",\"name\":\"zone1-poa2\",\"type\":\"POA\",\"netChar\":{\"latency\":10,\"latencyVariation\":2,\"throughputDl\":50,\"throughputUl\":50,\"latencyDistribution\":null,\"throughput\":null,\"packetLoss\":null},\"terminalLinkLatency\":null,\"terminalLinkLatencyVariation\":null,\"terminalLinkThroughput\":null,\"terminalLinkPacketLoss\":null,\"meta\":null,\"userMeta\":null,\"cellularPoaConfig\":null,\"geoData\":null,\"physicalLocations\":null}],\"interFogLatency\":null,\"interFogLatencyVariation\":null,\"interFogThroughput\":null,\"interFogPacketLoss\":null,\"interEdgeLatency\":null,\"interEdgeLatencyVariation\":null,\"interEdgeThroughput\":null,\"interEdgePacketLoss\":null,\"edgeFogLatency\":null,\"edgeFogLatencyVariation\":null,\"edgeFogThroughput\":null,\"edgeFogPacketLoss\":null,\"meta\":null,\"userMeta\":null},{\"id\":\"zone2\",\"name\":\"zone2\",\"type\":\"ZONE\",\"netChar\":{\"latency\":5,\"latencyVariation\":1,\"latencyDistribution\":null,\"throughput\":null,\"throughputDl\":null,\"throughputUl\":null,\"packetLoss\":null},\"networkLocations\":[{\"id\":\"zone2-DEFAULT\",\"name\":\"zone2-DEFAULT\",\"type\":\"DEFAULT\",\"netChar\":{\"latency\":1,\"latencyVariation\":1,\"throughputDl\":50000,\"throughputUl\":50000,\"packetLoss\":1,\"latencyDistribution\":null,\"throughput\":null},\"physicalLocations\":[{\"id\":\"zone2-edge1\",\"name\":\"zone2-edge1\",\"type\":\"EDGE\",\"processes\":[{\"id\":\"zone2-edge1-iperf\",\"name\":\"zone2-edge1-iperf\",\"type\":\"EDGE-APP\",\"image\":\"meep-docker-registry:30001/iperf-server\",\"commandArguments\":\"-c, export; iperf -s -p $IPERF_SERVICE_PORT;\",\"commandExe\":\"/bin/bash\",\"serviceConfig\":{\"name\":\"zone2-edge1-iperf\",\"meSvcName\":\"iperf\",\"ports\":[{\"protocol\":\"UDP\",\"port\":80,\"externalPort\":null}]},\"netChar\":{\"latency\":null,\"latencyVariation\":null,\"latencyDistribution\":null,\"throughput\":null,\"throughputDl\":null,\"throughputUl\":null,\"packetLoss\":null},\"isExternal\":null,\"environment\":null,\"gpuConfig\":null,\"externalConfig\":null,\"status\":null,\"userChartLocation\":null,\"userChartAlternateValues\":null,\"userChartGroup\":null,\"meta\":null,\"userMeta\":null,\"appLatency\":null,\"appLatencyVariation\":null,\"appThroughput\":null,\"appPacketLoss\":null,\"placementId\":null},{\"id\":\"zone2-edge1-svc\",\"name\":\"zone2-edge1-svc\",\"type\":\"EDGE-APP\",\"image\":\"meep-docker-registry:30001/demo-server\",\"environment\":\"MGM_GROUP_NAME=svc, MGM_APP_ID=zone2-edge1-svc, MGM_APP_PORT=80\",\"serviceConfig\":{\"name\":\"zone2-edge1-svc\",\"meSvcName\":\"svc\",\"ports\":[{\"protocol\":\"TCP\",\"port\":80,\"externalPort\":null}]},\"netChar\":{\"latency\":null,\"latencyVariation\":null,\"latencyDistribution\":null,\"throughput\":null,\"throughputDl\":null,\"throughputUl\":null,\"packetLoss\":null},\"isExternal\":null,\"commandArguments\":null,\"commandExe\":null,\"gpuConfig\":null,\"externalConfig\":null,\"status\":null,\"userChartLocation\":null,\"userChartAlternateValues\":null,\"userChartGroup\":null,\"meta\":null,\"userMeta\":null,\"appLatency\":null,\"appLatencyVariation\":null,\"appThroughput\":null,\"appPacketLoss\":null,\"placementId\":null}],\"netChar\":{\"latency\":null,\"latencyVariation\":null,\"latencyDistribution\":null,\"throughput\":null,\"throughputDl\":null,\"throughputUl\":null,\"packetLoss\":null},\"isExternal\":null,\"geoData\":null,\"networkLocationsInRange\":null,\"meta\":null,\"userMeta\":null,\"linkLatency\":null,\"linkLatencyVariation\":null,\"linkThroughput\":null,\"linkPacketLoss\":null}],\"terminalLinkLatency\":null,\"terminalLinkLatencyVariation\":null,\"terminalLinkThroughput\":null,\"terminalLinkPacketLoss\":null,\"meta\":null,\"userMeta\":null,\"cellularPoaConfig\":null,\"geoData\":null},{\"id\":\"zone2-poa1\",\"name\":\"zone2-poa1\",\"type\":\"POA\",\"netChar\":{\"latency\":1,\"latencyVariation\":1,\"throughputDl\":20,\"throughputUl\":20,\"latencyDistribution\":null,\"throughput\":null,\"packetLoss\":null},\"terminalLinkLatency\":null,\"terminalLinkLatencyVariation\":null,\"terminalLinkThroughput\":null,\"terminalLinkPacketLoss\":null,\"meta\":null,\"userMeta\":null,\"cellularPoaConfig\":null,\"geoData\":null,\"physicalLocations\":null}],\"interFogLatency\":null,\"interFogLatencyVariation\":null,\"interFogThroughput\":null,\"interFogPacketLoss\":null,\"interEdgeLatency\":null,\"interEdgeLatencyVariation\":null,\"interEdgeThroughput\":null,\"interEdgePacketLoss\":null,\"edgeFogLatency\":null,\"edgeFogLatencyVariation\":null,\"edgeFogThroughput\":null,\"edgeFogPacketLoss\":null,\"meta\":null,\"userMeta\":null}],\"interZoneLatency\":null,\"interZoneLatencyVariation\":null,\"interZoneThroughput\":null,\"interZonePacketLoss\":null,\"meta\":null,\"userMeta\":null,\"cellularDomainConfig\":null}],\"interDomainLatency\":null,\"interDomainLatencyVariation\":null,\"interDomainThroughput\":null,\"interDomainPacketLoss\":null,\"meta\":null,\"userMeta\":null},\"id\":null,\"description\":null,\"config\":null}"
func TestSegAlgoSegmentation(t *testing.T) {
fmt.Println("--- ", t.Name())
@@ -36,181 +39,186 @@ func TestSegAlgoSegmentation(t *testing.T) {
// Create Model & add Scenario to use for testing
fmt.Println("Create Model")
- activeModel, err := mod.NewModel(segAlgoRedisAddr, moduleName, "activeScenario")
+ modelCfg := mod.ModelCfg{Name: "activeScenario", Namespace: testModuleNamespace, Module: testModuleName, UpdateCb: nil, DbAddr: segAlgoRedisAddr}
+ activeModel, err := mod.NewModel(modelCfg)
if err != nil {
- t.Errorf("Failed to create Model instance")
+ t.Fatalf("Failed to create Model instance")
}
fmt.Println("Set scenario in Model")
err = activeModel.SetScenario([]byte(jsonTestScenario))
if err != nil {
- t.Errorf("Failed to set scenario in model")
+ t.Fatalf("Failed to set scenario in model")
}
// Create new Algorithm
fmt.Println("Create new algorithm")
- algo, err := NewSegmentAlgorithm(segAlgoRedisAddr)
+ algo, err := NewSegmentAlgorithm(testModuleName, testModuleNamespace, segAlgoRedisAddr)
if err != nil {
- t.Errorf("Failed to create a SegAlgo object.")
+ t.Fatalf("Failed to create a SegAlgo object.")
}
if len(algo.FlowMap) != 0 {
- t.Errorf("Flow Map not empty")
+ t.Fatalf("Flow Map not empty")
}
if len(algo.SegmentMap) != 0 {
- t.Errorf("Segment Map not empty")
+ t.Fatalf("Segment Map not empty")
}
// Test Algorithm
fmt.Println("Test algo without scenario")
updatedNetCharList := algo.CalculateNetChar()
if len(updatedNetCharList) != 0 {
- t.Errorf("Updated net char list not empty")
+ t.Fatalf("Updated net char list not empty")
}
fmt.Println("Process scenario model")
err = algo.ProcessScenario(activeModel)
if err != nil {
- t.Errorf("Failed to process scenario model")
+ t.Fatalf("Failed to process scenario model")
}
if len(algo.FlowMap) != 90 {
- t.Errorf("Invalid Flow Map entry count")
+ t.Fatalf("Invalid Flow Map entry count")
}
if len(algo.SegmentMap) != 42 {
- t.Errorf("Invalid Segment Map entry count")
+ t.Fatalf("Invalid Segment Map entry count")
}
// Validate algorithm segmentation
fmt.Println("Validate algorithm segmentation")
if !validatePath(algo, "zone1-fog1-iperf:ue1-iperf", 3) {
- t.Errorf("Invalid path")
+ t.Fatalf("Invalid path")
}
if !validatePath(algo, "zone2-edge1-iperf:ue1-iperf", 7) {
- t.Errorf("Invalid path")
+ t.Fatalf("Invalid path")
}
// Validate algorithm Calculations
fmt.Println("Test algo calculation with some flows updated with metrics")
updatedNetCharList = algo.CalculateNetChar()
if len(updatedNetCharList) != 90 {
- t.Errorf("Updated net char list not fully filled")
+ t.Fatalf("Updated net char list not fully filled")
}
fmt.Println("Test algo calculation without changes in metrics")
updatedNetCharList = algo.CalculateNetChar()
if len(updatedNetCharList) != 0 {
- t.Errorf("Updated net char list not empty")
+ t.Fatalf("Updated net char list not empty")
}
// Verify algo after Network Characteristic update
fmt.Println("Update Net char")
- var netCharUpdateEvent ceModel.EventNetworkCharacteristicsUpdate
+ var netCharUpdateEvent dataModel.EventNetworkCharacteristicsUpdate
netCharUpdateEvent.ElementName = "zone1-poa1"
netCharUpdateEvent.ElementType = "POA"
- netCharUpdateEvent.Throughput = 100
+ var netChar dataModel.NetworkCharacteristics
+ netChar.ThroughputUl = 100
+ netCharUpdateEvent.NetChar = &netChar
err = activeModel.UpdateNetChar(&netCharUpdateEvent)
if err != nil {
- t.Errorf("Error updating net char")
+ t.Fatalf("Error updating net char")
}
err = algo.ProcessScenario(activeModel)
if err != nil {
- t.Errorf("Failed to process scenario model")
+ t.Fatalf("Failed to process scenario model")
}
if len(algo.FlowMap) != 90 {
- t.Errorf("Invalid Flow Map entry count")
+ t.Fatalf("Invalid Flow Map entry count")
}
if len(algo.SegmentMap) != 42 {
- t.Errorf("Invalid Segment Map entry count")
+ t.Fatalf("Invalid Segment Map entry count")
}
updatedNetCharList = algo.CalculateNetChar()
if len(updatedNetCharList) != 34 {
- t.Errorf("Updated net char list not empty")
+ t.Fatalf("Updated net char list not empty")
}
// Verify algo after UE Mobility event update
fmt.Println("Move ue1")
_, _, err = activeModel.MoveNode("ue1", "zone2-poa1")
if err != nil {
- t.Errorf("Error moving UE")
+ t.Fatalf("Error moving UE")
}
err = algo.ProcessScenario(activeModel)
if err != nil {
- t.Errorf("Failed to process scenario model")
+ t.Fatalf("Failed to process scenario model")
}
if len(algo.FlowMap) != 90 {
- t.Errorf("Invalid Flow Map entry count")
+ t.Fatalf("Invalid Flow Map entry count")
}
+
if len(algo.SegmentMap) != 44 {
- t.Errorf("Invalid Segment Map entry count")
+ t.Fatalf("Invalid Segment Map entry count")
}
// Validate algorithm segmentation
fmt.Println("Validate algorithm segmentation")
if !validatePath(algo, "zone1-fog1-iperf:ue1-iperf", 7) {
- t.Errorf("Invalid path")
+ t.Fatalf("Invalid path")
}
if !validatePath(algo, "zone2-edge1-iperf:ue1-iperf", 5) {
- t.Errorf("Invalid path")
+ t.Fatalf("Invalid path")
}
// Validate algorithm Calculations
updatedNetCharList = algo.CalculateNetChar()
if len(updatedNetCharList) != 18 {
- t.Errorf("Updated net char list not empty")
+ t.Fatalf("Updated net char list not empty")
}
// Verify algo after model update
fmt.Println("Move ue1")
_, _, err = activeModel.MoveNode("ue1", "zone1-poa1")
if err != nil {
- t.Errorf("Error moving UE")
+ t.Fatalf("Error moving UE")
}
err = algo.ProcessScenario(activeModel)
if err != nil {
- t.Errorf("Failed to process scenario model")
+ t.Fatalf("Failed to process scenario model")
}
if len(algo.FlowMap) != 90 {
- t.Errorf("Invalid Flow Map entry count")
+ t.Fatalf("Invalid Flow Map entry count")
}
if len(algo.SegmentMap) != 42 {
- t.Errorf("Invalid Segment Map entry count")
+ t.Fatalf("Invalid Segment Map entry count")
}
// Validate algorithm segmentation
fmt.Println("Validate algorithm segmentation")
if !validatePath(algo, "zone1-fog1-iperf:ue1-iperf", 3) {
- t.Errorf("Invalid path")
+ t.Fatalf("Invalid path")
}
if !validatePath(algo, "zone2-edge1-iperf:ue1-iperf", 7) {
- t.Errorf("Invalid path")
+ t.Fatalf("Invalid path")
}
// Validate algorithm Calculations
updatedNetCharList = algo.CalculateNetChar()
if len(updatedNetCharList) != 18 {
- t.Errorf("Updated net char list not empty")
+ t.Fatalf("Updated net char list not empty")
}
// Clear model and make sure all
fmt.Println("Create new Model instance")
- activeModel, err = mod.NewModel(segAlgoRedisAddr, moduleName, "activeScenario")
+ modelCfg = mod.ModelCfg{Name: "activeScenario", Namespace: testModuleNamespace, Module: testModuleName, UpdateCb: nil, DbAddr: segAlgoRedisAddr}
+ activeModel, err = mod.NewModel(modelCfg)
if err != nil {
- t.Errorf("Failed to create Model instance")
+ t.Fatalf("Failed to create Model instance")
}
fmt.Println("Process empty scenario model")
err = algo.ProcessScenario(activeModel)
if err != nil {
- t.Errorf("Failed to process scenario model")
+ t.Fatalf("Failed to process scenario model")
}
if len(algo.FlowMap) != 0 {
- t.Errorf("Invalid Flow Map entry count")
+ t.Fatalf("Invalid Flow Map entry count")
}
if len(algo.SegmentMap) != 0 {
- t.Errorf("Invalid Segment Map entry count")
+ t.Fatalf("Invalid Segment Map entry count")
}
fmt.Println("Test algo without scenario")
updatedNetCharList = algo.CalculateNetChar()
if len(updatedNetCharList) != 0 {
- t.Errorf("Updated net char list not empty")
+ t.Fatalf("Updated net char list not empty")
}
}
@@ -221,216 +229,223 @@ func TestSegAlgoCalculation(t *testing.T) {
// Create connection to Metrics Redis DB to inject metrics
rc, err := redis.NewConnector(segAlgoRedisAddr, metricsDb)
if err != nil {
- t.Errorf("Failed connection to Metrics redis DB")
+ t.Fatalf("Failed connection to Metrics redis DB")
}
// Create Model & add Scenario to use for testing
fmt.Println("Create Model")
- activeModel, err := mod.NewModel(segAlgoRedisAddr, moduleName, "activeScenario")
+ modelCfg := mod.ModelCfg{Name: "activeScenario", Namespace: testModuleNamespace, Module: testModuleName, UpdateCb: nil, DbAddr: segAlgoRedisAddr}
+ activeModel, err := mod.NewModel(modelCfg)
if err != nil {
- t.Errorf("Failed to create Model instance")
+ t.Fatalf("Failed to create Model instance")
}
fmt.Println("Set scenario in Model")
err = activeModel.SetScenario([]byte(jsonTestScenario))
if err != nil {
- t.Errorf("Failed to set scenario in model")
+ t.Fatalf("Failed to set scenario in model")
}
// Create & Process new Algorithm
fmt.Println("Create new algorithm")
- algo, err := NewSegmentAlgorithm(segAlgoRedisAddr)
+ algo, err := NewSegmentAlgorithm(testModuleName, testModuleNamespace, segAlgoRedisAddr)
if err != nil {
- t.Errorf("Failed to create a SegAlgo object.")
+ t.Fatalf("Failed to create a SegAlgo object.")
}
fmt.Println("Process scenario model")
err = algo.ProcessScenario(activeModel)
if err != nil {
- t.Errorf("Failed to process scenario model")
+ t.Fatalf("Failed to process scenario model")
}
// Validate algorithm Calculations
fmt.Println("Test algorithm calculations with & without metrics")
updatedNetCharList := algo.CalculateNetChar()
if len(updatedNetCharList) != 90 {
- t.Errorf("Updated net char list not fully filled")
+ t.Fatalf("Updated net char list not fully filled")
+ }
+
+ if !validateNetCharUpdate(updatedNetCharList, "cloud-iperf", "ue1-iperf", 121, 15, 0, 200) {
+ t.Fatalf("Error in Net Char initial calculation")
}
// Update metrics & recalculate
if !setMetrics(rc, "zone1-fog1-iperf", "ue1-iperf", 100) {
- t.Errorf("Error updating metrics")
+ t.Fatalf("Error updating metrics")
}
if !setMetrics(rc, "zone1-fog1-svc", "ue2-svc", 100) {
- t.Errorf("Error updating metrics")
+ t.Fatalf("Error updating metrics")
}
updatedNetCharList = algo.CalculateNetChar()
if len(updatedNetCharList) != 2 {
- t.Errorf("Invalid net char update list")
+ t.Fatalf("Invalid net char update list")
}
if !validateNetCharUpdate(updatedNetCharList, "zone1-fog1-iperf", "ue1-iperf", 1, 1, 0, 500) {
- t.Errorf("Error in Net Char update")
+ t.Fatalf("Error in Net Char update")
}
if !validateNetCharUpdate(updatedNetCharList, "zone1-fog1-svc", "ue2-svc", 1, 1, 0, 500) {
- t.Errorf("Error in Net Char update")
+ t.Fatalf("Error in Net Char update")
}
// Verify algo calculations after Network Characteristic update
fmt.Println("Update Net char")
- var netCharUpdateEvent ceModel.EventNetworkCharacteristicsUpdate
+ var netCharUpdateEvent dataModel.EventNetworkCharacteristicsUpdate
netCharUpdateEvent.ElementName = "zone1-poa1"
netCharUpdateEvent.ElementType = "POA"
- netCharUpdateEvent.Latency = 1 // no change
- netCharUpdateEvent.LatencyVariation = 1 // no change
- netCharUpdateEvent.PacketLoss = 0 // no change
- netCharUpdateEvent.Throughput = 100
+ var netChar dataModel.NetworkCharacteristics
+ netChar.Latency = 1 // no change
+ netChar.LatencyVariation = 1 // no change
+ netChar.PacketLoss = 0 // no change
+ netChar.ThroughputDl = 100
+ netCharUpdateEvent.NetChar = &netChar
err = activeModel.UpdateNetChar(&netCharUpdateEvent)
if err != nil {
- t.Errorf("Error updating net char")
+ t.Fatalf("Error updating net char")
}
err = algo.ProcessScenario(activeModel)
if err != nil {
- t.Errorf("Failed to process scenario model")
+ t.Fatalf("Failed to process scenario model")
}
updatedNetCharList = algo.CalculateNetChar()
if len(updatedNetCharList) != 2 {
- t.Errorf("Invalid net char update list")
+ t.Fatalf("Invalid net char update list")
}
if !validateNetCharUpdate(updatedNetCharList, "zone1-fog1-iperf", "ue1-iperf", 1, 1, 0, 50) {
- t.Errorf("Error in Net Char update")
+ t.Fatalf("Error in Net Char update")
}
if !validateNetCharUpdate(updatedNetCharList, "zone1-fog1-svc", "ue2-svc", 1, 1, 0, 50) {
- t.Errorf("Error in Net Char update")
+ t.Fatalf("Error in Net Char update")
}
// Update metrics & recalculate
if !setMetrics(rc, "zone1-fog1-iperf", "ue1-iperf", 50) {
- t.Errorf("Error updating metrics")
+ t.Fatalf("Error updating metrics")
}
if !setMetrics(rc, "zone1-fog1-svc", "ue2-svc", 50) {
- t.Errorf("Error updating metrics")
+ t.Fatalf("Error updating metrics")
}
updatedNetCharList = algo.CalculateNetChar()
if len(updatedNetCharList) != 0 {
- t.Errorf("Invalid net char update list")
+ t.Fatalf("Invalid net char update list")
}
// Verify algo calculations after UE Mobility event update
fmt.Println("Move ue1 to zone2-poa1")
_, _, err = activeModel.MoveNode("ue1", "zone2-poa1")
if err != nil {
- t.Errorf("Error moving UE")
+ t.Fatalf("Error moving UE")
}
err = algo.ProcessScenario(activeModel)
if err != nil {
- t.Errorf("Failed to process scenario model")
+ t.Fatalf("Failed to process scenario model")
}
// Update metrics & recalculate
if !setMetrics(rc, "zone1-fog1-iperf", "ue1-iperf", 25) {
- t.Errorf("Error updating metrics")
+ t.Fatalf("Error updating metrics")
}
if !setMetrics(rc, "zone2-edge1-iperf", "ue1-iperf", 25) {
- t.Errorf("Error updating metrics")
+ t.Fatalf("Error updating metrics")
}
if !setMetrics(rc, "zone1-fog1-svc", "ue2-svc", 50) {
- t.Errorf("Error updating metrics")
+ t.Fatalf("Error updating metrics")
}
updatedNetCharList = algo.CalculateNetChar()
if len(updatedNetCharList) != 19 {
- t.Errorf("Invalid net char update list")
+ t.Fatalf("Invalid net char update list")
}
if !validateNetCharUpdate(updatedNetCharList, "zone1-fog1-iperf", "ue1-iperf", 41, 9, 0, 10) {
- t.Errorf("Error in Net Char update")
+ t.Fatalf("Error in Net Char update")
}
if !validateNetCharUpdate(updatedNetCharList, "zone2-edge1-iperf", "ue1-iperf", 11, 3, 0, 10) {
- t.Errorf("Error in Net Char update")
+ t.Fatalf("Error in Net Char update")
}
if !validateNetCharUpdate(updatedNetCharList, "zone1-fog1-svc", "ue2-svc", 1, 1, 0, 100) {
- t.Errorf("Error in Net Char update")
+ t.Fatalf("Error in Net Char update")
}
// Update metrics & recalculate
if !setMetrics(rc, "zone1-fog1-iperf", "ue1-iperf", 0) {
- t.Errorf("Error updating metrics")
+ t.Fatalf("Error updating metrics")
}
if !setMetrics(rc, "zone2-edge1-iperf", "ue1-iperf", 10) {
- t.Errorf("Error updating metrics")
+ t.Fatalf("Error updating metrics")
}
if !setMetrics(rc, "zone1-fog1-svc", "ue2-svc", 100) {
- t.Errorf("Error updating metrics")
+ t.Fatalf("Error updating metrics")
}
updatedNetCharList = algo.CalculateNetChar()
if len(updatedNetCharList) != 2 {
- t.Errorf("Invalid net char update list")
+ t.Fatalf("Invalid net char update list")
}
if !validateNetCharUpdate(updatedNetCharList, "zone1-fog1-iperf", "ue1-iperf", 41, 9, 0, 6) {
- t.Errorf("Error in Net Char update")
+ t.Fatalf("Error in Net Char update")
}
if !validateNetCharUpdate(updatedNetCharList, "zone2-edge1-iperf", "ue1-iperf", 11, 3, 0, 20) {
- t.Errorf("Error in Net Char update")
+ t.Fatalf("Error in Net Char update")
}
// Make sure we get no more updates when steady state is reached
updatedNetCharList = algo.CalculateNetChar()
if len(updatedNetCharList) != 0 {
- t.Errorf("Invalid net char update list")
+ t.Fatalf("Invalid net char update list")
}
// Verify algo calculations after UE Mobility event update
fmt.Println("Move ue1 to zone1-poa1")
_, _, err = activeModel.MoveNode("ue1", "zone1-poa1")
if err != nil {
- t.Errorf("Error moving UE")
+ t.Fatalf("Error moving UE")
}
err = algo.ProcessScenario(activeModel)
if err != nil {
- t.Errorf("Failed to process scenario model")
+ t.Fatalf("Failed to process scenario model")
}
// Update metrics & recalculate
if !setMetrics(rc, "zone1-fog1-iperf", "ue1-iperf", 0) {
- t.Errorf("Error updating metrics")
+ t.Fatalf("Error updating metrics")
}
if !setMetrics(rc, "zone2-edge1-iperf", "ue1-iperf", 20) {
- t.Errorf("Error updating metrics")
+ t.Fatalf("Error updating metrics")
}
updatedNetCharList = algo.CalculateNetChar()
if len(updatedNetCharList) != 19 {
- t.Errorf("Invalid net char update list")
+ t.Fatalf("Invalid net char update list")
}
if !validateNetCharUpdate(updatedNetCharList, "zone2-edge1-iperf", "ue1-iperf", 41, 9, 0, 23) {
- t.Errorf("Error in Net Char update")
+ t.Fatalf("Error in Net Char update")
}
if !validateNetCharUpdate(updatedNetCharList, "zone1-fog1-svc", "ue2-svc", 1, 1, 0, 77) {
- t.Errorf("Error in Net Char update")
+ t.Fatalf("Error in Net Char update")
}
// Update metrics & recalculate
if !setMetrics(rc, "zone1-fog1-iperf", "ue1-iperf", 23) {
- t.Errorf("Error updating metrics")
+ t.Fatalf("Error updating metrics")
}
if !setMetrics(rc, "zone2-edge1-iperf", "ue1-iperf", 0) {
- t.Errorf("Error updating metrics")
+ t.Fatalf("Error updating metrics")
}
if !setMetrics(rc, "zone1-fog1-svc", "ue2-svc", 77) {
- t.Errorf("Error updating metrics")
+ t.Fatalf("Error updating metrics")
}
updatedNetCharList = algo.CalculateNetChar()
if len(updatedNetCharList) != 3 {
- t.Errorf("Invalid net char update list")
+ t.Fatalf("Invalid net char update list")
}
if !validateNetCharUpdate(updatedNetCharList, "zone1-fog1-iperf", "ue1-iperf", 1, 1, 0, 26) {
- t.Errorf("Error in Net Char update")
+ t.Fatalf("Error in Net Char update")
}
if !validateNetCharUpdate(updatedNetCharList, "zone2-edge1-iperf", "ue1-iperf", 41, 9, 0, 20) {
- t.Errorf("Error in Net Char update")
+ t.Fatalf("Error in Net Char update")
}
if !validateNetCharUpdate(updatedNetCharList, "zone1-fog1-svc", "ue2-svc", 1, 1, 0, 74) {
- t.Errorf("Error in Net Char update")
+ t.Fatalf("Error in Net Char update")
}
}
func setMetrics(rc *redis.Connector, src string, dst string, throughput float64) bool {
- key := moduleMetrics + ":" + dst + ":throughput"
+ key := dkm.GetKeyRoot(testModuleNamespace) + metricsKey + dst + ":throughput"
throughputStats := make(map[string]interface{})
throughputStats[src] = throughput
err := rc.SetEntry(key, throughputStats)
@@ -455,6 +470,7 @@ func validateNetCharUpdate(updatedNetCharList []FlowNetChar, src string, dst str
flowNetChar.MyNetChar.Jitter == jitter &&
flowNetChar.MyNetChar.PacketLoss == packetloss &&
flowNetChar.MyNetChar.Throughput == throughput {
+
found = true
break
}
diff --git a/go-packages/meep-net-char-mgr/go.mod b/go-packages/meep-net-char-mgr/go.mod
index 47baee70a9d1854182a3a1ca4dd0cba3a75dd4c5..47480208e5ccdf56926be0f7619e4d032a4aa3f8 100644
--- a/go-packages/meep-net-char-mgr/go.mod
+++ b/go-packages/meep-net-char-mgr/go.mod
@@ -3,15 +3,19 @@ module github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-net-char
go 1.12
require (
- github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis v0.0.0
)
replace (
- github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model => ../../go-packages/meep-ctrl-engine-model
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr => ../../go-packages/meep-data-key-mgr
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model => ../../go-packages/meep-data-model
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger => ../../go-packages/meep-logger
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model => ../../go-packages/meep-model
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq => ../../go-packages/meep-mq
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis => ../../go-packages/meep-redis
)
diff --git a/go-packages/meep-net-char-mgr/go.sum b/go-packages/meep-net-char-mgr/go.sum
index c326c142e2393dbaa1940ce1f8564a3ffd03df44..89fd570b14125a975453625735aecd0b3ba47419 100644
--- a/go-packages/meep-net-char-mgr/go.sum
+++ b/go-packages/meep-net-char-mgr/go.sum
@@ -1,55 +1,35 @@
-github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db h1:Zkf5kwhxdW0xV7WM/crqIcOP5LCFGnAmumWSFAewJ74=
github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db/go.mod h1:RU+6d0CNIRSp6yo1mXLIIrnFa/3LHhvcDVLVJyovptM=
github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351 h1:1u1XrfCBnY+GijnyU6O1k4odp5TnqZQTsp5v7+n/E4Y=
github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351/go.mod h1:HxwfbuElTuGf+/uKZfjJrCnv0BmmpkPJDI7gBwj1KkM=
github.com/RyanCarrier/dijkstra v0.0.0-20190726134004-b51cadb5ae52 h1:trnwuu/Q8T59kgRjXcSDBODnyZP9wes+bnLn0lx4PgM=
github.com/RyanCarrier/dijkstra v0.0.0-20190726134004-b51cadb5ae52/go.mod h1:DdR6ymcLl8+sN/XOVNjnYO1NDYfgHskGjreZUDuQCTY=
-github.com/RyanCarrier/dijkstra-1 v0.0.0-20170512020943-0e5801a26345 h1:fgSpoKViTSqRb4hjDNj10ig5wUvO0CayCzFdLf6fuRM=
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/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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/go-redis/redis v6.15.2+incompatible h1:9SpNVG76gr6InJGxoZ6IuuxaCOQwDAhzyXg+Bs+0Sb4=
github.com/go-redis/redis v6.15.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
-github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
-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=
github.com/mattomatic/dijkstra v0.0.0-20130617153013-6f6d134eb237/go.mod h1:UOnLAUmVG5paym8pD3C4B9BQylUDC2vXFJJpT7JrlEA=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo=
github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME=
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-golang.org/x/net v0.0.0-20180906233101-161cd47e91fd h1:nTDtHvHSdCn1m6ITfMRqtOd/9+7a3s8RBNOZ3eYZzJA=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e h1:o3PsSEY8E4eXWkXrIP9YJALUkVZqzHJT5DOasTyn8Vs=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
-gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/go-packages/meep-net-char-mgr/net-char-mgr.go b/go-packages/meep-net-char-mgr/net-char-mgr.go
index 566e2511912e888b70aa785629b68601838936bc..034fc79d8c41add14422ee09de860346ce859e92 100644
--- a/go-packages/meep-net-char-mgr/net-char-mgr.go
+++ b/go-packages/meep-net-char-mgr/net-char-mgr.go
@@ -22,8 +22,10 @@ import (
"sync"
"time"
+ dkm "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr"
log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
mod "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model"
+ mq "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq"
redis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis"
)
@@ -31,10 +33,9 @@ const netCharControlDb = 0
const defaultTickerPeriod int = 500
const NetCharControls string = "net-char-controls"
const NetCharControlChannel string = NetCharControls
-const moduleName string = "meep-net-char"
// Callback function types
-type NetCharUpdateCb func(string, string, float64, float64, float64, float64)
+type NetCharUpdateCb func(string, string, float64, float64, float64, string, float64)
type UpdateCompleteCb func()
// NetChar Interface
@@ -54,10 +55,21 @@ type NetCharAlgo interface {
// NetChar
type NetChar struct {
- Latency float64
- Jitter float64
- PacketLoss float64
- Throughput float64
+ Latency float64
+ Jitter float64
+ PacketLoss float64
+ Throughput float64
+ Distribution string
+}
+
+// NetChar
+type ElemNetChar struct {
+ Latency float64
+ Jitter float64
+ Distribution string
+ PacketLoss float64
+ ThroughputUl float64
+ ThroughputDl float64
}
// FlowNetChar
@@ -77,19 +89,23 @@ type NetCharConfig struct {
// NetCharManager Object
type NetCharManager struct {
name string
+ namespace string
+ baseKey string
isStarted bool
ticker *time.Ticker
rc *redis.Connector
mutex sync.Mutex
config NetCharConfig
+ mqLocal *mq.MsgQueue
activeModel *mod.Model
netCharUpdateCb NetCharUpdateCb
updateCompleteCb UpdateCompleteCb
algo NetCharAlgo
+ handlerId int
}
// NewNetChar - Create, Initialize and connect
-func NewNetChar(name string, redisAddr string) (*NetCharManager, error) {
+func NewNetChar(name string, namespace string, redisAddr string) (*NetCharManager, error) {
// Create new instance & set default config
var err error
var ncm NetCharManager
@@ -99,18 +115,35 @@ func NewNetChar(name string, redisAddr string) (*NetCharManager, error) {
return nil, err
}
ncm.name = name
+ ncm.namespace = namespace
+ ncm.baseKey = dkm.GetKeyRoot(namespace)
ncm.isStarted = false
ncm.config.RecalculationPeriod = defaultTickerPeriod
+ // Create message queue
+ ncm.mqLocal, err = mq.NewMsgQueue(mq.GetLocalName(namespace), name, namespace, redisAddr)
+ if err != nil {
+ log.Error("Failed to create Message Queue with error: ", err)
+ return nil, err
+ }
+ log.Info("Message Queue created")
+
// Create new NetCharAlgo
- ncm.algo, err = NewSegmentAlgorithm(redisAddr)
+ ncm.algo, err = NewSegmentAlgorithm(ncm.name, ncm.namespace, redisAddr)
if err != nil {
log.Error("Failed to create NetCharAlgo with error: ", err)
return nil, err
}
// Create new Model
- ncm.activeModel, err = mod.NewModel(redisAddr, moduleName, "activeScenario")
+ modelCfg := mod.ModelCfg{
+ Name: "activeScenario",
+ Namespace: ncm.namespace,
+ Module: name,
+ UpdateCb: nil,
+ DbAddr: redisAddr,
+ }
+ ncm.activeModel, err = mod.NewModel(modelCfg)
if err != nil {
log.Error("Failed to create model: ", err.Error())
return nil, err
@@ -124,10 +157,11 @@ func NewNetChar(name string, redisAddr string) (*NetCharManager, error) {
}
log.Info("Connected to Control Listener redis DB")
- // Listen for Model updates
- err = ncm.activeModel.Listen(ncm.eventHandler)
+ // Register Message Queue handler
+ handler := mq.MsgHandler{Handler: ncm.msgHandler, UserData: nil}
+ ncm.handlerId, err = ncm.mqLocal.RegisterHandler(handler)
if err != nil {
- log.Error("Failed to listen for model updates: ", err.Error())
+ log.Error("Failed to listen for sandbox updates: ", err.Error())
return nil, err
}
@@ -192,6 +226,23 @@ func (ncm *NetCharManager) IsRunning() bool {
return ncm.isStarted
}
+// Message Queue handler
+func (ncm *NetCharManager) msgHandler(msg *mq.Msg, userData interface{}) {
+ switch msg.Message {
+ case mq.MsgScenarioActivate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ ncm.processActiveScenarioUpdate()
+ case mq.MsgScenarioUpdate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ ncm.processActiveScenarioUpdate()
+ case mq.MsgScenarioTerminate:
+ log.Debug("RX MSG: ", mq.PrintMsg(msg))
+ ncm.processActiveScenarioUpdate()
+ default:
+ log.Trace("Ignoring unsupported message: ", mq.PrintMsg(msg))
+ }
+}
+
// eventHandler - Events received and processed by the registered channels
func (ncm *NetCharManager) eventHandler(channel string, payload string) {
// Handle Message according to Rx Channel
@@ -199,9 +250,6 @@ func (ncm *NetCharManager) eventHandler(channel string, payload string) {
case NetCharControlChannel:
log.Debug("Event received on channel: ", channel, " payload: ", payload)
ncm.updateControls()
- case mod.ActiveScenarioEvents:
- log.Debug("Event received on channel: ", channel, " payload: ", payload)
- ncm.processActiveScenarioUpdate()
default:
log.Warn("Unsupported channel")
}
@@ -209,7 +257,12 @@ func (ncm *NetCharManager) eventHandler(channel string, payload string) {
// processActiveScenarioUpdate
func (ncm *NetCharManager) processActiveScenarioUpdate() {
+ // Sync with active scenario store
+ ncm.activeModel.UpdateScenario()
+
ncm.mutex.Lock()
+ defer ncm.mutex.Unlock()
+
if ncm.isStarted {
// Process updated scenario using algorithm
err := ncm.algo.ProcessScenario(ncm.activeModel)
@@ -222,7 +275,6 @@ func (ncm *NetCharManager) processActiveScenarioUpdate() {
// Recalculate network characteristics
ncm.updateNetChars()
}
- ncm.mutex.Unlock()
}
// updateNetChars
@@ -234,7 +286,7 @@ func (ncm *NetCharManager) updateNetChars() {
if len(updatedNetCharList) != 0 {
for _, flowNetChar := range updatedNetCharList {
if ncm.netCharUpdateCb != nil {
- ncm.netCharUpdateCb(flowNetChar.DstElemName, flowNetChar.SrcElemName, flowNetChar.MyNetChar.Throughput, flowNetChar.MyNetChar.Latency, flowNetChar.MyNetChar.Jitter, flowNetChar.MyNetChar.PacketLoss)
+ ncm.netCharUpdateCb(flowNetChar.DstElemName, flowNetChar.SrcElemName, flowNetChar.MyNetChar.Throughput, flowNetChar.MyNetChar.Latency, flowNetChar.MyNetChar.Jitter, flowNetChar.MyNetChar.Distribution /*flowNetChar.MyNetChar.Distribution,*/, flowNetChar.MyNetChar.PacketLoss)
}
}
if ncm.updateCompleteCb != nil {
@@ -247,7 +299,7 @@ func (ncm *NetCharManager) updateNetChars() {
func (ncm *NetCharManager) updateControls() {
ncm.mutex.Lock()
var controls = make(map[string]interface{})
- keyName := NetCharControls
+ keyName := ncm.baseKey + NetCharControls
err := ncm.rc.ForEachEntry(keyName, ncm.getControlsEntryHandler, controls)
if err != nil {
log.Error("Failed to get entries: ", err)
diff --git a/go-packages/meep-net-char-mgr/net-char-mgr_test.go b/go-packages/meep-net-char-mgr/net-char-mgr_test.go
index 2e05a97937b1490b6d5857c250a381925ed0057d..1694da070a1062e137ad83669a907cc0a19e488c 100644
--- a/go-packages/meep-net-char-mgr/net-char-mgr_test.go
+++ b/go-packages/meep-net-char-mgr/net-char-mgr_test.go
@@ -42,15 +42,15 @@ func TestNetCharBasic(t *testing.T) {
var netCharMgr NetCharMgr
var err error
- netCharMgr, err = NewNetChar("test", netCharMgrRedisAddr)
+ netCharMgr, err = NewNetChar("test", "default", netCharMgrRedisAddr)
if err != nil {
- t.Errorf("Failed to create a NetChar object.")
+ t.Fatalf("Failed to create a NetChar object.")
return
}
fmt.Println("Verify NetCharMgr not running")
if netCharMgr.IsRunning() {
- t.Errorf("NetCharMgr should not be running")
+ t.Fatalf("NetCharMgr should not be running")
}
fmt.Println("Register callback functions")
@@ -59,10 +59,10 @@ func TestNetCharBasic(t *testing.T) {
fmt.Println("Start NetCharMgr")
err = netCharMgr.Start()
if err != nil {
- t.Errorf("Error starting NetCharMgr")
+ t.Fatalf("Error starting NetCharMgr")
}
if !netCharMgr.IsRunning() {
- t.Errorf("NetChar not running")
+ t.Fatalf("NetChar not running")
}
fmt.Println("Run NetChar for 100 ms")
@@ -71,6 +71,6 @@ func TestNetCharBasic(t *testing.T) {
fmt.Println("Stop NetCharMgr")
netCharMgr.Stop()
if netCharMgr.IsRunning() {
- t.Errorf("NetChar should not be running")
+ t.Fatalf("NetChar should not be running")
}
}
diff --git a/go-packages/meep-postgis/db.go b/go-packages/meep-postgis/db.go
new file mode 100644
index 0000000000000000000000000000000000000000..e1dbdbad024e2c2e05c500488a3e69fb1532c2cb
--- /dev/null
+++ b/go-packages/meep-postgis/db.go
@@ -0,0 +1,1286 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package postgisdb
+
+import (
+ "database/sql"
+ "errors"
+ "strings"
+
+ log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
+
+ "github.com/lib/pq"
+ _ "github.com/lib/pq"
+)
+
+// DB Config
+const (
+ DbHost = "meep-postgis.default.svc.cluster.local"
+ DbPort = "5432"
+ DbUser = ""
+ DbPassword = ""
+ DbDefault = "postgres"
+ DbMaxRetryCount int = 2
+)
+
+const (
+ AllAssets = "ALL"
+)
+
+// Path modes
+const (
+ PathModeLoop = "LOOP"
+ PathModeReverse = "REVERSE"
+)
+
+// DB Table Names
+const (
+ UeTable = "ue"
+ PoaTable = "poa"
+ ComputeTable = "compute"
+)
+
+// Asset Types
+const (
+ TypeUe = "UE"
+ TypePoa = "POA"
+ TypeCompute = "COMPUTE"
+)
+
+// POA Types
+const (
+ PoaTypeGeneric = "POA"
+ PoaTypeCell4g = "POA-CELL"
+ PoaTypeCell5g = "POA-CELL-5G"
+ PoaTypeWifi = "POA-WIFI"
+)
+
+type Ue struct {
+ Id string
+ Name string
+ Position string
+ Path string
+ PathMode string
+ PathVelocity float32
+ PathLength float32
+ PathIncrement float32
+ PathFraction float32
+ Poa string
+ PoaDistance float32
+ PoaInRange []string
+}
+
+type Poa struct {
+ Id string
+ Name string
+ SubType string
+ Position string
+ Radius float32
+}
+
+type Compute struct {
+ Id string
+ Name string
+ SubType string
+ Position string
+}
+
+type PoaInfo struct {
+ Distance float32
+ SubType string
+ InRange bool
+}
+
+type UePoaInfo struct {
+ PoaInRange []string
+ PoaInfoMap map[string]*PoaInfo
+ CurrentPoa string
+}
+
+// Connector - Implements a Postgis SQL DB connector
+type Connector struct {
+ name string
+ namespace string
+ dbName string
+ db *sql.DB
+ connected bool
+ updateCb func(string, string)
+}
+
+// NewConnector - Creates and initializes a Postgis connector
+func NewConnector(name, namespace, user, pwd, host, port string) (pc *Connector, err error) {
+ if name == "" {
+ err = errors.New("Missing connector name")
+ return nil, err
+ }
+
+ // Create new connector
+ pc = new(Connector)
+ pc.name = name
+ if namespace != "" {
+ pc.namespace = namespace
+ } else {
+ pc.namespace = "default"
+ }
+
+ // Connect to Postgis DB
+ for retry := 0; retry <= DbMaxRetryCount; retry++ {
+ pc.db, err = pc.connectDB("", user, pwd, host, port)
+ if err == nil {
+ break
+ }
+ }
+ if err != nil {
+ log.Error("Failed to connect to postgis DB with err: ", err.Error())
+ return nil, err
+ }
+ defer pc.db.Close()
+
+ // Create sandbox DB if it does not exist
+ // Use format: '
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+
+## Overview
+This API client was generated by the [swagger-codegen](https://github.com/swagger-api/swagger-codegen) project. By using the [swagger-spec](https://github.com/swagger-api/swagger-spec) from a remote server, you can easily generate an API client.
+
+- API version: 1.1.1
+- Package version: 1.0.0
+- Build package: io.swagger.codegen.languages.GoClientCodegen
+
+## Installation
+Put the package under your project folder and add the following in import:
+```golang
+import "./client"
+```
+
+## Documentation for API Endpoints
+
+All URIs are relative to *http://localhost/rni/v1*
+
+Class | Method | HTTP request | Description
+------------ | ------------- | ------------- | -------------
+*DefaultApi* | [**CaReConfSubscriptionSubscriptionsGET**](docs/DefaultApi.md#careconfsubscriptionsubscriptionsget) | **Get** /subscriptions/ca_reconf/{subscriptionId} |
+*DefaultApi* | [**CaReConfSubscriptionSubscriptionsPOST**](docs/DefaultApi.md#careconfsubscriptionsubscriptionspost) | **Post** /subscriptions/ca_reconf |
+*DefaultApi* | [**CaReConfSubscriptionSubscriptionsPUT**](docs/DefaultApi.md#careconfsubscriptionsubscriptionsput) | **Put** /subscriptions/ca_reconf/{subscriptionId} |
+*DefaultApi* | [**CaReConfSubscriptionsSubscrIdDELETE**](docs/DefaultApi.md#careconfsubscriptionssubscriddelete) | **Delete** /subscriptions/ca_reconf/{subscriptionId} |
+*DefaultApi* | [**CellChangeSubscriptionsGET**](docs/DefaultApi.md#cellchangesubscriptionsget) | **Get** /subscriptions/cell_change/{subscriptionId} |
+*DefaultApi* | [**CellChangeSubscriptionsPOST**](docs/DefaultApi.md#cellchangesubscriptionspost) | **Post** /subscriptions/cell_change |
+*DefaultApi* | [**CellChangeSubscriptionsPUT**](docs/DefaultApi.md#cellchangesubscriptionsput) | **Put** /subscriptions/cell_change/{subscriptionId} |
+*DefaultApi* | [**CellChangeSubscriptionsSubscrIdDELETE**](docs/DefaultApi.md#cellchangesubscriptionssubscriddelete) | **Delete** /subscriptions/cell_change/{subscriptionId} |
+*DefaultApi* | [**MeasRepUeReportSubscriptionsPUT**](docs/DefaultApi.md#measrepuereportsubscriptionsput) | **Put** /subscriptions/meas_rep_ue/{subscriptionId} |
+*DefaultApi* | [**MeasRepUeSubscriptionsGET**](docs/DefaultApi.md#measrepuesubscriptionsget) | **Get** /subscriptions/meas_rep_ue/{subscriptionId} |
+*DefaultApi* | [**MeasRepUeSubscriptionsPOST**](docs/DefaultApi.md#measrepuesubscriptionspost) | **Post** /subscriptions/meas_rep_ue |
+*DefaultApi* | [**MeasRepUeSubscriptionsSubscrIdDELETE**](docs/DefaultApi.md#measrepuesubscriptionssubscriddelete) | **Delete** /subscriptions/meas_rep_ue/{subscriptionId} |
+*DefaultApi* | [**MeasTaSubscriptionsGET**](docs/DefaultApi.md#meastasubscriptionsget) | **Get** /subscriptions/ta/{subscriptionId} |
+*DefaultApi* | [**MeasTaSubscriptionsPOST**](docs/DefaultApi.md#meastasubscriptionspost) | **Post** /subscriptions/ta |
+*DefaultApi* | [**MeasTaSubscriptionsPUT**](docs/DefaultApi.md#meastasubscriptionsput) | **Put** /subscriptions/ta/{subscriptionId} |
+*DefaultApi* | [**MeasTaSubscriptionsSubscrIdDELETE**](docs/DefaultApi.md#meastasubscriptionssubscriddelete) | **Delete** /subscriptions/ta/{subscriptionId} |
+*DefaultApi* | [**PlmnInfoGET**](docs/DefaultApi.md#plmninfoget) | **Get** /queries/plmn_info |
+*DefaultApi* | [**RabEstSubscriptionSubscriptionsGET**](docs/DefaultApi.md#rabestsubscriptionsubscriptionsget) | **Get** /subscriptions/rab_est/{subscriptionId} |
+*DefaultApi* | [**RabEstSubscriptionSubscriptionsPOST**](docs/DefaultApi.md#rabestsubscriptionsubscriptionspost) | **Post** /subscriptions/rab_est |
+*DefaultApi* | [**RabEstSubscriptionSubscriptionsPUT**](docs/DefaultApi.md#rabestsubscriptionsubscriptionsput) | **Put** /subscriptions/rab_est/{subscriptionId} |
+*DefaultApi* | [**RabEstSubscriptionsSubscrIdDELETE**](docs/DefaultApi.md#rabestsubscriptionssubscriddelete) | **Delete** /subscriptions/rab_est/{subscriptionId} |
+*DefaultApi* | [**RabInfoGET**](docs/DefaultApi.md#rabinfoget) | **Get** /queries/rab_info |
+*DefaultApi* | [**RabModSubscriptionSubscriptionsGET**](docs/DefaultApi.md#rabmodsubscriptionsubscriptionsget) | **Get** /subscriptions/rab_mod/{subscriptionId} |
+*DefaultApi* | [**RabModSubscriptionSubscriptionsPOST**](docs/DefaultApi.md#rabmodsubscriptionsubscriptionspost) | **Post** /subscriptions/rab_mod |
+*DefaultApi* | [**RabModSubscriptionSubscriptionsPUT**](docs/DefaultApi.md#rabmodsubscriptionsubscriptionsput) | **Put** /subscriptions/rab_mod/{subscriptionId} |
+*DefaultApi* | [**RabModSubscriptionsSubscrIdDELETE**](docs/DefaultApi.md#rabmodsubscriptionssubscriddelete) | **Delete** /subscriptions/rab_mod/{subscriptionId} |
+*DefaultApi* | [**RabRelSubscriptionSubscriptionsGET**](docs/DefaultApi.md#rabrelsubscriptionsubscriptionsget) | **Get** /subscriptions/rab_rel/{subscriptionId} |
+*DefaultApi* | [**RabRelSubscriptionSubscriptionsPOST**](docs/DefaultApi.md#rabrelsubscriptionsubscriptionspost) | **Post** /subscriptions/rab_rel |
+*DefaultApi* | [**RabRelSubscriptionSubscriptionsPUT**](docs/DefaultApi.md#rabrelsubscriptionsubscriptionsput) | **Put** /subscriptions/rab_rel/{subscriptionId} |
+*DefaultApi* | [**RabRelSubscriptionsSubscrIdDELETE**](docs/DefaultApi.md#rabrelsubscriptionssubscriddelete) | **Delete** /subscriptions/rab_rel/{subscriptionId} |
+*DefaultApi* | [**S1BearerInfoGET**](docs/DefaultApi.md#s1bearerinfoget) | **Get** /queries/s1_bearer_info |
+*DefaultApi* | [**S1BearerSubscriptionSubscriptionsGET**](docs/DefaultApi.md#s1bearersubscriptionsubscriptionsget) | **Get** /subscriptions/s1_bearer/{subscriptionId} |
+*DefaultApi* | [**S1BearerSubscriptionSubscriptionsPOST**](docs/DefaultApi.md#s1bearersubscriptionsubscriptionspost) | **Post** /subscriptions/s1_bearer |
+*DefaultApi* | [**S1BearerSubscriptionSubscriptionsPUT**](docs/DefaultApi.md#s1bearersubscriptionsubscriptionsput) | **Put** /subscriptions/s1_bearer/{subscriptionId} |
+*DefaultApi* | [**S1BearerSubscriptionsSubscrIdDELETE**](docs/DefaultApi.md#s1bearersubscriptionssubscriddelete) | **Delete** /subscriptions/s1_bearer/{subscriptionId} |
+*DefaultApi* | [**SubscriptionLinkListSubscriptionsCcGET**](docs/DefaultApi.md#subscriptionlinklistsubscriptionsccget) | **Get** /subscriptions/cell_change |
+*DefaultApi* | [**SubscriptionLinkListSubscriptionsCrGET**](docs/DefaultApi.md#subscriptionlinklistsubscriptionscrget) | **Get** /subscriptions/ca_reconf |
+*DefaultApi* | [**SubscriptionLinkListSubscriptionsGET**](docs/DefaultApi.md#subscriptionlinklistsubscriptionsget) | **Get** /subscriptions/ |
+*DefaultApi* | [**SubscriptionLinkListSubscriptionsMrGET**](docs/DefaultApi.md#subscriptionlinklistsubscriptionsmrget) | **Get** /subscriptions/meas_rep_ue |
+*DefaultApi* | [**SubscriptionLinkListSubscriptionsReGET**](docs/DefaultApi.md#subscriptionlinklistsubscriptionsreget) | **Get** /subscriptions/rab_est |
+*DefaultApi* | [**SubscriptionLinkListSubscriptionsRmGET**](docs/DefaultApi.md#subscriptionlinklistsubscriptionsrmget) | **Get** /subscriptions/rab_mod |
+*DefaultApi* | [**SubscriptionLinkListSubscriptionsRrGET**](docs/DefaultApi.md#subscriptionlinklistsubscriptionsrrget) | **Get** /subscriptions/rab_rel |
+*DefaultApi* | [**SubscriptionLinkListSubscriptionsS1GET**](docs/DefaultApi.md#subscriptionlinklistsubscriptionss1get) | **Get** /subscriptions/s1_bearer |
+*DefaultApi* | [**SubscriptionLinkListSubscriptionsTaGET**](docs/DefaultApi.md#subscriptionlinklistsubscriptionstaget) | **Get** /subscriptions/ta |
+
+
+## Documentation For Models
+
+ - [AssociateId](docs/AssociateId.md)
+ - [CaReConfSubscription](docs/CaReConfSubscription.md)
+ - [CaReConfSubscription1](docs/CaReConfSubscription1.md)
+ - [CaReConfSubscriptionPost](docs/CaReConfSubscriptionPost.md)
+ - [CaReConfSubscriptionPost1](docs/CaReConfSubscriptionPost1.md)
+ - [CellChangeSubscription](docs/CellChangeSubscription.md)
+ - [CellChangeSubscription1](docs/CellChangeSubscription1.md)
+ - [CellChangeSubscriptionPost](docs/CellChangeSubscriptionPost.md)
+ - [CellChangeSubscriptionPost1](docs/CellChangeSubscriptionPost1.md)
+ - [CellUserInfo](docs/CellUserInfo.md)
+ - [Ecgi](docs/Ecgi.md)
+ - [ErabQosParameters](docs/ErabQosParameters.md)
+ - [ErabQosParametersQci](docs/ErabQosParametersQci.md)
+ - [EventType](docs/EventType.md)
+ - [FilterCriteriaAssoc](docs/FilterCriteriaAssoc.md)
+ - [FilterCriteriaAssocHo](docs/FilterCriteriaAssocHo.md)
+ - [FilterCriteriaAssocQci](docs/FilterCriteriaAssocQci.md)
+ - [FilterCriteriaAssocTri](docs/FilterCriteriaAssocTri.md)
+ - [HoStatus](docs/HoStatus.md)
+ - [InlineResponse200](docs/InlineResponse200.md)
+ - [InlineResponse2001](docs/InlineResponse2001.md)
+ - [InlineResponse20010](docs/InlineResponse20010.md)
+ - [InlineResponse2002](docs/InlineResponse2002.md)
+ - [InlineResponse2003](docs/InlineResponse2003.md)
+ - [InlineResponse2004](docs/InlineResponse2004.md)
+ - [InlineResponse2005](docs/InlineResponse2005.md)
+ - [InlineResponse2006](docs/InlineResponse2006.md)
+ - [InlineResponse2007](docs/InlineResponse2007.md)
+ - [InlineResponse2008](docs/InlineResponse2008.md)
+ - [InlineResponse2009](docs/InlineResponse2009.md)
+ - [InlineResponse201](docs/InlineResponse201.md)
+ - [InlineResponse2011](docs/InlineResponse2011.md)
+ - [InlineResponse2012](docs/InlineResponse2012.md)
+ - [InlineResponse2013](docs/InlineResponse2013.md)
+ - [InlineResponse2014](docs/InlineResponse2014.md)
+ - [InlineResponse2015](docs/InlineResponse2015.md)
+ - [InlineResponse2016](docs/InlineResponse2016.md)
+ - [InlineResponse2017](docs/InlineResponse2017.md)
+ - [InlineResponse400](docs/InlineResponse400.md)
+ - [InlineResponse403](docs/InlineResponse403.md)
+ - [Link](docs/Link.md)
+ - [MeasRepUeSubscription](docs/MeasRepUeSubscription.md)
+ - [MeasRepUeSubscription1](docs/MeasRepUeSubscription1.md)
+ - [MeasRepUeSubscriptionPost](docs/MeasRepUeSubscriptionPost.md)
+ - [MeasRepUeSubscriptionPost1](docs/MeasRepUeSubscriptionPost1.md)
+ - [MeasTaSubscription](docs/MeasTaSubscription.md)
+ - [MeasTaSubscription1](docs/MeasTaSubscription1.md)
+ - [MeasTaSubscriptionPost](docs/MeasTaSubscriptionPost.md)
+ - [MeasTaSubscriptionPost1](docs/MeasTaSubscriptionPost1.md)
+ - [Plmn](docs/Plmn.md)
+ - [PlmnInfo](docs/PlmnInfo.md)
+ - [ProblemDetails](docs/ProblemDetails.md)
+ - [QosInformation](docs/QosInformation.md)
+ - [RabEstSubscription](docs/RabEstSubscription.md)
+ - [RabEstSubscription1](docs/RabEstSubscription1.md)
+ - [RabEstSubscriptionPost](docs/RabEstSubscriptionPost.md)
+ - [RabEstSubscriptionPost1](docs/RabEstSubscriptionPost1.md)
+ - [RabInfo](docs/RabInfo.md)
+ - [RabModSubscription](docs/RabModSubscription.md)
+ - [RabModSubscription1](docs/RabModSubscription1.md)
+ - [RabModSubscriptionPost](docs/RabModSubscriptionPost.md)
+ - [RabModSubscriptionPost1](docs/RabModSubscriptionPost1.md)
+ - [RabRelSubscription](docs/RabRelSubscription.md)
+ - [RabRelSubscription1](docs/RabRelSubscription1.md)
+ - [RabRelSubscriptionPost](docs/RabRelSubscriptionPost.md)
+ - [RabRelSubscriptionPost1](docs/RabRelSubscriptionPost1.md)
+ - [S1BearerInfo](docs/S1BearerInfo.md)
+ - [S1BearerInfoDetailed](docs/S1BearerInfoDetailed.md)
+ - [S1BearerSubscription](docs/S1BearerSubscription.md)
+ - [S1BearerSubscription1](docs/S1BearerSubscription1.md)
+ - [S1BearerSubscriptionCriteria](docs/S1BearerSubscriptionCriteria.md)
+ - [S1BearerSubscriptionPost](docs/S1BearerSubscriptionPost.md)
+ - [S1BearerSubscriptionPost1](docs/S1BearerSubscriptionPost1.md)
+ - [S1EnbInfo](docs/S1EnbInfo.md)
+ - [S1UeInfo](docs/S1UeInfo.md)
+ - [SGwInfo](docs/SGwInfo.md)
+ - [Subscription](docs/Subscription.md)
+ - [SubscriptionLinkList](docs/SubscriptionLinkList.md)
+ - [SubscriptionType](docs/SubscriptionType.md)
+ - [TempUeId](docs/TempUeId.md)
+ - [TimeStamp](docs/TimeStamp.md)
+ - [Trigger](docs/Trigger.md)
+ - [UeInfo](docs/UeInfo.md)
+
+
+## Documentation For Authorization
+
+## OauthSecurity
+- **Type**: OAuth
+- **Flow**: application
+- **Authorization URL**:
+- **Scopes**:
+ - **all**: Single oauth2 scope for API
+
+Example
+```golang
+auth := context.WithValue(context.Background(), sw.ContextAccessToken, "ACCESSTOKENSTRING")
+r, err := client.Service.Operation(auth, args)
+```
+
+Or via OAuth2 module to automatically refresh tokens and perform user authentication.
+```golang
+import "golang.org/x/oauth2"
+
+/* Perform OAuth2 round trip request and obtain a token */
+
+tokenSource := oauth2cfg.TokenSource(createContext(httpClient), &token)
+auth := context.WithValue(oauth2.NoContext, sw.ContextOAuth2, tokenSource)
+r, err := client.Service.Operation(auth, args)
+```
+
+## Author
+
+
+
diff --git a/go-packages/meep-rnis-client/api/swagger.yaml b/go-packages/meep-rnis-client/api/swagger.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..3700c3445785e9763f8ae8309ac9d398b0649014
--- /dev/null
+++ b/go-packages/meep-rnis-client/api/swagger.yaml
@@ -0,0 +1,4173 @@
+---
+swagger: "2.0"
+info:
+ description: "Radio Network Information Service is AdvantEDGE's implementation of\
+ \ [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)\
+ \
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)\
+ \
Edge Service used by edge applications that want to get\
+ \ information about radio conditions in the network
API details\
+ \ available at _your-AdvantEDGE-ip-address/api_"
+ version: "1.1.1"
+ title: "AdvantEDGE Radio Network Information Service REST API"
+ license:
+ name: "Apache 2.0"
+ url: "https://github.com/InterDigitalInc/AdvantEDGE/blob/master/LICENSE"
+basePath: "/rni/v1"
+schemes:
+- "http"
+- "https"
+consumes:
+- "application/json"
+produces:
+- "application/json"
+security:
+- OauthSecurity:
+ - "all"
+paths:
+ /queries/rab_info:
+ get:
+ description: "Gets information on existing E-RABs that are associated with a\
+ \ specific mobile edge application instance"
+ operationId: "rab_infoGET"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "app_ins_id"
+ in: "query"
+ description: "Application instance identifier"
+ required: false
+ type: "string"
+ x-exportParamName: "AppInsId"
+ x-optionalDataType: "String"
+ - name: "cell_id"
+ in: "query"
+ description: "E-UTRAN Cell Identity as a bit string (size (28)), as defined\
+ \ in ETSI TS 136 413"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "CellId"
+ - name: "ue_ipv4_address"
+ in: "query"
+ description: "Comma separated list of IE IPv4 addresses as defined for the\
+ \ type for AssociateId"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "UeIpv4Address"
+ - name: "ue_ipv6_address"
+ in: "query"
+ description: "Comma separated list of IE IPv6 addresses as defined for the\
+ \ type for AssociateId"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "UeIpv6Address"
+ - name: "nated_ip_address"
+ in: "query"
+ description: "Comma separated list of IE NATed IP addresses as defined for\
+ \ the type for AssociateId"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "NatedIpAddress"
+ - name: "gtp_teid"
+ in: "query"
+ description: "Comma separated list of GTP TEID addresses as defined for the\
+ \ type for AssociateId"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "GtpTeid"
+ - name: "erab_id"
+ in: "query"
+ description: "E-RAB identifier"
+ required: false
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "ErabId"
+ x-optionalDataType: "Int32"
+ - name: "qci"
+ in: "query"
+ description: "QoS Class Identifier as defined in ETSI TS 123 401"
+ required: false
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "Qci"
+ x-optionalDataType: "Int32"
+ - name: "erab_mbr_dl"
+ in: "query"
+ description: "Maximum downlink E-RAB Bit Rate as defined in ETSI TS 123 401"
+ required: false
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "ErabMbrDl"
+ x-optionalDataType: "Int32"
+ - name: "erab_mbr_ul"
+ in: "query"
+ description: "Maximum uplink E-RAB Bit Rate as defined in ETSI TS 123 401"
+ required: false
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "ErabMbrUl"
+ x-optionalDataType: "Int32"
+ - name: "erab_gbr_dl"
+ in: "query"
+ description: "Guaranteed downlink E-RAB Bit Rate as defined in ETSI TS 123\
+ \ 401"
+ required: false
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "ErabGbrDl"
+ x-optionalDataType: "Int32"
+ - name: "erab_gbr_ul"
+ in: "query"
+ description: "Guaranteed uplink E-RAB Bit Rate as defined in ETSI TS 123 401"
+ required: false
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "ErabGbrUl"
+ x-optionalDataType: "Int32"
+ responses:
+ 200:
+ description: "Successful response to rab_info request"
+ examples:
+ application/json:
+ RabInfo:
+ timeStamp:
+ seconds: 1577836800
+ nanoSeconds: 0
+ appInId: "01"
+ requestId: "01"
+ cellUserInfo:
+ ecgi:
+ plmn:
+ mcc: "001"
+ mnc: "01"
+ cellId: "0x800000A"
+ ueInfo:
+ type: "1"
+ value: "192.0.2.0"
+ erabInfo:
+ erabId: 10
+ erabQosParameters:
+ qci: 7
+ qosInformation:
+ erabMbrDl: 10
+ erabMbrUl: 10
+ erabGbrDl: 10
+ erabGbrUl: 10
+ schema:
+ $ref: "#/definitions/inline_response_200"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ /queries/plmn_info:
+ get:
+ description: "Gets the information on Mobile Network(s) that are associated\
+ \ with a specific mobile edge application instance"
+ operationId: "plmn_infoGET"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "app_ins_id"
+ in: "query"
+ description: "Application instance identifier"
+ required: true
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "AppInsId"
+ responses:
+ 200:
+ description: "Successful response to plmn_info request"
+ examples:
+ application/json:
+ PlmnInfo:
+ timeStamp:
+ seconds: 1577836800
+ nanoSeconds: 0
+ appInId: "01"
+ ecgi:
+ plmn:
+ mcc: "001"
+ mnc: "01"
+ cellId: "0x800000A"
+ schema:
+ $ref: "#/definitions/inline_response_200_1"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ /queries/s1_bearer_info:
+ get:
+ description: "Gets information on existing E-RABs that are associated with a\
+ \ specific mobile edge application instance"
+ operationId: "s1_bearer_infoGET"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "temp_ue_id"
+ in: "query"
+ description: "The temporary identifier allocated for the specific UE as defined\
+ \ in ETSI TS 136 413"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "TempUeId"
+ - name: "ue_ipv4_address"
+ in: "query"
+ description: "Comma separated list of IE IPv4 addresses as defined for the\
+ \ type for AssociateId"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "UeIpv4Address"
+ - name: "ue_ipv6_address"
+ in: "query"
+ description: "Comma separated list of IE IPv6 addresses as defined for the\
+ \ type for AssociateId"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "UeIpv6Address"
+ - name: "nated_ip_address"
+ in: "query"
+ description: "Comma separated list of IE NATed IP addresses as defined for\
+ \ the type for AssociateId"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "NatedIpAddress"
+ - name: "gtp_teid"
+ in: "query"
+ description: "Comma separated list of GTP TEID addresses as defined for the\
+ \ type for AssociateId"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "GtpTeid"
+ - name: "cell_id"
+ in: "query"
+ description: "E-UTRAN Cell Identity as a bit string (size (28)), as defined\
+ \ in ETSI TS 136 413"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "CellId"
+ - name: "erab_id"
+ in: "query"
+ description: "E-RAB identifier"
+ required: false
+ type: "array"
+ items:
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "ErabId"
+ responses:
+ 200:
+ description: "Successful response to s1_bearer_info request"
+ examples:
+ application/json:
+ S1BearerInfo:
+ timeStamp:
+ seconds: 1577836800
+ nanoSeconds: 0
+ s1UeInfo:
+ - tempUeId:
+ mmec: "0"
+ mtmsi: "1234"
+ associateId:
+ - type: "1"
+ value: "192.0.2.0"
+ - type: "3"
+ value: "198.51.100.0"
+ ecgi:
+ plmn:
+ mcc: "001"
+ mnc: "01"
+ cellId: "0x800000A"
+ s1BearerInfoDetailed:
+ - erabId: 1
+ s1EnbInfo:
+ ipAddress: "192.0.2.0"
+ tunnelId: "1111"
+ sGwInfo:
+ ipAddress: "192.0.2.1"
+ tunnelId: "2222"
+ - tempUeId:
+ mmec: "0"
+ mtmsi: "1234"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ ecgi:
+ plmn:
+ mcc: "001"
+ mnc: "01"
+ cellId: "0x800000B"
+ s1BearerInfoDetailed:
+ - erabId: 2
+ s1EnbInfo:
+ ipAddress: "192.0.2.0"
+ tunnelId: "3333"
+ sGwInfo:
+ ipAddress: "192.0.2.1"
+ tunnelId: "4444"
+ schema:
+ $ref: "#/definitions/inline_response_200_2"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ /subscriptions/:
+ get:
+ description: "The GET method can be used to request information about the subscriptions\
+ \ for this requestor"
+ operationId: "SubscriptionLinkList_subscriptionsGET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters: []
+ responses:
+ 200:
+ description: "Response body contains the list of links to requestors subscriptions."
+ examples:
+ application/json:
+ SubscriptionLinkList:
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions"
+ subscription:
+ - href: "http://meAppClient.example.com/rni/v1/notifications/cell_change/77777"
+ subscriptionType: "CELL_CHANGE"
+ - href: "http://meAppClient.example.com/rni/v1/notifications/MeasTa/77777"
+ subscriptionType: "MEAS_TIMING_ADVANCE"
+ schema:
+ $ref: "#/definitions/inline_response_200_3"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ /subscriptions/cell_change:
+ get:
+ description: "The GET method can be used to request information about the cell_change\
+ \ subscriptions for this requestor"
+ operationId: "SubscriptionLinkList_subscriptions_cc_GET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters: []
+ responses:
+ 200:
+ description: "Response body contains the list of links to requestors cell_change\
+ \ subscriptions."
+ examples:
+ application/json:
+ SubscriptionLinkList:
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/cell_change"
+ subscription:
+ - href: "http://meAppClient.example.com/rni/v1/notifications/cell_change/77777"
+ subscriptionType: "CELL_CHANGE"
+ - href: "http://meAppClient.example.com/rni/v1/notifications/cell_change/77778"
+ subscriptionType: "CELL_CHANGE"
+ schema:
+ $ref: "#/definitions/inline_response_200_3"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ post:
+ description: "Creates a subscription to cell change notifications from Radio\
+ \ Network Information Service"
+ operationId: "CellChange_subscriptionsPOST"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - in: "body"
+ name: "CellChangeSubscriptionPost"
+ description: "Use to creates a subscription to cell change notifications based\
+ \ on the\n filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/CellChangeSubscriptionPost_1"
+ x-exportParamName: "CellChangeSubscriptionPost"
+ responses:
+ 201:
+ description: "Successful subscription to response to UE cell change notifications"
+ examples:
+ application/json:
+ CellChangeSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/cell_change/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/cell_change/sub123"
+ filterCriteria:
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ appInsId: "01"
+ trigger: 6
+ cellId: "0x800000B"
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_201"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 415:
+ description: "Unsupported Media Type"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ /subscriptions/cell_change/{subscriptionId}:
+ get:
+ description: "Get cell change subscription information"
+ operationId: "CellChange_subscriptionsGET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 200:
+ description: "Subscription information regarding cell change notifications"
+ examples:
+ application/json:
+ CellChangeSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/cell_change/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/cell_change/sub123"
+ filterCriteria:
+ appInsId: "01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ hoStatus: 3
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_200_4"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ put:
+ description: "Updates a subscription to cell change notifications from Radio\
+ \ Network Information Service"
+ operationId: "CellChange_subscriptionsPUT"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - in: "body"
+ name: "CellChangeSubscription"
+ description: "Use to creates a subscription to cell change notifications based\
+ \ on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/CellChangeSubscription_1"
+ x-exportParamName: "CellChangeSubscription"
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 200:
+ description: "Successful subscription to response to cell change notifications"
+ examples:
+ application/json:
+ CellChangeSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/cell_change/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/cell_change/sub123"
+ filterCriteria:
+ appInsId: "01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ hoStatus: 3
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/CellChangeSubscription_1"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 412:
+ description: "Precondition failed"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ delete:
+ description: "Method to delete a subscription"
+ operationId: "CellChange_subscriptionsSubscrIdDELETE"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 204:
+ description: "No Content"
+ x-swagger-router-controller: "Default"
+ /subscriptions/s1_bearer:
+ get:
+ description: "The GET method can be used to request information about the s1_bearer\
+ \ subscriptions for this requestor"
+ operationId: "SubscriptionLinkList_subscriptions_s1_GET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters: []
+ responses:
+ 200:
+ description: "Response body contains the list of links to requestors s1_bearer\
+ \ subscriptions."
+ examples:
+ application/json:
+ SubscriptionLinkList:
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/s1_bearer"
+ subscription:
+ - href: "http://meAppClient.example.com/rni/v1/notifications/s1_bearer/77777"
+ subscriptionType: "S1_BEARER"
+ - href: "http://meAppClient.example.com/rni/v1/notifications/s1_bearer/77778"
+ subscriptionType: "S1_BEARER"
+ schema:
+ $ref: "#/definitions/inline_response_200_3"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ post:
+ description: "Creates a subscription to S1 bearer notifications from Radio Network\
+ \ Information Service"
+ operationId: "S1BearerSubscription_subscriptionsPOST"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - in: "body"
+ name: "S1BearerSubscriptionPost"
+ description: "Use to creates a subscription to S1 Bearer notifications based\
+ \ on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/S1BearerSubscriptionPost_1"
+ x-exportParamName: "S1BearerSubscriptionPost"
+ responses:
+ 201:
+ description: "Successful subscription to response to S1 Bearer notifications"
+ examples:
+ application/json:
+ S1BearerSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/s1_bearer/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/s1_bearer/sub123"
+ eventType: 1
+ s1BearerSubscriptionCriteria:
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ erabId: 1
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_201_1"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 415:
+ description: "Unsupported Media Type"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ /subscriptions/s1_bearer/{subscriptionId}:
+ get:
+ description: "Gets a subscription to S1 bearer notifications from Radio Network\
+ \ Information Service"
+ operationId: "S1BearerSubscription_subscriptionsGET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 200:
+ description: "Successful subscription to response to S1 Bearer notifications"
+ examples:
+ application/json:
+ S1BearerSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/s1_bearer/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/s1_bearer/sub123"
+ eventType: 1
+ s1BearerSubscriptionCriteria:
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ erabId: 1
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_201_1"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ put:
+ description: "Updates a subscription to S1 bearer notifications from Radio Network\
+ \ Information Service"
+ operationId: "S1BearerSubscription_subscriptionsPUT"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ - in: "body"
+ name: "S1BearerSubscription"
+ description: "Use to creates a subscription to S1 Bearer notifications based\
+ \ on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/S1BearerSubscription_1"
+ x-exportParamName: "S1BearerSubscription"
+ responses:
+ 200:
+ description: "Successful subscription update to response to S1 Bearer notifications"
+ examples:
+ application/json:
+ S1BearerSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/s1_bearer/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/s1_bearer/sub123"
+ eventType: 1
+ s1BearerSubscriptionCriteria:
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ erabId: 1
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/S1BearerSubscription_1"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 412:
+ description: "Precondition failed"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ delete:
+ description: "Method to delete a subscription"
+ operationId: "S1Bearer_subscriptionsSubscrIdDELETE"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 204:
+ description: "No Content"
+ x-swagger-router-controller: "Default"
+ /subscriptions/ta:
+ get:
+ description: "The GET method can be used to request information about the ta\
+ \ subscriptions for this requestor"
+ operationId: "SubscriptionLinkList_subscriptions_ta_GET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters: []
+ responses:
+ 200:
+ description: "Response body contains the list of links to requestors ta\
+ \ subscriptions."
+ examples:
+ application/json:
+ SubscriptionLinkList:
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/ta"
+ subscription:
+ - href: "http://meAppClient.example.com/rni/v1/notifications/ta/77777"
+ subscriptionType: "MEAS_REPORT_UE"
+ - href: "http://meAppClient.example.com/rni/v1/notifications/ta/77778"
+ subscriptionType: "MEAS_REPORT_UE"
+ schema:
+ $ref: "#/definitions/inline_response_200_3"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ post:
+ description: "Creates a subscription to UE Timing Advance notifications from\
+ \ Radio Network Information Service"
+ operationId: "MeasTa_subscriptionsPOST"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - in: "body"
+ name: "MeasTaSubscriptionPost"
+ description: "Use to creates a subscription to UE Timing Advance notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/MeasTaSubscriptionPost_1"
+ x-exportParamName: "MeasTaSubscriptionPost"
+ responses:
+ 201:
+ description: "Successful subscription to response to UE Timing Advance notifications"
+ examples:
+ application/json:
+ MeasTaSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/ta/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/ta/sub123"
+ filterCriteria:
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ appInsId: "01"
+ trigger: 6
+ cellId: "0x800000B"
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_201_2"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 415:
+ description: "Unsupported Media Type"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ /subscriptions/ta/{subscriptionId}:
+ get:
+ description: "Gets UE Timing Advance subscription information from Radio Network\
+ \ Information Service"
+ operationId: "MeasTa_subscriptionsGET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 200:
+ description: "Subscription information regarding UE Timing Advance notifications"
+ examples:
+ application/json:
+ MeasTaSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/ta/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/ta/sub123"
+ filterCriteria:
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ appInsId: "01"
+ trigger: 6
+ cellId: "0x800000B"
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_200_5"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ put:
+ description: "Updates a subscription to UE Timing Advance notifications from\
+ \ Radio Network Information Service"
+ operationId: "MeasTa_subscriptionsPUT"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ - in: "body"
+ name: "MeasTaSubscription"
+ description: "Use to creates a subscription to UE Timing Advance notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/MeasTaSubscription_1"
+ x-exportParamName: "MeasTaSubscription"
+ responses:
+ 200:
+ description: "Successful subscription to response to UE Timing Advance notifications"
+ examples:
+ application/json:
+ MeasTaSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/ta/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/ta/sub123"
+ filterCriteria:
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ appInsId: "01"
+ trigger: 6
+ cellId: "0x800000B"
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/MeasTaSubscription_1"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 412:
+ description: "Precondition failed"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ delete:
+ description: "Method to delete a subscription"
+ operationId: "MeasTa_subscriptionsSubscrIdDELETE"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 204:
+ description: "No Content"
+ x-swagger-router-controller: "Default"
+ /subscriptions/meas_rep_ue:
+ get:
+ description: "The GET method can be used to request information about the meas_rep_ue\
+ \ subscriptions for this requestor"
+ operationId: "SubscriptionLinkList_subscriptions_mr_GET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters: []
+ responses:
+ 200:
+ description: "Response body contains the list of links to requestors meas_rep_ue\
+ \ subscriptions."
+ examples:
+ application/json:
+ SubscriptionLinkList:
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/meas_rep_ue"
+ subscription:
+ - href: "http://meAppClient.example.com/rni/v1/notifications/meas_rep_ue/77777"
+ subscriptionType: "MEAS_REPORT_UE"
+ - href: "http://meAppClient.example.com/rni/v1/notifications/meas_rep_ue/77778"
+ subscriptionType: "MEAS_REPORT_UE"
+ schema:
+ $ref: "#/definitions/inline_response_200_3"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ post:
+ description: "Creates a subscription to UE measurement report notifications\
+ \ from Radio Network Information Service"
+ operationId: "MeasRepUe_subscriptionsPOST"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - in: "body"
+ name: "MeasRepUeSubscriptionPost"
+ description: "Use to creates a subscription to UE measurement report notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/MeasRepUeSubscriptionPost_1"
+ x-exportParamName: "MeasRepUeSubscriptionPost"
+ responses:
+ 201:
+ description: "Successful subscription to response to UE measurement report\
+ \ notifications"
+ examples:
+ application/json:
+ MeasRepUeSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/meas_rep_ue/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/meas_rep_ue/sub123"
+ filterCriteria:
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ appInsId: "01"
+ trigger: 6
+ cellId: "0x800000B"
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_201_3"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 415:
+ description: "Unsupported Media Type"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ /subscriptions/meas_rep_ue/{subscriptionId}:
+ get:
+ description: "Gets a subscription to UE measurement report notifications from\
+ \ Radio Network Information Service"
+ operationId: "MeasRepUe_subscriptionsGET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 200:
+ description: "Successful subscription to response to UE measurement report\
+ \ notifications"
+ examples:
+ application/json:
+ MeasRepUeSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/meas_rep_ue/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/meas_rep_ue/sub123"
+ filterCriteria:
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ appInsId: "01"
+ trigger: 6
+ cellId: "0x800000B"
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_200_6"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ put:
+ description: "Updates a subscription to UE measurement report notifications\
+ \ from Radio Network Information Service"
+ operationId: "MeasRepUeReport_subscriptionsPUT"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ - in: "body"
+ name: "MeasRepUeSubscription"
+ description: "Use to creates a subscription to UE measurement report notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/MeasRepUeSubscription_1"
+ x-exportParamName: "MeasRepUeSubscription"
+ responses:
+ 200:
+ description: "Successful update subscription to response to UE measurement\
+ \ report notifications"
+ examples:
+ application/json:
+ MeasRepUeSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/meas_rep_ue/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/meas_rep_ue/sub123"
+ filterCriteria:
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ appInsId: "01"
+ trigger: 6
+ cellId: "0x800000B"
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/MeasRepUeSubscription_1"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 412:
+ description: "Precondition failed"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ delete:
+ description: "Method to delete a subscription"
+ operationId: "MeasRepUe_subscriptionsSubscrIdDELETE"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 204:
+ description: "No Content. Successful deletion of UE Measurment Report subscription"
+ x-swagger-router-controller: "Default"
+ /subscriptions/rab_est:
+ get:
+ description: "The GET method can be used to request information about the rab_est\
+ \ subscriptions for this requestor"
+ operationId: "SubscriptionLinkList_subscriptions_re_GET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters: []
+ responses:
+ 200:
+ description: "Response body contains the list of links to requestors rab_est\
+ \ subscriptions."
+ examples:
+ application/json:
+ SubscriptionLinkList:
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/rab_est"
+ subscription:
+ - href: "http://meAppClient.example.com/rni/v1/notifications/rab_est/77777"
+ subscriptionType: "RAB_ESTABLISHMENT"
+ - href: "http://meAppClient.example.com/rni/v1/notifications/rab_est/77778"
+ subscriptionType: "RAB_ESTABLISHMENT"
+ schema:
+ $ref: "#/definitions/inline_response_200_3"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ post:
+ description: "Creates a subscription to RAB establishment notifications from\
+ \ Radio Network Information Service"
+ operationId: "RabEstSubscription_subscriptionsPOST"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - in: "body"
+ name: "RabEstSubscriptionPost"
+ description: "Use to creates a subscription to RAB establishment notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/RabEstSubscriptionPost_1"
+ x-exportParamName: "RabEstSubscriptionPost"
+ responses:
+ 201:
+ description: "Successful subscription to RAB establishment notifications"
+ examples:
+ application/json:
+ RabEstSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/rab_est/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/rab_est/sub123"
+ filterCriteriaAssocQci:
+ appInsId: "app01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ qci: 1
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_201_4"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 415:
+ description: "Unsupported Media Type"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ /subscriptions/rab_est/{subscriptionId}:
+ get:
+ description: "Gets a subscription to RAB establishment notifications from Radio\
+ \ Network Information Service"
+ operationId: "RabEstSubscription_subscriptionsGET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 200:
+ description: "Subscription information regarding RAB establishment notifications"
+ examples:
+ application/json:
+ RabEstSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/rab_est/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/rab_est/sub123"
+ filterCriteriaAssocQci:
+ appInsId: "app01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ qci: 1
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_200_7"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ put:
+ description: "Updates a subscription to RAB establishment notifications from\
+ \ Radio Network Information Service"
+ operationId: "RabEstSubscription_subscriptionsPUT"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ - in: "body"
+ name: "RabEstSubscription"
+ description: "Use to creates a subscription to RAB establishment notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/RabEstSubscription_1"
+ x-exportParamName: "RabEstSubscription"
+ responses:
+ 200:
+ description: "Successful subscription update to RAB establishment notifications"
+ examples:
+ application/json:
+ RabEstSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/rab_est/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/rab_est/sub123"
+ filterCriteriaAssocQci:
+ appInsId: "app01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ qci: 1
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/RabEstSubscription_1"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 412:
+ description: "Precondition failed"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ delete:
+ description: "Method to delete a subscription"
+ operationId: "RabEst_subscriptionsSubscrIdDELETE"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 204:
+ description: "No Content. Successful deletion of Rab Establishment subscription"
+ x-swagger-router-controller: "Default"
+ /subscriptions/rab_mod:
+ get:
+ description: "The GET method can be used to request information about the rab_mod\
+ \ subscriptions for this requestor"
+ operationId: "SubscriptionLinkList_subscriptions_rm_GET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters: []
+ responses:
+ 200:
+ description: "Response body contains the list of links to requestors rab_mod\
+ \ subscriptions."
+ examples:
+ application/json:
+ SubscriptionLinkList:
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/rab_mod"
+ subscription:
+ - href: "http://meAppClient.example.com/rni/v1/notifications/rab_mod/77777"
+ subscriptionType: "RAB_MODIFICATION"
+ - href: "http://meAppClient.example.com/rni/v1/notifications/rab_mod/77778"
+ subscriptionType: "RAB_MODIFICATION"
+ schema:
+ $ref: "#/definitions/inline_response_200_3"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ post:
+ description: "Creates a subscription to RAB Modification notifications from\
+ \ Radio Network Information Service"
+ operationId: "RabModSubscription_subscriptionsPOST"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - in: "body"
+ name: "RabModSubscriptionPost"
+ description: "Use to creates a subscription to RAB Modification notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/RabModSubscriptionPost_1"
+ x-exportParamName: "RabModSubscriptionPost"
+ responses:
+ 201:
+ description: "Successful subscription to RAB Modification notifications"
+ examples:
+ application/json:
+ RabModSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/rab_mod/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/rab_mod/sub123"
+ filterCriteriaAssocQci:
+ appInsId: "app01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ qci: 1
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_201_5"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 415:
+ description: "Unsupported Media Type"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ /subscriptions/rab_mod/{subscriptionId}:
+ get:
+ description: "Gets a subscription to RAB Modification notifications from Radio\
+ \ Network Information Service"
+ operationId: "RabModSubscription_subscriptionsGET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 200:
+ description: "Subscription information regarding RAB Modification notifications"
+ examples:
+ application/json:
+ RabModSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/rab_mod/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/rab_mod/sub123"
+ filterCriteriaAssocQci:
+ appInsId: "app01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ qci: 1
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_200_8"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ put:
+ description: "Updates a subscription to RAB Modification notifications from\
+ \ Radio Network Information Service"
+ operationId: "RabModSubscription_subscriptionsPUT"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ - in: "body"
+ name: "RabModSubscription"
+ description: "Use to creates a subscription to RAB Modification notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/RabModSubscription_1"
+ x-exportParamName: "RabModSubscription"
+ responses:
+ 200:
+ description: "Successful subscription update to RAB Modification notifications"
+ examples:
+ application/json:
+ RabModSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/rab_mod/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/rab_mod/sub123"
+ filterCriteriaAssocQci:
+ appInsId: "app01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ qci: 1
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/RabModSubscription_1"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 412:
+ description: "Precondition failed"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ delete:
+ description: "Method to delete a subscription"
+ operationId: "RabMod_subscriptionsSubscrIdDELETE"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 204:
+ description: "No Content. Successful deletion of Rab Modification subscription"
+ x-swagger-router-controller: "Default"
+ /subscriptions/rab_rel:
+ get:
+ description: "The GET method can be used to request information about the rab_rel\
+ \ subscriptions for this requestor"
+ operationId: "SubscriptionLinkList_subscriptions_rr_GET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters: []
+ responses:
+ 200:
+ description: "Response body contains the list of links to requestors rab_rel\
+ \ subscriptions."
+ examples:
+ application/json:
+ SubscriptionLinkList:
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/rab_rel"
+ subscription:
+ - href: "http://meAppClient.example.com/rni/v1/notifications/rab_rel/77777"
+ subscriptionType: "RAB_RELEASE"
+ - href: "http://meAppClient.example.com/rni/v1/notifications/rab_rel/77778"
+ subscriptionType: "RAB_RELEASE"
+ schema:
+ $ref: "#/definitions/inline_response_200_3"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ post:
+ description: "Creates a subscription to RAB Release notifications from Radio\
+ \ Network Information Service"
+ operationId: "RabRelSubscription_subscriptionsPOST"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - in: "body"
+ name: "RabRelSubscriptionPost"
+ description: "Use to creates a subscription to RAB Release notifications based\
+ \ on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/RabRelSubscriptionPost_1"
+ x-exportParamName: "RabRelSubscriptionPost"
+ responses:
+ 201:
+ description: "Successful subscription to RAB Release notifications"
+ examples:
+ application/json:
+ RabRelSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/rab_rel/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/rab_rel/sub123"
+ filterCriteriaAssocQci:
+ appInsId: "app01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ qci: 1
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_201_6"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 415:
+ description: "Unsupported Media Type"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ /subscriptions/rab_rel/{subscriptionId}:
+ get:
+ description: "Gets a subscription to RAB Release notifications from Radio Network\
+ \ Information Service"
+ operationId: "RabRelSubscription_subscriptionsGET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 200:
+ description: "Subscription information regarding RAB Release notifications"
+ examples:
+ application/json:
+ RabRelSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/rab_rel/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/rab_rel/sub123"
+ filterCriteriaAssocQci:
+ appInsId: "app01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ qci: 1
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_200_9"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ put:
+ description: "Updates a subscription to RAB Release notifications from Radio\
+ \ Network Information Service"
+ operationId: "RabRelSubscription_subscriptionsPUT"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ - in: "body"
+ name: "RabRelSubscription"
+ description: "Use to creates a subscription to RAB Release notifications based\
+ \ on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/RabRelSubscription_1"
+ x-exportParamName: "RabRelSubscription"
+ responses:
+ 200:
+ description: "Successful subscription update to RAB Release notifications"
+ examples:
+ application/json:
+ RabRelSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/rab_rel/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/rab_rel/sub123"
+ filterCriteriaAssocQci:
+ appInsId: "app01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ qci: 1
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/RabRelSubscription_1"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 412:
+ description: "Precondition failed"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ delete:
+ description: "Method to delete a subscription"
+ operationId: "RabRel_subscriptionsSubscrIdDELETE"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 204:
+ description: "No Content. Successful deletion of Rab Release subscription"
+ x-swagger-router-controller: "Default"
+ /subscriptions/ca_reconf:
+ get:
+ description: "The GET method can be used to request information about the ca_reconf\
+ \ subscriptions for this requestor"
+ operationId: "SubscriptionLinkList_subscriptions_cr_GET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters: []
+ responses:
+ 200:
+ description: "Response body contains the list of links to requestors ca_reconf\
+ \ subscriptions."
+ examples:
+ application/json:
+ SubscriptionLinkList:
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/ca_reconf"
+ subscription:
+ - href: "http://meAppClient.example.com/rni/v1/notifications/ca_reconf/77777"
+ subscriptionType: "CA_RECONF"
+ - href: "http://meAppClient.example.com/rni/v1/notifications/ca_reconf/77778"
+ subscriptionType: "CA_RECONF"
+ schema:
+ $ref: "#/definitions/inline_response_200_3"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ post:
+ description: "Creates a subscription to Carrier Aggregation Reconfiguration\
+ \ notifications from Radio Network Information Service"
+ operationId: "CaReConfSubscription_subscriptionsPOST"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - in: "body"
+ name: "CaReConfSubscriptionPost"
+ description: "Use to creates a subscription to Carrier Aggregation Reconfiguration\
+ \ notifications based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/CaReConfSubscriptionPost_1"
+ x-exportParamName: "CaReConfSubscriptionPost"
+ responses:
+ 201:
+ description: "Successful subscription to Carrier Aggregation Reconfiguration\
+ \ notifications"
+ examples:
+ application/json:
+ CaReConfSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/ca_reconf/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/ca_reconf/sub123"
+ filterCriteriaAssoc:
+ appInsId: "app01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_201_7"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 415:
+ description: "Unsupported Media Type"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ x-swagger-router-controller: "Default"
+ /subscriptions/ca_reconf/{subscriptionId}:
+ get:
+ description: "Gets a subscription to Carrier Aggregation Reconfiguration notifications\
+ \ from Radio Network Information Service"
+ operationId: "CaReConfSubscription_subscriptionsGET"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 200:
+ description: "Subscription information regarding Carrier Aggregation Reconfiguration\
+ \ notifications"
+ examples:
+ application/json:
+ CaReConfSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/ca_reconf/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/ca_reconf/sub123"
+ filterCriteriaAssoc:
+ appInsId: "app01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/inline_response_200_10"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ put:
+ description: "Updates a subscription to Carrier Aggregation Reconfiguration\
+ \ notifications from Radio Network Information Service"
+ operationId: "CaReConfSubscription_subscriptionsPUT"
+ produces:
+ - "application/json"
+ - "application/problem+json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ - in: "body"
+ name: "CaReConfSubscription"
+ description: "Use to creates a subscription to Carrier Aggregation Reconfiguration\
+ \ notifications based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/CaReConfSubscription_1"
+ x-exportParamName: "CaReConfSubscription"
+ responses:
+ 200:
+ description: "Successful subscription to Carrier Aggregation Reconfiguration\
+ \ notifications"
+ examples:
+ application/json:
+ CaReConfSubscription:
+ callbackReference: "http://meAppClient.example.com/rni/v1/notifications/ca_reconf/77777"
+ _links:
+ self: "http://meAppServer.example.com/rni/v1/subscriptions/ca_reconf/sub123"
+ filterCriteriaAssoc:
+ appInsId: "app01"
+ associateId:
+ type: "1"
+ value: "192.0.2.0"
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000B"
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ schema:
+ $ref: "#/definitions/CaReConfSubscription_1"
+ 400:
+ description: "Bad Request"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 401:
+ description: "Unauthorized"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 403:
+ description: "Forbidden"
+ schema:
+ $ref: "#/definitions/inline_response_403"
+ 404:
+ description: "Not Found"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 406:
+ description: "Not Acceptable"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 412:
+ description: "Precondition failed"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 422:
+ description: "Unprocessable Entity"
+ examples:
+ application/problem+json:
+ ProblemDetails:
+ type: "https://meAppServer.example.com/rni/v1/probs/too-many-targets"
+ title: "Too many targets"
+ status: "422"
+ detail: "The target area for the request is considered too large"
+ instance: "/meAppClient.example.com/77777/msgs/abc"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ 429:
+ description: "Too Many Requests"
+ schema:
+ $ref: "#/definitions/inline_response_400"
+ delete:
+ description: "Method to delete a subscription"
+ operationId: "CaReConf_subscriptionsSubscrIdDELETE"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ responses:
+ 204:
+ description: "No Content"
+ x-swagger-router-controller: "Default"
+securityDefinitions:
+ OauthSecurity:
+ type: "oauth2"
+ tokenUrl: "https://oauth.exampleAPI/token"
+ flow: "application"
+ scopes:
+ all: "Single oauth2 scope for API"
+definitions:
+ ProblemDetails:
+ type: "object"
+ properties:
+ type:
+ type: "string"
+ format: "uri"
+ description: "A URI reference according to IETF RFC 3986 that identifies the\
+ \ problem type"
+ title:
+ type: "string"
+ description: "A short, human-readable summary of the problem type"
+ status:
+ type: "integer"
+ format: "uint32"
+ description: "The HTTP status code for this occurrence of the problem"
+ detail:
+ type: "string"
+ description: "A human-readable explanation specific to this occurrence of\
+ \ the problem"
+ instance:
+ type: "string"
+ format: "uri"
+ description: "A URI reference that identifies the specific occurrence of the\
+ \ problem"
+ PlmnInfo:
+ type: "object"
+ required:
+ - "appInsId"
+ - "ecgi"
+ properties:
+ timeStamp:
+ $ref: "#/definitions/TimeStamp"
+ appInsId:
+ type: "string"
+ format: "string"
+ example: "01"
+ description: "Unique identifier for the mobile edge application instance"
+ ecgi:
+ $ref: "#/definitions/Ecgi"
+ RabInfo:
+ type: "object"
+ required:
+ - "appInsId"
+ - "requestId"
+ properties:
+ timeStamp:
+ $ref: "#/definitions/TimeStamp"
+ appInsId:
+ type: "string"
+ format: "string"
+ example: "01"
+ description: "Unique identifier for the mobile edge application instance"
+ requestId:
+ type: "string"
+ format: "string"
+ example: "01"
+ description: "Unique identifier allocated by the Mobile Edge application for\
+ \ the Information request."
+ cellUserInfo:
+ type: "array"
+ items:
+ $ref: "#/definitions/CellUserInfo"
+ S1BearerInfo:
+ type: "object"
+ required:
+ - "s1UeInfo"
+ properties:
+ timeStamp:
+ $ref: "#/definitions/TimeStamp"
+ s1UeInfo:
+ type: "array"
+ items:
+ $ref: "#/definitions/S1UeInfo"
+ S1UeInfo:
+ type: "object"
+ required:
+ - "ecgi"
+ - "s1BearerInfoDetailed"
+ - "tempUeId"
+ properties:
+ tempUeId:
+ type: "array"
+ items:
+ $ref: "#/definitions/TempUeId"
+ associateId:
+ type: "array"
+ items:
+ $ref: "#/definitions/AssociateId"
+ ecgi:
+ type: "array"
+ items:
+ $ref: "#/definitions/Ecgi"
+ s1BearerInfoDetailed:
+ type: "array"
+ items:
+ $ref: "#/definitions/S1BearerInfoDetailed"
+ description: "The information on users per cell."
+ S1BearerInfoDetailed:
+ type: "object"
+ required:
+ - "erabId"
+ - "s1EnbInfo"
+ properties:
+ erabId:
+ type: "integer"
+ format: "int32"
+ example: 10
+ description: "The element that uniquely identifies a S1 bearer for a specific\
+ \ UE, as defined in ETSI TS 136 413"
+ s1EnbInfo:
+ $ref: "#/definitions/S1EnbInfo"
+ sGwInfo:
+ $ref: "#/definitions/SGwInfo"
+ description: "Information on UEs in the specific cell."
+ TempUeId:
+ type: "object"
+ required:
+ - "mmec"
+ - "mtmsi"
+ properties:
+ mmec:
+ type: "string"
+ example: "0"
+ description: "MMEC as defined in ETSI TS 136 413"
+ mtmsi:
+ type: "string"
+ example: "1234"
+ description: "M-TMSI as defined in ETSI TS 136 413"
+ S1EnbInfo:
+ type: "object"
+ required:
+ - "ipAddress"
+ - "tunnelId"
+ properties:
+ ipAddress:
+ type: "string"
+ example: "192.0.2.0"
+ description: "eNB transport layer address of this S1 bearer."
+ tunnelId:
+ type: "string"
+ example: "1111"
+ description: "eNB GTP-U TEID of this S1 bearer."
+ SGwInfo:
+ type: "object"
+ required:
+ - "ipAddress"
+ - "tunnelId"
+ properties:
+ ipAddress:
+ type: "string"
+ example: "192.0.2.1"
+ description: "SGW transport layer address of this S1 bearer."
+ tunnelId:
+ type: "string"
+ example: "2222"
+ description: "SGW GTP-U TEID of this S1 bearer."
+ TimeStamp:
+ type: "object"
+ required:
+ - "nanoSeconds"
+ - "seconds"
+ properties:
+ seconds:
+ type: "integer"
+ format: "uint32"
+ example: 1577836800
+ description: "The seconds part of the time. Time is defined as Unix-time since\
+ \ January 1, 1970, 00:00:00 UTC"
+ nanoSeconds:
+ type: "integer"
+ format: "uint32"
+ example: 0
+ description: "The nanoseconds part of the time. Time is defined as Unix-time\
+ \ since January 1, 1970, 00:00:00 UTC"
+ CellUserInfo:
+ type: "object"
+ required:
+ - "ecgi"
+ - "ueInfo"
+ properties:
+ ecgi:
+ $ref: "#/definitions/Ecgi"
+ ueInfo:
+ type: "array"
+ items:
+ $ref: "#/definitions/UeInfo"
+ description: "The information on users per cell."
+ Ecgi:
+ type: "object"
+ required:
+ - "cellId"
+ - "plmn"
+ properties:
+ plmn:
+ $ref: "#/definitions/Plmn"
+ cellId:
+ type: "array"
+ example: "0x800000A"
+ description: "The E-UTRAN Cell Identity as a bit string (size (28)), as defined\
+ \ in 3GPP TS 36.413"
+ items:
+ type: "string"
+ format: "binary"
+ description: "E-UTRAN CelI Global Identifier as defined in 3GPP TS 36.413"
+ Plmn:
+ type: "object"
+ required:
+ - "mcc"
+ - "mnc"
+ properties:
+ mcc:
+ type: "string"
+ format: "string"
+ example: "001"
+ description: "The Mobile Country Code part of PLMN Identity as defined in\
+ \ 3GPP TS 36.413"
+ mnc:
+ type: "string"
+ format: "string"
+ example: "01"
+ description: "The Mobile Network Code part of PLMN Identity as defined in\
+ \ 3GPP TS 36.413"
+ UeInfo:
+ type: "object"
+ required:
+ - "erabInfo"
+ properties:
+ associateId:
+ type: "array"
+ items:
+ $ref: "#/definitions/AssociateId"
+ erabInfo:
+ type: "array"
+ items:
+ $ref: "#/definitions/ErabQosParameters"
+ description: "Information on UEs in the specific cell."
+ AssociateId:
+ type: "object"
+ required:
+ - "type"
+ - "value"
+ properties:
+ type:
+ type: "string"
+ example: "UE_IPV4_ADDRESS"
+ description: "Numeric value (0-255) corresponding to specified type of identifier"
+ enum:
+ - "RESERVED_ASSOCIATED_ID_TYPE"
+ - "UE_IPV4_ADDRESS"
+ - "UE_IPV6_ADDRESS"
+ - "NATED_IP_ADDRESS"
+ - "GTP_TEID"
+ value:
+ type: "string"
+ example: "192.168.10.1"
+ description: "Value for the identifier"
+ ErabQosParameters:
+ type: "object"
+ properties:
+ qci:
+ type: "integer"
+ format: "int32"
+ example: 7
+ description: "QoS Class Identifier as defined in TS 23.401"
+ qos_information:
+ $ref: "#/definitions/QosInformation"
+ QosInformation:
+ type: "object"
+ required:
+ - "erabGbrDl"
+ - "erabGbrUl"
+ - "erabMbrDl"
+ - "erabMbrUl"
+ properties:
+ erabMbrDl:
+ type: "integer"
+ format: "int32"
+ example: 10
+ description: "This IE indicates the maximum downlink E-RAB Bit Rate as defined\
+ \ in TS 23.401 for this bearer."
+ erabMbrUl:
+ type: "integer"
+ format: "int32"
+ example: 10
+ description: "This IE indicates the maximum uplink E-RAB Bit Rate as defined\
+ \ in TS 23.401 for this bearer."
+ erabGbrDl:
+ type: "integer"
+ format: "int32"
+ example: 10
+ description: "This IE indicates the guaranteed downlink E-RAB Bit Rate as\
+ \ defined in TS 23.401 for this bearer."
+ erabGbrUl:
+ type: "integer"
+ format: "int32"
+ example: 10
+ description: "This IE indicates the guaranteed uplink E-RAB Bit Rate as defined\
+ \ in TS 23.401 for this bearer."
+ SubscriptionLinkList:
+ type: "object"
+ required:
+ - "_links"
+ properties:
+ _links:
+ $ref: "#/definitions/Link"
+ subscription:
+ type: "array"
+ items:
+ $ref: "#/definitions/Subscription"
+ MeasRepUeSubscriptionPost:
+ type: "object"
+ required:
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssocTri"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ MeasRepUeSubscription:
+ type: "object"
+ required:
+ - "_links"
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ _links:
+ $ref: "#/definitions/Link"
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssocTri"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ S1BearerSubscriptionPost:
+ type: "object"
+ required:
+ - "callbackReference"
+ - "s1BearerSubscriptionCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ eventType:
+ $ref: "#/definitions/EventType"
+ s1BearerSubscriptionCriteria:
+ $ref: "#/definitions/S1BearerSubscriptionCriteria"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ S1BearerSubscription:
+ type: "object"
+ required:
+ - "_links"
+ - "callbackReference"
+ - "s1BearerSubscriptionCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ _links:
+ $ref: "#/definitions/Link"
+ eventType:
+ $ref: "#/definitions/EventType"
+ s1BearerSubscriptionCriteria:
+ $ref: "#/definitions/S1BearerSubscriptionCriteria"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ RabEstSubscription:
+ type: "object"
+ required:
+ - "_links"
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ _links:
+ $ref: "#/definitions/Link"
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssocQci"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ RabEstSubscriptionPost:
+ type: "object"
+ required:
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssocQci"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ RabModSubscription:
+ type: "object"
+ required:
+ - "_links"
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ _links:
+ $ref: "#/definitions/Link"
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssocQci"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ RabModSubscriptionPost:
+ type: "object"
+ required:
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssocQci"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ RabRelSubscription:
+ type: "object"
+ required:
+ - "_links"
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ _links:
+ $ref: "#/definitions/Link"
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssocQci"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ RabRelSubscriptionPost:
+ type: "object"
+ required:
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssocQci"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ CaReConfSubscription:
+ type: "object"
+ required:
+ - "_links"
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ _links:
+ $ref: "#/definitions/Link"
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssoc"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ CaReConfSubscriptionPost:
+ type: "object"
+ required:
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssoc"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ CellChangeSubscriptionPost:
+ type: "object"
+ required:
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssocHo"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ CellChangeSubscription:
+ type: "object"
+ required:
+ - "_links"
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ _links:
+ $ref: "#/definitions/Link"
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssocHo"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ MeasTaSubscriptionPost:
+ type: "object"
+ required:
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssoc"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ MeasTaSubscription:
+ type: "object"
+ required:
+ - "_links"
+ - "callbackReference"
+ - "filterCriteria"
+ properties:
+ callbackReference:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URL selected by the Mobile Edge application to receive notifications\
+ \ on the subscribed RNIS information."
+ _links:
+ $ref: "#/definitions/Link"
+ filterCriteria:
+ $ref: "#/definitions/FilterCriteriaAssoc"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ Link:
+ type: "object"
+ properties:
+ self:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URI referring to a resource"
+ description: "List of hyperlinks related to the resource"
+ Subscription:
+ type: "object"
+ required:
+ - "href"
+ - "subscriptionType"
+ properties:
+ href:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URI referring to a resource"
+ subscriptionType:
+ $ref: "#/definitions/SubscriptionType"
+ description: "A link to a subscription."
+ SubscriptionType:
+ type: "string"
+ description: "Numeric value corresponding to specified type of subscription."
+ example: "CELL_CHANGE"
+ enum:
+ - "RESERVED_SUBSCRIPTION_TYPE"
+ - "CELL_CHANGE"
+ - "RAB_ESTABLISHMENT"
+ - "RAB_MODIFICATION"
+ - "RAB_RELEASE"
+ - "MEAS_REPORT_UE"
+ - "MEAS_TIMING_ADVANCE"
+ - "CA_RECONF"
+ - "S1_BEARE"
+ FilterCriteriaAssoc:
+ type: "object"
+ properties:
+ appInsId:
+ type: "string"
+ format: "string"
+ example: "01"
+ description: "Unique identifier for the mobile edge application instance"
+ associateId:
+ $ref: "#/definitions/AssociateId"
+ plmn:
+ $ref: "#/definitions/Plmn"
+ cellId:
+ type: "array"
+ example: "0x800000A"
+ description: "The E-UTRAN Cell Identity as a bit string (size (28)), as defined\
+ \ in 3GPP TS 36.413"
+ items:
+ type: "string"
+ format: "binary"
+ description: "List of filtering criteria for the subscription."
+ FilterCriteriaAssocQci:
+ type: "object"
+ properties:
+ appInsId:
+ type: "string"
+ format: "string"
+ example: "01"
+ description: "Unique identifier for the mobile edge application instance"
+ associateId:
+ $ref: "#/definitions/AssociateId"
+ plmn:
+ $ref: "#/definitions/Plmn"
+ cellId:
+ type: "array"
+ example: "0x800000A"
+ description: "The E-UTRAN Cell Identity as a bit string (size (28)), as defined\
+ \ in 3GPP TS 36.413"
+ items:
+ type: "string"
+ format: "binary"
+ qci:
+ type: "integer"
+ format: "int32"
+ example: 7
+ description: "QoS Class Identifier as defined in TS 23.401"
+ description: "List of filtering criteria for the subscription."
+ FilterCriteriaAssocHo:
+ type: "object"
+ properties:
+ appInsId:
+ type: "string"
+ format: "string"
+ example: "01"
+ description: "Unique identifier for the mobile edge application instance"
+ associateId:
+ $ref: "#/definitions/AssociateId"
+ plmn:
+ $ref: "#/definitions/Plmn"
+ cellId:
+ type: "array"
+ example: "0x800000A"
+ description: "The E-UTRAN Cell Identity as a bit string (size (28)), as defined\
+ \ in 3GPP TS 36.413"
+ items:
+ type: "string"
+ format: "binary"
+ hoStatus:
+ $ref: "#/definitions/HoStatus"
+ description: "List of filtering criteria for the subscription."
+ FilterCriteriaAssocTri:
+ type: "object"
+ properties:
+ appInsId:
+ type: "string"
+ format: "string"
+ example: "01"
+ description: "Unique identifier for the mobile edge application instance"
+ associateId:
+ $ref: "#/definitions/AssociateId"
+ plmn:
+ $ref: "#/definitions/Plmn"
+ cellId:
+ type: "array"
+ example: "0x800000A"
+ description: "The E-UTRAN Cell Identity as a bit string (size (28)), as defined\
+ \ in 3GPP TS 36.413"
+ items:
+ type: "string"
+ format: "binary"
+ trigger:
+ $ref: "#/definitions/Trigger"
+ description: "List of filtering criteria for the subscription."
+ S1BearerSubscriptionCriteria:
+ type: "object"
+ properties:
+ associateId:
+ $ref: "#/definitions/AssociateId"
+ plmn:
+ $ref: "#/definitions/Plmn"
+ cellId:
+ type: "array"
+ example: "0x800000A"
+ description: "The E-UTRAN Cell Identity as a bit string (size (28)), as defined\
+ \ in 3GPP TS 36.413"
+ items:
+ type: "string"
+ format: "binary"
+ erabId:
+ type: "integer"
+ format: "int32"
+ example: 10
+ description: "The element that uniquely identifies a S1 bearer for a specific\
+ \ UE, as defined in ETSI TS 136 413"
+ description: "List of filtering criteria for the subscription."
+ HoStatus:
+ type: "string"
+ description: "Description of the subscribed to event"
+ example: "COMPLETED"
+ enum:
+ - "RESERVED_HO_STATUS"
+ - "IN_PREPARATION"
+ - "IN_EXECUTION"
+ - "COMPLETED"
+ - "REJECTED"
+ - "CANCELLED"
+ EventType:
+ type: "string"
+ description: "Description of the subscribed event."
+ example: "S1_BEARER_ESTABLISH"
+ enum:
+ - "RESERVED_EVENT_TYPE"
+ - "S1_BEARER_ESTABLISH"
+ - "S1_BEARER_MODIFY"
+ - "S1_BEARER_RELEASE"
+ Trigger:
+ type: "string"
+ description: "Unique identifier for the mobile edge application instance"
+ example: "EVENT_A3"
+ enum:
+ - "NOT_AVAILABLE"
+ - "PERIODICAL_REPORT_STRONGEST_CELLS"
+ - "PERIODICAL_REPORT_STRONGEST_CELLS_FOR_SON"
+ - "PERIODICAL_REPORT_CGI"
+ - "EVENT_A1"
+ - "EVENT_A2"
+ - "EVENT_A3"
+ - "EVENT_A4"
+ - "EVENT_A5"
+ - "EVENT_A6"
+ - "EVENT_B1"
+ - "EVENT_B2"
+ - "EVENT_C1"
+ - "EVENT_C2"
+ - "EVENT_W1"
+ - "EVENT_W2"
+ - "EVENT_W3"
+ ErabQosParameters_qci:
+ type: "object"
+ properties:
+ qosInformation:
+ $ref: "#/definitions/QosInformation"
+ description: "QoS Class Identifier as defined in TS 23.401"
+ inline_response_200:
+ type: "object"
+ required:
+ - "RabInfo"
+ properties:
+ RabInfo:
+ $ref: "#/definitions/RabInfo"
+ inline_response_400:
+ type: "object"
+ properties:
+ ProblemDetails:
+ $ref: "#/definitions/ProblemDetails"
+ inline_response_403:
+ type: "object"
+ required:
+ - "ProblemDetails"
+ properties:
+ ProblemDetails:
+ $ref: "#/definitions/ProblemDetails"
+ inline_response_200_1:
+ type: "object"
+ properties:
+ PlmnInfo:
+ type: "array"
+ items:
+ $ref: "#/definitions/PlmnInfo"
+ inline_response_200_2:
+ type: "object"
+ required:
+ - "S1BearerInfo"
+ properties:
+ S1BearerInfo:
+ $ref: "#/definitions/S1BearerInfo"
+ inline_response_200_3:
+ type: "object"
+ required:
+ - "SubscriptionLinkList"
+ properties:
+ SubscriptionLinkList:
+ $ref: "#/definitions/SubscriptionLinkList"
+ CellChangeSubscriptionPost_1:
+ type: "object"
+ properties:
+ CellChangeSubscription:
+ $ref: "#/definitions/CellChangeSubscriptionPost"
+ inline_response_201:
+ type: "object"
+ properties:
+ CellChangeSubscription:
+ $ref: "#/definitions/CellChangeSubscription"
+ inline_response_200_4:
+ type: "object"
+ required:
+ - "CellChangeSubscription"
+ properties:
+ CellChangeSubscription:
+ $ref: "#/definitions/CellChangeSubscription"
+ CellChangeSubscription_1:
+ type: "object"
+ properties:
+ CellChangeSubscription:
+ $ref: "#/definitions/CellChangeSubscription"
+ S1BearerSubscriptionPost_1:
+ type: "object"
+ properties:
+ S1BearerSubscription:
+ $ref: "#/definitions/S1BearerSubscriptionPost"
+ inline_response_201_1:
+ type: "object"
+ properties:
+ S1BearerSubscription:
+ $ref: "#/definitions/S1BearerSubscription"
+ S1BearerSubscription_1:
+ type: "object"
+ properties:
+ S1BearerSubscription:
+ $ref: "#/definitions/S1BearerSubscription"
+ MeasTaSubscriptionPost_1:
+ type: "object"
+ properties:
+ MeasTaSubscription:
+ $ref: "#/definitions/MeasTaSubscriptionPost"
+ inline_response_201_2:
+ type: "object"
+ properties:
+ MeasTaSubscription:
+ $ref: "#/definitions/MeasTaSubscription"
+ inline_response_200_5:
+ type: "object"
+ required:
+ - "MeasTaSubscription"
+ properties:
+ MeasTaSubscription:
+ $ref: "#/definitions/MeasTaSubscription"
+ MeasTaSubscription_1:
+ type: "object"
+ properties:
+ MeasTaSubscription:
+ $ref: "#/definitions/MeasTaSubscription"
+ MeasRepUeSubscriptionPost_1:
+ type: "object"
+ properties:
+ MeasRepUeSubscription:
+ $ref: "#/definitions/MeasRepUeSubscriptionPost"
+ inline_response_201_3:
+ type: "object"
+ properties:
+ MeasRepUeSubscription:
+ $ref: "#/definitions/MeasRepUeSubscription"
+ inline_response_200_6:
+ type: "object"
+ required:
+ - "MeasRepUeSubscription"
+ properties:
+ MeasRepUeSubscription:
+ $ref: "#/definitions/MeasRepUeSubscription"
+ MeasRepUeSubscription_1:
+ type: "object"
+ properties:
+ MeasRepUeSubscription:
+ $ref: "#/definitions/MeasRepUeSubscription"
+ RabEstSubscriptionPost_1:
+ type: "object"
+ properties:
+ RabEstSubscription:
+ $ref: "#/definitions/RabEstSubscriptionPost"
+ inline_response_201_4:
+ type: "object"
+ properties:
+ RabEstSubscription:
+ $ref: "#/definitions/RabEstSubscription"
+ inline_response_200_7:
+ type: "object"
+ required:
+ - "RabEstSubscription"
+ properties:
+ RabEstSubscription:
+ $ref: "#/definitions/RabEstSubscription"
+ RabEstSubscription_1:
+ type: "object"
+ properties:
+ RabEstSubscription:
+ $ref: "#/definitions/RabEstSubscription"
+ RabModSubscriptionPost_1:
+ type: "object"
+ properties:
+ RabModSubscription:
+ $ref: "#/definitions/RabModSubscriptionPost"
+ inline_response_201_5:
+ type: "object"
+ properties:
+ RabModSubscription:
+ $ref: "#/definitions/RabModSubscription"
+ inline_response_200_8:
+ type: "object"
+ required:
+ - "RabModSubscription"
+ properties:
+ RabModSubscription:
+ $ref: "#/definitions/RabModSubscription"
+ RabModSubscription_1:
+ type: "object"
+ properties:
+ RabModSubscription:
+ $ref: "#/definitions/RabModSubscription"
+ RabRelSubscriptionPost_1:
+ type: "object"
+ properties:
+ RabRelSubscription:
+ $ref: "#/definitions/RabRelSubscriptionPost"
+ inline_response_201_6:
+ type: "object"
+ properties:
+ RabRelSubscription:
+ $ref: "#/definitions/RabRelSubscription"
+ inline_response_200_9:
+ type: "object"
+ required:
+ - "RabRelSubscription"
+ properties:
+ RabRelSubscription:
+ $ref: "#/definitions/RabRelSubscription"
+ RabRelSubscription_1:
+ type: "object"
+ properties:
+ RabRelSubscription:
+ $ref: "#/definitions/RabRelSubscription"
+ CaReConfSubscriptionPost_1:
+ type: "object"
+ properties:
+ CaReConfSubscription:
+ $ref: "#/definitions/CaReConfSubscriptionPost"
+ inline_response_201_7:
+ type: "object"
+ properties:
+ CaReConfSubscription:
+ $ref: "#/definitions/CaReConfSubscription"
+ inline_response_200_10:
+ type: "object"
+ required:
+ - "CaReConfSubscription"
+ properties:
+ CaReConfSubscription:
+ $ref: "#/definitions/CaReConfSubscription"
+ CaReConfSubscription_1:
+ type: "object"
+ properties:
+ CaReConfSubscription:
+ $ref: "#/definitions/CaReConfSubscription"
+parameters:
+ Body.CellChangeSubscriptionPost:
+ in: "body"
+ name: "CellChangeSubscriptionPost"
+ description: "Use to creates a subscription to cell change notifications based\
+ \ on the\n filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/CellChangeSubscriptionPost_1"
+ x-exportParamName: "CellChangeSubscriptionPost"
+ Body.CellChangeSubscription:
+ in: "body"
+ name: "CellChangeSubscription"
+ description: "Use to creates a subscription to cell change notifications based\
+ \ on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/CellChangeSubscription_1"
+ x-exportParamName: "CellChangeSubscription"
+ Body.S1BearerSubscriptionPost:
+ in: "body"
+ name: "S1BearerSubscriptionPost"
+ description: "Use to creates a subscription to S1 Bearer notifications based on\
+ \ the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/S1BearerSubscriptionPost_1"
+ x-exportParamName: "S1BearerSubscriptionPost"
+ Body.S1BearerSubscription:
+ in: "body"
+ name: "S1BearerSubscription"
+ description: "Use to creates a subscription to S1 Bearer notifications based on\
+ \ the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/S1BearerSubscription_1"
+ x-exportParamName: "S1BearerSubscription"
+ Body.MeasTaSubscriptionPost:
+ in: "body"
+ name: "MeasTaSubscriptionPost"
+ description: "Use to creates a subscription to UE Timing Advance notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/MeasTaSubscriptionPost_1"
+ x-exportParamName: "MeasTaSubscriptionPost"
+ Body.MeasTaSubscription:
+ in: "body"
+ name: "MeasTaSubscription"
+ description: "Use to creates a subscription to UE Timing Advance notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/MeasTaSubscription_1"
+ x-exportParamName: "MeasTaSubscription"
+ Body.MeasRepUeSubscriptionPost:
+ in: "body"
+ name: "MeasRepUeSubscriptionPost"
+ description: "Use to creates a subscription to UE measurement report notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/MeasRepUeSubscriptionPost_1"
+ x-exportParamName: "MeasRepUeSubscriptionPost"
+ Body.MeasRepUeSubscription:
+ in: "body"
+ name: "MeasRepUeSubscription"
+ description: "Use to creates a subscription to UE measurement report notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/MeasRepUeSubscription_1"
+ x-exportParamName: "MeasRepUeSubscription"
+ Body.RabEstSubscriptionPost:
+ in: "body"
+ name: "RabEstSubscriptionPost"
+ description: "Use to creates a subscription to RAB establishment notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/RabEstSubscriptionPost_1"
+ x-exportParamName: "RabEstSubscriptionPost"
+ Body.RabEstSubscription:
+ in: "body"
+ name: "RabEstSubscription"
+ description: "Use to creates a subscription to RAB establishment notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/RabEstSubscription_1"
+ x-exportParamName: "RabEstSubscription"
+ Body.RabModSubscriptionPost:
+ in: "body"
+ name: "RabModSubscriptionPost"
+ description: "Use to creates a subscription to RAB Modification notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/RabModSubscriptionPost_1"
+ x-exportParamName: "RabModSubscriptionPost"
+ Body.RabModSubscription:
+ in: "body"
+ name: "RabModSubscription"
+ description: "Use to creates a subscription to RAB Modification notifications\
+ \ based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/RabModSubscription_1"
+ x-exportParamName: "RabModSubscription"
+ Body.RabRelSubscriptionPost:
+ in: "body"
+ name: "RabRelSubscriptionPost"
+ description: "Use to creates a subscription to RAB Release notifications based\
+ \ on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/RabRelSubscriptionPost_1"
+ x-exportParamName: "RabRelSubscriptionPost"
+ Body.RabRelSubscription:
+ in: "body"
+ name: "RabRelSubscription"
+ description: "Use to creates a subscription to RAB Release notifications based\
+ \ on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/RabRelSubscription_1"
+ x-exportParamName: "RabRelSubscription"
+ Body.CaReConfSubscriptionPost:
+ in: "body"
+ name: "CaReConfSubscriptionPost"
+ description: "Use to creates a subscription to Carrier Aggregation Reconfiguration\
+ \ notifications based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/CaReConfSubscriptionPost_1"
+ x-exportParamName: "CaReConfSubscriptionPost"
+ Body.CaReConfSubscription:
+ in: "body"
+ name: "CaReConfSubscription"
+ description: "Use to creates a subscription to Carrier Aggregation Reconfiguration\
+ \ notifications based on the filter criteria"
+ required: true
+ schema:
+ $ref: "#/definitions/CaReConfSubscription_1"
+ x-exportParamName: "CaReConfSubscription"
+ Path.subscrId:
+ name: "subscriptionId"
+ in: "path"
+ description: "Subscription Id, specifically the \"self\" returned in the subscription\
+ \ request"
+ required: true
+ type: "string"
+ format: "uri"
+ x-exportParamName: "SubscriptionId"
+ Query.AppInsId:
+ name: "app_ins_id"
+ in: "query"
+ description: "Application instance identifier"
+ required: false
+ type: "string"
+ x-exportParamName: "AppInsId"
+ x-optionalDataType: "String"
+ Query.AppInsIdArr:
+ name: "app_ins_id"
+ in: "query"
+ description: "Application instance identifier"
+ required: true
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "AppInsId"
+ Query.UeIpv4Address:
+ name: "ue_ipv4_address"
+ in: "query"
+ description: "Comma separated list of IE IPv4 addresses as defined for the type\
+ \ for AssociateId"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "UeIpv4Address"
+ Query.UeIpv6Address:
+ name: "ue_ipv6_address"
+ in: "query"
+ description: "Comma separated list of IE IPv6 addresses as defined for the type\
+ \ for AssociateId"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "UeIpv6Address"
+ Query.NatedIpAddress:
+ name: "nated_ip_address"
+ in: "query"
+ description: "Comma separated list of IE NATed IP addresses as defined for the\
+ \ type for AssociateId"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "NatedIpAddress"
+ Query.GtpTeId:
+ name: "gtp_teid"
+ in: "query"
+ description: "Comma separated list of GTP TEID addresses as defined for the type\
+ \ for AssociateId"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "GtpTeid"
+ Query.CellId:
+ name: "cell_id"
+ in: "query"
+ description: "E-UTRAN Cell Identity as a bit string (size (28)), as defined in\
+ \ ETSI TS 136 413"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "CellId"
+ Query.ErabGbrDl:
+ name: "erab_gbr_dl"
+ in: "query"
+ description: "Guaranteed downlink E-RAB Bit Rate as defined in ETSI TS 123 401"
+ required: false
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "ErabGbrDl"
+ x-optionalDataType: "Int32"
+ Query.ErabGbrUl:
+ name: "erab_gbr_ul"
+ in: "query"
+ description: "Guaranteed uplink E-RAB Bit Rate as defined in ETSI TS 123 401"
+ required: false
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "ErabGbrUl"
+ x-optionalDataType: "Int32"
+ Query.ErabId:
+ name: "erab_id"
+ in: "query"
+ description: "E-RAB identifier"
+ required: false
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "ErabId"
+ x-optionalDataType: "Int32"
+ Query.ErabIdArr:
+ name: "erab_id"
+ in: "query"
+ description: "E-RAB identifier"
+ required: false
+ type: "array"
+ items:
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "ErabId"
+ Query.ErabMbrDl:
+ name: "erab_mbr_dl"
+ in: "query"
+ description: "Maximum downlink E-RAB Bit Rate as defined in ETSI TS 123 401"
+ required: false
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "ErabMbrDl"
+ x-optionalDataType: "Int32"
+ Query.ErabMbrUl:
+ name: "erab_mbr_ul"
+ in: "query"
+ description: "Maximum uplink E-RAB Bit Rate as defined in ETSI TS 123 401"
+ required: false
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "ErabMbrUl"
+ x-optionalDataType: "Int32"
+ Query.Qci:
+ name: "qci"
+ in: "query"
+ description: "QoS Class Identifier as defined in ETSI TS 123 401"
+ required: false
+ type: "integer"
+ format: "uint32"
+ x-exportParamName: "Qci"
+ x-optionalDataType: "Int32"
+ Query.TempUeId:
+ name: "temp_ue_id"
+ in: "query"
+ description: "The temporary identifier allocated for the specific UE as defined\
+ \ in ETSI TS 136 413"
+ required: false
+ type: "array"
+ items:
+ type: "string"
+ x-exportParamName: "TempUeId"
+externalDocs:
+ description: "ETSI MEC012 V1.1.1 Radio Network Information Service API"
+ url: "http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf"
diff --git a/go-packages/meep-rnis-client/api_default.go b/go-packages/meep-rnis-client/api_default.go
new file mode 100644
index 0000000000000000000000000000000000000000..94b0cc1f31e66dd1512efc2217ee012bc01ee5f2
--- /dev/null
+++ b/go-packages/meep-rnis-client/api_default.go
@@ -0,0 +1,6641 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+import (
+ "context"
+ "fmt"
+ "io/ioutil"
+ "net/http"
+ "net/url"
+ "strings"
+
+ "github.com/antihax/optional"
+)
+
+// Linger please
+var (
+ _ context.Context
+)
+
+type DefaultApiService service
+
+/*
+DefaultApiService
+Gets a subscription to Carrier Aggregation Reconfiguration notifications from Radio Network Information Service
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Subscription Id, specifically the \"self\" returned in the subscription request
+
+@return InlineResponse20010
+*/
+func (a *DefaultApiService) CaReConfSubscriptionSubscriptionsGET(ctx context.Context, subscriptionId string) (InlineResponse20010, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Get")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse20010
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/ca_reconf/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v InlineResponse20010
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Creates a subscription to Carrier Aggregation Reconfiguration notifications from Radio Network Information Service
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param caReConfSubscriptionPost Use to creates a subscription to Carrier Aggregation Reconfiguration notifications based on the filter criteria
+
+@return InlineResponse2017
+*/
+func (a *DefaultApiService) CaReConfSubscriptionSubscriptionsPOST(ctx context.Context, caReConfSubscriptionPost CaReConfSubscriptionPost1) (InlineResponse2017, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Post")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2017
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/ca_reconf"
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ // body params
+ localVarPostBody = &caReConfSubscriptionPost
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 201 {
+ var v InlineResponse2017
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 415 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 422 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Updates a subscription to Carrier Aggregation Reconfiguration notifications from Radio Network Information Service
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Subscription Id, specifically the \"self\" returned in the subscription request
+ * @param caReConfSubscription Use to creates a subscription to Carrier Aggregation Reconfiguration notifications based on the filter criteria
+
+@return CaReConfSubscription1
+*/
+func (a *DefaultApiService) CaReConfSubscriptionSubscriptionsPUT(ctx context.Context, subscriptionId string, caReConfSubscription CaReConfSubscription1) (CaReConfSubscription1, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Put")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue CaReConfSubscription1
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/ca_reconf/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ // body params
+ localVarPostBody = &caReConfSubscription
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v CaReConfSubscription1
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 412 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 422 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Method to delete a subscription
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Subscription Id, specifically the \"self\" returned in the subscription request
+
+
+*/
+func (a *DefaultApiService) CaReConfSubscriptionsSubscrIdDELETE(ctx context.Context, subscriptionId string) (*http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Delete")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/ca_reconf/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ return localVarHttpResponse, newErr
+ }
+
+ return localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Get cell change subscription information
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Subscription Id, specifically the \"self\" returned in the subscription request
+
+@return InlineResponse2004
+*/
+func (a *DefaultApiService) CellChangeSubscriptionsGET(ctx context.Context, subscriptionId string) (InlineResponse2004, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Get")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2004
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/cell_change/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v InlineResponse2004
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Creates a subscription to cell change notifications from Radio Network Information Service
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param cellChangeSubscriptionPost Use to creates a subscription to cell change notifications based on the filter criteria
+
+@return InlineResponse201
+*/
+func (a *DefaultApiService) CellChangeSubscriptionsPOST(ctx context.Context, cellChangeSubscriptionPost CellChangeSubscriptionPost1) (InlineResponse201, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Post")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse201
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/cell_change"
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ // body params
+ localVarPostBody = &cellChangeSubscriptionPost
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 201 {
+ var v InlineResponse201
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 415 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 422 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Updates a subscription to cell change notifications from Radio Network Information Service
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param cellChangeSubscription Use to creates a subscription to cell change notifications based on the filter criteria
+ * @param subscriptionId Subscription Id, specifically the \"self\" returned in the subscription request
+
+@return CellChangeSubscription1
+*/
+func (a *DefaultApiService) CellChangeSubscriptionsPUT(ctx context.Context, cellChangeSubscription CellChangeSubscription1, subscriptionId string) (CellChangeSubscription1, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Put")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue CellChangeSubscription1
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/cell_change/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ // body params
+ localVarPostBody = &cellChangeSubscription
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v CellChangeSubscription1
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 412 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 422 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Method to delete a subscription
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Subscription Id, specifically the \"self\" returned in the subscription request
+
+
+*/
+func (a *DefaultApiService) CellChangeSubscriptionsSubscrIdDELETE(ctx context.Context, subscriptionId string) (*http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Delete")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/cell_change/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ return localVarHttpResponse, newErr
+ }
+
+ return localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Updates a subscription to UE measurement report notifications from Radio Network Information Service
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Subscription Id, specifically the \"self\" returned in the subscription request
+ * @param measRepUeSubscription Use to creates a subscription to UE measurement report notifications based on the filter criteria
+
+@return MeasRepUeSubscription1
+*/
+func (a *DefaultApiService) MeasRepUeReportSubscriptionsPUT(ctx context.Context, subscriptionId string, measRepUeSubscription MeasRepUeSubscription1) (MeasRepUeSubscription1, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Put")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue MeasRepUeSubscription1
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/meas_rep_ue/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ // body params
+ localVarPostBody = &measRepUeSubscription
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v MeasRepUeSubscription1
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 412 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 422 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Gets a subscription to UE measurement report notifications from Radio Network Information Service
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Subscription Id, specifically the \"self\" returned in the subscription request
+
+@return InlineResponse2006
+*/
+func (a *DefaultApiService) MeasRepUeSubscriptionsGET(ctx context.Context, subscriptionId string) (InlineResponse2006, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Get")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2006
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/meas_rep_ue/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v InlineResponse2006
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Creates a subscription to UE measurement report notifications from Radio Network Information Service
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param measRepUeSubscriptionPost Use to creates a subscription to UE measurement report notifications based on the filter criteria
+
+@return InlineResponse2013
+*/
+func (a *DefaultApiService) MeasRepUeSubscriptionsPOST(ctx context.Context, measRepUeSubscriptionPost MeasRepUeSubscriptionPost1) (InlineResponse2013, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Post")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2013
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/meas_rep_ue"
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ // body params
+ localVarPostBody = &measRepUeSubscriptionPost
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 201 {
+ var v InlineResponse2013
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 415 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 422 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Method to delete a subscription
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Subscription Id, specifically the \"self\" returned in the subscription request
+
+
+*/
+func (a *DefaultApiService) MeasRepUeSubscriptionsSubscrIdDELETE(ctx context.Context, subscriptionId string) (*http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Delete")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/meas_rep_ue/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ return localVarHttpResponse, newErr
+ }
+
+ return localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Gets UE Timing Advance subscription information from Radio Network Information Service
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Subscription Id, specifically the \"self\" returned in the subscription request
+
+@return InlineResponse2005
+*/
+func (a *DefaultApiService) MeasTaSubscriptionsGET(ctx context.Context, subscriptionId string) (InlineResponse2005, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Get")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2005
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/ta/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v InlineResponse2005
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Creates a subscription to UE Timing Advance notifications from Radio Network Information Service
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param measTaSubscriptionPost Use to creates a subscription to UE Timing Advance notifications based on the filter criteria
+
+@return InlineResponse2012
+*/
+func (a *DefaultApiService) MeasTaSubscriptionsPOST(ctx context.Context, measTaSubscriptionPost MeasTaSubscriptionPost1) (InlineResponse2012, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Post")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2012
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/ta"
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ // body params
+ localVarPostBody = &measTaSubscriptionPost
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 201 {
+ var v InlineResponse2012
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 415 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 422 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Updates a subscription to UE Timing Advance notifications from Radio Network Information Service
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Subscription Id, specifically the \"self\" returned in the subscription request
+ * @param measTaSubscription Use to creates a subscription to UE Timing Advance notifications based on the filter criteria
+
+@return MeasTaSubscription1
+*/
+func (a *DefaultApiService) MeasTaSubscriptionsPUT(ctx context.Context, subscriptionId string, measTaSubscription MeasTaSubscription1) (MeasTaSubscription1, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Put")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue MeasTaSubscription1
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/ta/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ // body params
+ localVarPostBody = &measTaSubscription
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v MeasTaSubscription1
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 412 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 422 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Method to delete a subscription
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Subscription Id, specifically the \"self\" returned in the subscription request
+
+
+*/
+func (a *DefaultApiService) MeasTaSubscriptionsSubscrIdDELETE(ctx context.Context, subscriptionId string) (*http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Delete")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/ta/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ return localVarHttpResponse, newErr
+ }
+
+ return localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Gets the information on Mobile Network(s) that are associated with a specific mobile edge application instance
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param appInsId Application instance identifier
+
+@return InlineResponse2001
+*/
+func (a *DefaultApiService) PlmnInfoGET(ctx context.Context, appInsId []string) (InlineResponse2001, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Get")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2001
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/queries/plmn_info"
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ localVarQueryParams.Add("app_ins_id", parameterToString(appInsId, "csv"))
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v InlineResponse2001
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Gets a subscription to RAB establishment notifications from Radio Network Information Service
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Subscription Id, specifically the \"self\" returned in the subscription request
+
+@return InlineResponse2007
+*/
+func (a *DefaultApiService) RabEstSubscriptionSubscriptionsGET(ctx context.Context, subscriptionId string) (InlineResponse2007, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Get")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2007
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/rab_est/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v InlineResponse2007
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Creates a subscription to RAB establishment notifications from Radio Network Information Service
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param rabEstSubscriptionPost Use to creates a subscription to RAB establishment notifications based on the filter criteria
+
+@return InlineResponse2014
+*/
+func (a *DefaultApiService) RabEstSubscriptionSubscriptionsPOST(ctx context.Context, rabEstSubscriptionPost RabEstSubscriptionPost1) (InlineResponse2014, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Post")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2014
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/rab_est"
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ // body params
+ localVarPostBody = &rabEstSubscriptionPost
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 201 {
+ var v InlineResponse2014
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 415 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 422 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Updates a subscription to RAB establishment notifications from Radio Network Information Service
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Subscription Id, specifically the \"self\" returned in the subscription request
+ * @param rabEstSubscription Use to creates a subscription to RAB establishment notifications based on the filter criteria
+
+@return RabEstSubscription1
+*/
+func (a *DefaultApiService) RabEstSubscriptionSubscriptionsPUT(ctx context.Context, subscriptionId string, rabEstSubscription RabEstSubscription1) (RabEstSubscription1, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Put")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue RabEstSubscription1
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/rab_est/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ // body params
+ localVarPostBody = &rabEstSubscription
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v RabEstSubscription1
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 412 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 422 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Method to delete a subscription
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Subscription Id, specifically the \"self\" returned in the subscription request
+
+
+*/
+func (a *DefaultApiService) RabEstSubscriptionsSubscrIdDELETE(ctx context.Context, subscriptionId string) (*http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Delete")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/rab_est/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ return localVarHttpResponse, newErr
+ }
+
+ return localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Gets information on existing E-RABs that are associated with a specific mobile edge application instance
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param optional nil or *RabInfoGETOpts - Optional Parameters:
+ * @param "AppInsId" (optional.String) - Application instance identifier
+ * @param "CellId" (optional.Interface of []string) - E-UTRAN Cell Identity as a bit string (size (28)), as defined in ETSI TS 136 413
+ * @param "UeIpv4Address" (optional.Interface of []string) - Comma separated list of IE IPv4 addresses as defined for the type for AssociateId
+ * @param "UeIpv6Address" (optional.Interface of []string) - Comma separated list of IE IPv6 addresses as defined for the type for AssociateId
+ * @param "NatedIpAddress" (optional.Interface of []string) - Comma separated list of IE NATed IP addresses as defined for the type for AssociateId
+ * @param "GtpTeid" (optional.Interface of []string) - Comma separated list of GTP TEID addresses as defined for the type for AssociateId
+ * @param "ErabId" (optional.Int32) - E-RAB identifier
+ * @param "Qci" (optional.Int32) - QoS Class Identifier as defined in ETSI TS 123 401
+ * @param "ErabMbrDl" (optional.Int32) - Maximum downlink E-RAB Bit Rate as defined in ETSI TS 123 401
+ * @param "ErabMbrUl" (optional.Int32) - Maximum uplink E-RAB Bit Rate as defined in ETSI TS 123 401
+ * @param "ErabGbrDl" (optional.Int32) - Guaranteed downlink E-RAB Bit Rate as defined in ETSI TS 123 401
+ * @param "ErabGbrUl" (optional.Int32) - Guaranteed uplink E-RAB Bit Rate as defined in ETSI TS 123 401
+
+@return InlineResponse200
+*/
+
+type RabInfoGETOpts struct {
+ AppInsId optional.String
+ CellId optional.Interface
+ UeIpv4Address optional.Interface
+ UeIpv6Address optional.Interface
+ NatedIpAddress optional.Interface
+ GtpTeid optional.Interface
+ ErabId optional.Int32
+ Qci optional.Int32
+ ErabMbrDl optional.Int32
+ ErabMbrUl optional.Int32
+ ErabGbrDl optional.Int32
+ ErabGbrUl optional.Int32
+}
+
+func (a *DefaultApiService) RabInfoGET(ctx context.Context, localVarOptionals *RabInfoGETOpts) (InlineResponse200, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Get")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse200
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/queries/rab_info"
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ if localVarOptionals != nil && localVarOptionals.AppInsId.IsSet() {
+ localVarQueryParams.Add("app_ins_id", parameterToString(localVarOptionals.AppInsId.Value(), ""))
+ }
+ if localVarOptionals != nil && localVarOptionals.CellId.IsSet() {
+ localVarQueryParams.Add("cell_id", parameterToString(localVarOptionals.CellId.Value(), "csv"))
+ }
+ if localVarOptionals != nil && localVarOptionals.UeIpv4Address.IsSet() {
+ localVarQueryParams.Add("ue_ipv4_address", parameterToString(localVarOptionals.UeIpv4Address.Value(), "csv"))
+ }
+ if localVarOptionals != nil && localVarOptionals.UeIpv6Address.IsSet() {
+ localVarQueryParams.Add("ue_ipv6_address", parameterToString(localVarOptionals.UeIpv6Address.Value(), "csv"))
+ }
+ if localVarOptionals != nil && localVarOptionals.NatedIpAddress.IsSet() {
+ localVarQueryParams.Add("nated_ip_address", parameterToString(localVarOptionals.NatedIpAddress.Value(), "csv"))
+ }
+ if localVarOptionals != nil && localVarOptionals.GtpTeid.IsSet() {
+ localVarQueryParams.Add("gtp_teid", parameterToString(localVarOptionals.GtpTeid.Value(), "csv"))
+ }
+ if localVarOptionals != nil && localVarOptionals.ErabId.IsSet() {
+ localVarQueryParams.Add("erab_id", parameterToString(localVarOptionals.ErabId.Value(), ""))
+ }
+ if localVarOptionals != nil && localVarOptionals.Qci.IsSet() {
+ localVarQueryParams.Add("qci", parameterToString(localVarOptionals.Qci.Value(), ""))
+ }
+ if localVarOptionals != nil && localVarOptionals.ErabMbrDl.IsSet() {
+ localVarQueryParams.Add("erab_mbr_dl", parameterToString(localVarOptionals.ErabMbrDl.Value(), ""))
+ }
+ if localVarOptionals != nil && localVarOptionals.ErabMbrUl.IsSet() {
+ localVarQueryParams.Add("erab_mbr_ul", parameterToString(localVarOptionals.ErabMbrUl.Value(), ""))
+ }
+ if localVarOptionals != nil && localVarOptionals.ErabGbrDl.IsSet() {
+ localVarQueryParams.Add("erab_gbr_dl", parameterToString(localVarOptionals.ErabGbrDl.Value(), ""))
+ }
+ if localVarOptionals != nil && localVarOptionals.ErabGbrUl.IsSet() {
+ localVarQueryParams.Add("erab_gbr_ul", parameterToString(localVarOptionals.ErabGbrUl.Value(), ""))
+ }
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v InlineResponse200
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Gets a subscription to RAB Modification notifications from Radio Network Information Service
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Subscription Id, specifically the \"self\" returned in the subscription request
+
+@return InlineResponse2008
+*/
+func (a *DefaultApiService) RabModSubscriptionSubscriptionsGET(ctx context.Context, subscriptionId string) (InlineResponse2008, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Get")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2008
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/rab_mod/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v InlineResponse2008
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Creates a subscription to RAB Modification notifications from Radio Network Information Service
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param rabModSubscriptionPost Use to creates a subscription to RAB Modification notifications based on the filter criteria
+
+@return InlineResponse2015
+*/
+func (a *DefaultApiService) RabModSubscriptionSubscriptionsPOST(ctx context.Context, rabModSubscriptionPost RabModSubscriptionPost1) (InlineResponse2015, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Post")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2015
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/rab_mod"
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ // body params
+ localVarPostBody = &rabModSubscriptionPost
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 201 {
+ var v InlineResponse2015
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 415 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 422 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Updates a subscription to RAB Modification notifications from Radio Network Information Service
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Subscription Id, specifically the \"self\" returned in the subscription request
+ * @param rabModSubscription Use to creates a subscription to RAB Modification notifications based on the filter criteria
+
+@return RabModSubscription1
+*/
+func (a *DefaultApiService) RabModSubscriptionSubscriptionsPUT(ctx context.Context, subscriptionId string, rabModSubscription RabModSubscription1) (RabModSubscription1, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Put")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue RabModSubscription1
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/rab_mod/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ // body params
+ localVarPostBody = &rabModSubscription
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v RabModSubscription1
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 412 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 422 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Method to delete a subscription
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Subscription Id, specifically the \"self\" returned in the subscription request
+
+
+*/
+func (a *DefaultApiService) RabModSubscriptionsSubscrIdDELETE(ctx context.Context, subscriptionId string) (*http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Delete")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/rab_mod/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ return localVarHttpResponse, newErr
+ }
+
+ return localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Gets a subscription to RAB Release notifications from Radio Network Information Service
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Subscription Id, specifically the \"self\" returned in the subscription request
+
+@return InlineResponse2009
+*/
+func (a *DefaultApiService) RabRelSubscriptionSubscriptionsGET(ctx context.Context, subscriptionId string) (InlineResponse2009, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Get")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2009
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/rab_rel/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v InlineResponse2009
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Creates a subscription to RAB Release notifications from Radio Network Information Service
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param rabRelSubscriptionPost Use to creates a subscription to RAB Release notifications based on the filter criteria
+
+@return InlineResponse2016
+*/
+func (a *DefaultApiService) RabRelSubscriptionSubscriptionsPOST(ctx context.Context, rabRelSubscriptionPost RabRelSubscriptionPost1) (InlineResponse2016, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Post")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2016
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/rab_rel"
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ // body params
+ localVarPostBody = &rabRelSubscriptionPost
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 201 {
+ var v InlineResponse2016
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 415 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 422 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Updates a subscription to RAB Release notifications from Radio Network Information Service
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Subscription Id, specifically the \"self\" returned in the subscription request
+ * @param rabRelSubscription Use to creates a subscription to RAB Release notifications based on the filter criteria
+
+@return RabRelSubscription1
+*/
+func (a *DefaultApiService) RabRelSubscriptionSubscriptionsPUT(ctx context.Context, subscriptionId string, rabRelSubscription RabRelSubscription1) (RabRelSubscription1, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Put")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue RabRelSubscription1
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/rab_rel/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ // body params
+ localVarPostBody = &rabRelSubscription
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v RabRelSubscription1
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 412 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 422 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Method to delete a subscription
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Subscription Id, specifically the \"self\" returned in the subscription request
+
+
+*/
+func (a *DefaultApiService) RabRelSubscriptionsSubscrIdDELETE(ctx context.Context, subscriptionId string) (*http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Delete")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/rab_rel/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ return localVarHttpResponse, newErr
+ }
+
+ return localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Gets information on existing E-RABs that are associated with a specific mobile edge application instance
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param optional nil or *S1BearerInfoGETOpts - Optional Parameters:
+ * @param "TempUeId" (optional.Interface of []string) - The temporary identifier allocated for the specific UE as defined in ETSI TS 136 413
+ * @param "UeIpv4Address" (optional.Interface of []string) - Comma separated list of IE IPv4 addresses as defined for the type for AssociateId
+ * @param "UeIpv6Address" (optional.Interface of []string) - Comma separated list of IE IPv6 addresses as defined for the type for AssociateId
+ * @param "NatedIpAddress" (optional.Interface of []string) - Comma separated list of IE NATed IP addresses as defined for the type for AssociateId
+ * @param "GtpTeid" (optional.Interface of []string) - Comma separated list of GTP TEID addresses as defined for the type for AssociateId
+ * @param "CellId" (optional.Interface of []string) - E-UTRAN Cell Identity as a bit string (size (28)), as defined in ETSI TS 136 413
+ * @param "ErabId" (optional.Interface of []int32) - E-RAB identifier
+
+@return InlineResponse2002
+*/
+
+type S1BearerInfoGETOpts struct {
+ TempUeId optional.Interface
+ UeIpv4Address optional.Interface
+ UeIpv6Address optional.Interface
+ NatedIpAddress optional.Interface
+ GtpTeid optional.Interface
+ CellId optional.Interface
+ ErabId optional.Interface
+}
+
+func (a *DefaultApiService) S1BearerInfoGET(ctx context.Context, localVarOptionals *S1BearerInfoGETOpts) (InlineResponse2002, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Get")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2002
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/queries/s1_bearer_info"
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ if localVarOptionals != nil && localVarOptionals.TempUeId.IsSet() {
+ localVarQueryParams.Add("temp_ue_id", parameterToString(localVarOptionals.TempUeId.Value(), "csv"))
+ }
+ if localVarOptionals != nil && localVarOptionals.UeIpv4Address.IsSet() {
+ localVarQueryParams.Add("ue_ipv4_address", parameterToString(localVarOptionals.UeIpv4Address.Value(), "csv"))
+ }
+ if localVarOptionals != nil && localVarOptionals.UeIpv6Address.IsSet() {
+ localVarQueryParams.Add("ue_ipv6_address", parameterToString(localVarOptionals.UeIpv6Address.Value(), "csv"))
+ }
+ if localVarOptionals != nil && localVarOptionals.NatedIpAddress.IsSet() {
+ localVarQueryParams.Add("nated_ip_address", parameterToString(localVarOptionals.NatedIpAddress.Value(), "csv"))
+ }
+ if localVarOptionals != nil && localVarOptionals.GtpTeid.IsSet() {
+ localVarQueryParams.Add("gtp_teid", parameterToString(localVarOptionals.GtpTeid.Value(), "csv"))
+ }
+ if localVarOptionals != nil && localVarOptionals.CellId.IsSet() {
+ localVarQueryParams.Add("cell_id", parameterToString(localVarOptionals.CellId.Value(), "csv"))
+ }
+ if localVarOptionals != nil && localVarOptionals.ErabId.IsSet() {
+ localVarQueryParams.Add("erab_id", parameterToString(localVarOptionals.ErabId.Value(), "csv"))
+ }
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v InlineResponse2002
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Gets a subscription to S1 bearer notifications from Radio Network Information Service
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Subscription Id, specifically the \"self\" returned in the subscription request
+
+@return InlineResponse2011
+*/
+func (a *DefaultApiService) S1BearerSubscriptionSubscriptionsGET(ctx context.Context, subscriptionId string) (InlineResponse2011, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Get")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2011
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/s1_bearer/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v InlineResponse2011
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Creates a subscription to S1 bearer notifications from Radio Network Information Service
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param s1BearerSubscriptionPost Use to creates a subscription to S1 Bearer notifications based on the filter criteria
+
+@return InlineResponse2011
+*/
+func (a *DefaultApiService) S1BearerSubscriptionSubscriptionsPOST(ctx context.Context, s1BearerSubscriptionPost S1BearerSubscriptionPost1) (InlineResponse2011, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Post")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2011
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/s1_bearer"
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ // body params
+ localVarPostBody = &s1BearerSubscriptionPost
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 201 {
+ var v InlineResponse2011
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 415 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 422 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Updates a subscription to S1 bearer notifications from Radio Network Information Service
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Subscription Id, specifically the \"self\" returned in the subscription request
+ * @param s1BearerSubscription Use to creates a subscription to S1 Bearer notifications based on the filter criteria
+
+@return S1BearerSubscription1
+*/
+func (a *DefaultApiService) S1BearerSubscriptionSubscriptionsPUT(ctx context.Context, subscriptionId string, s1BearerSubscription S1BearerSubscription1) (S1BearerSubscription1, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Put")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue S1BearerSubscription1
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/s1_bearer/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ // body params
+ localVarPostBody = &s1BearerSubscription
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v S1BearerSubscription1
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 412 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 422 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+Method to delete a subscription
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Subscription Id, specifically the \"self\" returned in the subscription request
+
+
+*/
+func (a *DefaultApiService) S1BearerSubscriptionsSubscrIdDELETE(ctx context.Context, subscriptionId string) (*http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Delete")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/s1_bearer/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ return localVarHttpResponse, newErr
+ }
+
+ return localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+The GET method can be used to request information about the cell_change subscriptions for this requestor
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+
+@return InlineResponse2003
+*/
+func (a *DefaultApiService) SubscriptionLinkListSubscriptionsCcGET(ctx context.Context) (InlineResponse2003, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Get")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2003
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/cell_change"
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v InlineResponse2003
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+The GET method can be used to request information about the ca_reconf subscriptions for this requestor
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+
+@return InlineResponse2003
+*/
+func (a *DefaultApiService) SubscriptionLinkListSubscriptionsCrGET(ctx context.Context) (InlineResponse2003, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Get")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2003
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/ca_reconf"
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v InlineResponse2003
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+The GET method can be used to request information about the subscriptions for this requestor
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+
+@return InlineResponse2003
+*/
+func (a *DefaultApiService) SubscriptionLinkListSubscriptionsGET(ctx context.Context) (InlineResponse2003, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Get")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2003
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/"
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v InlineResponse2003
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+The GET method can be used to request information about the meas_rep_ue subscriptions for this requestor
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+
+@return InlineResponse2003
+*/
+func (a *DefaultApiService) SubscriptionLinkListSubscriptionsMrGET(ctx context.Context) (InlineResponse2003, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Get")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2003
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/meas_rep_ue"
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v InlineResponse2003
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+The GET method can be used to request information about the rab_est subscriptions for this requestor
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+
+@return InlineResponse2003
+*/
+func (a *DefaultApiService) SubscriptionLinkListSubscriptionsReGET(ctx context.Context) (InlineResponse2003, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Get")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2003
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/rab_est"
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v InlineResponse2003
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+The GET method can be used to request information about the rab_mod subscriptions for this requestor
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+
+@return InlineResponse2003
+*/
+func (a *DefaultApiService) SubscriptionLinkListSubscriptionsRmGET(ctx context.Context) (InlineResponse2003, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Get")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2003
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/rab_mod"
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v InlineResponse2003
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+The GET method can be used to request information about the rab_rel subscriptions for this requestor
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+
+@return InlineResponse2003
+*/
+func (a *DefaultApiService) SubscriptionLinkListSubscriptionsRrGET(ctx context.Context) (InlineResponse2003, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Get")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2003
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/rab_rel"
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v InlineResponse2003
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+The GET method can be used to request information about the s1_bearer subscriptions for this requestor
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+
+@return InlineResponse2003
+*/
+func (a *DefaultApiService) SubscriptionLinkListSubscriptionsS1GET(ctx context.Context) (InlineResponse2003, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Get")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2003
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/s1_bearer"
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v InlineResponse2003
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
+
+/*
+DefaultApiService
+The GET method can be used to request information about the ta subscriptions for this requestor
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+
+@return InlineResponse2003
+*/
+func (a *DefaultApiService) SubscriptionLinkListSubscriptionsTaGET(ctx context.Context) (InlineResponse2003, *http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Get")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ localVarReturnValue InlineResponse2003
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/subscriptions/ta"
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json", "application/problem+json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return localVarReturnValue, nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode < 300 {
+ // If we succeed, return the data, otherwise pass on to decode error.
+ err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err == nil {
+ return localVarReturnValue, localVarHttpResponse, err
+ }
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ if localVarHttpResponse.StatusCode == 200 {
+ var v InlineResponse2003
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 400 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 401 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 403 {
+ var v InlineResponse403
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 404 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 406 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ if localVarHttpResponse.StatusCode == 429 {
+ var v InlineResponse400
+ err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
+ if err != nil {
+ newErr.error = err.Error()
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+ newErr.model = v
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, newErr
+ }
+
+ return localVarReturnValue, localVarHttpResponse, nil
+}
diff --git a/go-packages/meep-rnis-client/client.go b/go-packages/meep-rnis-client/client.go
new file mode 100644
index 0000000000000000000000000000000000000000..a814148d001f798d97a7a3aae343bd0111bef1be
--- /dev/null
+++ b/go-packages/meep-rnis-client/client.go
@@ -0,0 +1,478 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+import (
+ "bytes"
+ "context"
+ "encoding/json"
+ "encoding/xml"
+ "errors"
+ "fmt"
+ "io"
+ "mime/multipart"
+ "net/http"
+ "net/url"
+ "os"
+ "path/filepath"
+ "reflect"
+ "regexp"
+ "strconv"
+ "strings"
+ "time"
+ "unicode/utf8"
+
+ "golang.org/x/oauth2"
+)
+
+var (
+ jsonCheck = regexp.MustCompile("(?i:[application|text]/json)")
+ xmlCheck = regexp.MustCompile("(?i:[application|text]/xml)")
+)
+
+// APIClient manages communication with the AdvantEDGE Radio Network Information Service REST API API v1.1.1
+// In most cases there should be only one, shared, APIClient.
+type APIClient struct {
+ cfg *Configuration
+ common service // Reuse a single struct instead of allocating one for each service on the heap.
+
+ // API Services
+
+ DefaultApi *DefaultApiService
+}
+
+type service struct {
+ client *APIClient
+}
+
+// NewAPIClient creates a new API client. Requires a userAgent string describing your application.
+// optionally a custom http.Client to allow for advanced features such as caching.
+func NewAPIClient(cfg *Configuration) *APIClient {
+ if cfg.HTTPClient == nil {
+ cfg.HTTPClient = http.DefaultClient
+ }
+
+ c := &APIClient{}
+ c.cfg = cfg
+ c.common.client = c
+
+ // API Services
+ c.DefaultApi = (*DefaultApiService)(&c.common)
+
+ return c
+}
+
+func atoi(in string) (int, error) {
+ return strconv.Atoi(in)
+}
+
+// selectHeaderContentType select a content type from the available list.
+func selectHeaderContentType(contentTypes []string) string {
+ if len(contentTypes) == 0 {
+ return ""
+ }
+ if contains(contentTypes, "application/json") {
+ return "application/json"
+ }
+ return contentTypes[0] // use the first content type specified in 'consumes'
+}
+
+// selectHeaderAccept join all accept types and return
+func selectHeaderAccept(accepts []string) string {
+ if len(accepts) == 0 {
+ return ""
+ }
+
+ if contains(accepts, "application/json") {
+ return "application/json"
+ }
+
+ return strings.Join(accepts, ",")
+}
+
+// contains is a case insenstive match, finding needle in a haystack
+func contains(haystack []string, needle string) bool {
+ for _, a := range haystack {
+ if strings.ToLower(a) == strings.ToLower(needle) {
+ return true
+ }
+ }
+ return false
+}
+
+// Verify optional parameters are of the correct type.
+func typeCheckParameter(obj interface{}, expected string, name string) error {
+ // Make sure there is an object.
+ if obj == nil {
+ return nil
+ }
+
+ // Check the type is as expected.
+ if reflect.TypeOf(obj).String() != expected {
+ return fmt.Errorf("Expected %s to be of type %s but received %s.", name, expected, reflect.TypeOf(obj).String())
+ }
+ return nil
+}
+
+// parameterToString convert interface{} parameters to string, using a delimiter if format is provided.
+func parameterToString(obj interface{}, collectionFormat string) string {
+ var delimiter string
+
+ switch collectionFormat {
+ case "pipes":
+ delimiter = "|"
+ case "ssv":
+ delimiter = " "
+ case "tsv":
+ delimiter = "\t"
+ case "csv":
+ delimiter = ","
+ }
+
+ if reflect.TypeOf(obj).Kind() == reflect.Slice {
+ return strings.Trim(strings.Replace(fmt.Sprint(obj), " ", delimiter, -1), "[]")
+ }
+
+ return fmt.Sprintf("%v", obj)
+}
+
+// callAPI do the request.
+func (c *APIClient) callAPI(request *http.Request) (*http.Response, error) {
+ return c.cfg.HTTPClient.Do(request)
+}
+
+// Change base path to allow switching to mocks
+func (c *APIClient) ChangeBasePath(path string) {
+ c.cfg.BasePath = path
+}
+
+// prepareRequest build the request
+func (c *APIClient) prepareRequest(
+ ctx context.Context,
+ path string, method string,
+ postBody interface{},
+ headerParams map[string]string,
+ queryParams url.Values,
+ formParams url.Values,
+ fileName string,
+ fileBytes []byte) (localVarRequest *http.Request, err error) {
+
+ var body *bytes.Buffer
+
+ // Detect postBody type and post.
+ if postBody != nil {
+ contentType := headerParams["Content-Type"]
+ if contentType == "" {
+ contentType = detectContentType(postBody)
+ headerParams["Content-Type"] = contentType
+ }
+
+ body, err = setBody(postBody, contentType)
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ // add form parameters and file if available.
+ if len(formParams) > 0 || (len(fileBytes) > 0 && fileName != "") {
+ if body != nil {
+ return nil, errors.New("Cannot specify postBody and multipart form at the same time.")
+ }
+ body = &bytes.Buffer{}
+ w := multipart.NewWriter(body)
+
+ for k, v := range formParams {
+ for _, iv := range v {
+ if strings.HasPrefix(k, "@") { // file
+ err = addFile(w, k[1:], iv)
+ if err != nil {
+ return nil, err
+ }
+ } else { // form value
+ w.WriteField(k, iv)
+ }
+ }
+ }
+ if len(fileBytes) > 0 && fileName != "" {
+ w.Boundary()
+ //_, fileNm := filepath.Split(fileName)
+ part, err := w.CreateFormFile("file", filepath.Base(fileName))
+ if err != nil {
+ return nil, err
+ }
+ _, err = part.Write(fileBytes)
+ if err != nil {
+ return nil, err
+ }
+ // Set the Boundary in the Content-Type
+ headerParams["Content-Type"] = w.FormDataContentType()
+ }
+
+ // Set Content-Length
+ headerParams["Content-Length"] = fmt.Sprintf("%d", body.Len())
+ w.Close()
+ }
+
+ // Setup path and query parameters
+ url, err := url.Parse(path)
+ if err != nil {
+ return nil, err
+ }
+
+ // Adding Query Param
+ query := url.Query()
+ for k, v := range queryParams {
+ for _, iv := range v {
+ query.Add(k, iv)
+ }
+ }
+
+ // Encode the parameters.
+ url.RawQuery = query.Encode()
+
+ // Generate a new request
+ if body != nil {
+ localVarRequest, err = http.NewRequest(method, url.String(), body)
+ } else {
+ localVarRequest, err = http.NewRequest(method, url.String(), nil)
+ }
+ if err != nil {
+ return nil, err
+ }
+
+ // add header parameters, if any
+ if len(headerParams) > 0 {
+ headers := http.Header{}
+ for h, v := range headerParams {
+ headers.Set(h, v)
+ }
+ localVarRequest.Header = headers
+ }
+
+ // Override request host, if applicable
+ if c.cfg.Host != "" {
+ localVarRequest.Host = c.cfg.Host
+ }
+
+ // Add the user agent to the request.
+ localVarRequest.Header.Add("User-Agent", c.cfg.UserAgent)
+
+ if ctx != nil {
+ // add context to the request
+ localVarRequest = localVarRequest.WithContext(ctx)
+
+ // Walk through any authentication.
+
+ // OAuth2 authentication
+ if tok, ok := ctx.Value(ContextOAuth2).(oauth2.TokenSource); ok {
+ // We were able to grab an oauth2 token from the context
+ var latestToken *oauth2.Token
+ if latestToken, err = tok.Token(); err != nil {
+ return nil, err
+ }
+
+ latestToken.SetAuthHeader(localVarRequest)
+ }
+
+ // Basic HTTP Authentication
+ if auth, ok := ctx.Value(ContextBasicAuth).(BasicAuth); ok {
+ localVarRequest.SetBasicAuth(auth.UserName, auth.Password)
+ }
+
+ // AccessToken Authentication
+ if auth, ok := ctx.Value(ContextAccessToken).(string); ok {
+ localVarRequest.Header.Add("Authorization", "Bearer "+auth)
+ }
+ }
+
+ for header, value := range c.cfg.DefaultHeader {
+ localVarRequest.Header.Add(header, value)
+ }
+
+ return localVarRequest, nil
+}
+
+func (c *APIClient) decode(v interface{}, b []byte, contentType string) (err error) {
+ if strings.Contains(contentType, "application/xml") {
+ if err = xml.Unmarshal(b, v); err != nil {
+ return err
+ }
+ return nil
+ } else if strings.Contains(contentType, "application/json") {
+ if err = json.Unmarshal(b, v); err != nil {
+ return err
+ }
+ return nil
+ }
+ return errors.New("undefined response type")
+}
+
+// Add a file to the multipart request
+func addFile(w *multipart.Writer, fieldName, path string) error {
+ file, err := os.Open(path)
+ if err != nil {
+ return err
+ }
+ defer file.Close()
+
+ part, err := w.CreateFormFile(fieldName, filepath.Base(path))
+ if err != nil {
+ return err
+ }
+ _, err = io.Copy(part, file)
+
+ return err
+}
+
+// Prevent trying to import "fmt"
+func reportError(format string, a ...interface{}) error {
+ return fmt.Errorf(format, a...)
+}
+
+// Set request body from an interface{}
+func setBody(body interface{}, contentType string) (bodyBuf *bytes.Buffer, err error) {
+ if bodyBuf == nil {
+ bodyBuf = &bytes.Buffer{}
+ }
+
+ if reader, ok := body.(io.Reader); ok {
+ _, err = bodyBuf.ReadFrom(reader)
+ } else if b, ok := body.([]byte); ok {
+ _, err = bodyBuf.Write(b)
+ } else if s, ok := body.(string); ok {
+ _, err = bodyBuf.WriteString(s)
+ } else if s, ok := body.(*string); ok {
+ _, err = bodyBuf.WriteString(*s)
+ } else if jsonCheck.MatchString(contentType) {
+ err = json.NewEncoder(bodyBuf).Encode(body)
+ } else if xmlCheck.MatchString(contentType) {
+ xml.NewEncoder(bodyBuf).Encode(body)
+ }
+
+ if err != nil {
+ return nil, err
+ }
+
+ if bodyBuf.Len() == 0 {
+ err = fmt.Errorf("Invalid body type %s\n", contentType)
+ return nil, err
+ }
+ return bodyBuf, nil
+}
+
+// detectContentType method is used to figure out `Request.Body` content type for request header
+func detectContentType(body interface{}) string {
+ contentType := "text/plain; charset=utf-8"
+ kind := reflect.TypeOf(body).Kind()
+
+ switch kind {
+ case reflect.Struct, reflect.Map, reflect.Ptr:
+ contentType = "application/json; charset=utf-8"
+ case reflect.String:
+ contentType = "text/plain; charset=utf-8"
+ default:
+ if b, ok := body.([]byte); ok {
+ contentType = http.DetectContentType(b)
+ } else if kind == reflect.Slice {
+ contentType = "application/json; charset=utf-8"
+ }
+ }
+
+ return contentType
+}
+
+// Ripped from https://github.com/gregjones/httpcache/blob/master/httpcache.go
+type cacheControl map[string]string
+
+func parseCacheControl(headers http.Header) cacheControl {
+ cc := cacheControl{}
+ ccHeader := headers.Get("Cache-Control")
+ for _, part := range strings.Split(ccHeader, ",") {
+ part = strings.Trim(part, " ")
+ if part == "" {
+ continue
+ }
+ if strings.ContainsRune(part, '=') {
+ keyval := strings.Split(part, "=")
+ cc[strings.Trim(keyval[0], " ")] = strings.Trim(keyval[1], ",")
+ } else {
+ cc[part] = ""
+ }
+ }
+ return cc
+}
+
+// CacheExpires helper function to determine remaining time before repeating a request.
+func CacheExpires(r *http.Response) time.Time {
+ // Figure out when the cache expires.
+ var expires time.Time
+ now, err := time.Parse(time.RFC1123, r.Header.Get("date"))
+ if err != nil {
+ return time.Now()
+ }
+ respCacheControl := parseCacheControl(r.Header)
+
+ if maxAge, ok := respCacheControl["max-age"]; ok {
+ lifetime, err := time.ParseDuration(maxAge + "s")
+ if err != nil {
+ expires = now
+ }
+ expires = now.Add(lifetime)
+ } else {
+ expiresHeader := r.Header.Get("Expires")
+ if expiresHeader != "" {
+ expires, err = time.Parse(time.RFC1123, expiresHeader)
+ if err != nil {
+ expires = now
+ }
+ }
+ }
+ return expires
+}
+
+func strlen(s string) int {
+ return utf8.RuneCountInString(s)
+}
+
+// GenericSwaggerError Provides access to the body, error and model on returned errors.
+type GenericSwaggerError struct {
+ body []byte
+ error string
+ model interface{}
+}
+
+// Error returns non-empty string if there was an error.
+func (e GenericSwaggerError) Error() string {
+ return e.error
+}
+
+// Body returns the raw bytes of the response
+func (e GenericSwaggerError) Body() []byte {
+ return e.body
+}
+
+// Model returns the unpacked model of the error
+func (e GenericSwaggerError) Model() interface{} {
+ return e.model
+}
diff --git a/go-packages/meep-rnis-client/configuration.go b/go-packages/meep-rnis-client/configuration.go
new file mode 100644
index 0000000000000000000000000000000000000000..d3041837be4d6d57aa7c37a32ba00ef18a70c55c
--- /dev/null
+++ b/go-packages/meep-rnis-client/configuration.go
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+import (
+ "net/http"
+)
+
+// contextKeys are used to identify the type of value in the context.
+// Since these are string, it is possible to get a short description of the
+// context key for logging and debugging using key.String().
+
+type contextKey string
+
+func (c contextKey) String() string {
+ return "auth " + string(c)
+}
+
+var (
+ // ContextOAuth2 takes a oauth2.TokenSource as authentication for the request.
+ ContextOAuth2 = contextKey("token")
+
+ // ContextBasicAuth takes BasicAuth as authentication for the request.
+ ContextBasicAuth = contextKey("basic")
+
+ // ContextAccessToken takes a string oauth2 access token as authentication for the request.
+ ContextAccessToken = contextKey("accesstoken")
+
+ // ContextAPIKey takes an APIKey as authentication for the request
+ ContextAPIKey = contextKey("apikey")
+)
+
+// BasicAuth provides basic http authentication to a request passed via context using ContextBasicAuth
+type BasicAuth struct {
+ UserName string `json:"userName,omitempty"`
+ Password string `json:"password,omitempty"`
+}
+
+// APIKey provides API key based authentication to a request passed via context using ContextAPIKey
+type APIKey struct {
+ Key string
+ Prefix string
+}
+
+type Configuration struct {
+ BasePath string `json:"basePath,omitempty"`
+ Host string `json:"host,omitempty"`
+ Scheme string `json:"scheme,omitempty"`
+ DefaultHeader map[string]string `json:"defaultHeader,omitempty"`
+ UserAgent string `json:"userAgent,omitempty"`
+ HTTPClient *http.Client
+}
+
+func NewConfiguration() *Configuration {
+ cfg := &Configuration{
+ BasePath: "http://localhost/rni/v1",
+ DefaultHeader: make(map[string]string),
+ UserAgent: "Swagger-Codegen/1.0.0/go",
+ }
+ return cfg
+}
+
+func (c *Configuration) AddDefaultHeader(key string, value string) {
+ c.DefaultHeader[key] = value
+}
diff --git a/go-packages/meep-rnis-client/docs/AssociateId.md b/go-packages/meep-rnis-client/docs/AssociateId.md
new file mode 100644
index 0000000000000000000000000000000000000000..0277a33a8dbbb13be34904f26969898363e8b47a
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/AssociateId.md
@@ -0,0 +1,11 @@
+# AssociateId
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Type_** | **string** | Numeric value (0-255) corresponding to specified type of identifier | [default to null]
+**Value** | **string** | Value for the identifier | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/CaReConfSubscription.md b/go-packages/meep-rnis-client/docs/CaReConfSubscription.md
new file mode 100644
index 0000000000000000000000000000000000000000..5b8e91bcc69d4a0a70d2cad4fb66a17507154dd3
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/CaReConfSubscription.md
@@ -0,0 +1,13 @@
+# CaReConfSubscription
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CallbackReference** | **string** | URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information. | [default to null]
+**Links** | [***Link**](Link.md) | | [default to null]
+**FilterCriteria** | [***FilterCriteriaAssoc**](FilterCriteriaAssoc.md) | | [default to null]
+**ExpiryDeadline** | [***TimeStamp**](TimeStamp.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/CaReConfSubscription1.md b/go-packages/meep-rnis-client/docs/CaReConfSubscription1.md
new file mode 100644
index 0000000000000000000000000000000000000000..11fd0ec6b93ab5b3f72a9f1f2081512726d7a43d
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/CaReConfSubscription1.md
@@ -0,0 +1,10 @@
+# CaReConfSubscription1
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CaReConfSubscription** | [***CaReConfSubscription**](CaReConfSubscription.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/CaReConfSubscriptionPost.md b/go-packages/meep-rnis-client/docs/CaReConfSubscriptionPost.md
new file mode 100644
index 0000000000000000000000000000000000000000..cdfd08e4669bebc742fd616a7b8075b84376da53
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/CaReConfSubscriptionPost.md
@@ -0,0 +1,12 @@
+# CaReConfSubscriptionPost
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CallbackReference** | **string** | URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information. | [default to null]
+**FilterCriteria** | [***FilterCriteriaAssoc**](FilterCriteriaAssoc.md) | | [default to null]
+**ExpiryDeadline** | [***TimeStamp**](TimeStamp.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/CaReConfSubscriptionPost1.md b/go-packages/meep-rnis-client/docs/CaReConfSubscriptionPost1.md
new file mode 100644
index 0000000000000000000000000000000000000000..d2b1cab8388dc8253a0652c26484b95c5de9cf00
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/CaReConfSubscriptionPost1.md
@@ -0,0 +1,10 @@
+# CaReConfSubscriptionPost1
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CaReConfSubscription** | [***CaReConfSubscriptionPost**](CaReConfSubscriptionPost.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/CellChangeSubscription.md b/go-packages/meep-rnis-client/docs/CellChangeSubscription.md
new file mode 100644
index 0000000000000000000000000000000000000000..9e828f69787ce1148702b9d9e74acf6e3161ab6f
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/CellChangeSubscription.md
@@ -0,0 +1,13 @@
+# CellChangeSubscription
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CallbackReference** | **string** | URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information. | [default to null]
+**Links** | [***Link**](Link.md) | | [default to null]
+**FilterCriteria** | [***FilterCriteriaAssocHo**](FilterCriteriaAssocHo.md) | | [default to null]
+**ExpiryDeadline** | [***TimeStamp**](TimeStamp.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/CellChangeSubscription1.md b/go-packages/meep-rnis-client/docs/CellChangeSubscription1.md
new file mode 100644
index 0000000000000000000000000000000000000000..086e42cb44062803c59397058b88f2f3ec61dcf7
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/CellChangeSubscription1.md
@@ -0,0 +1,10 @@
+# CellChangeSubscription1
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CellChangeSubscription** | [***CellChangeSubscription**](CellChangeSubscription.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/CellChangeSubscriptionPost.md b/go-packages/meep-rnis-client/docs/CellChangeSubscriptionPost.md
new file mode 100644
index 0000000000000000000000000000000000000000..8c03dad6f35ecf3ba5e99377e263b62aea5122d4
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/CellChangeSubscriptionPost.md
@@ -0,0 +1,12 @@
+# CellChangeSubscriptionPost
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CallbackReference** | **string** | URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information. | [default to null]
+**FilterCriteria** | [***FilterCriteriaAssocHo**](FilterCriteriaAssocHo.md) | | [default to null]
+**ExpiryDeadline** | [***TimeStamp**](TimeStamp.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/CellChangeSubscriptionPost1.md b/go-packages/meep-rnis-client/docs/CellChangeSubscriptionPost1.md
new file mode 100644
index 0000000000000000000000000000000000000000..a018789026801134871f3c72dd59376bd89d3963
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/CellChangeSubscriptionPost1.md
@@ -0,0 +1,10 @@
+# CellChangeSubscriptionPost1
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CellChangeSubscription** | [***CellChangeSubscriptionPost**](CellChangeSubscriptionPost.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/CellUserInfo.md b/go-packages/meep-rnis-client/docs/CellUserInfo.md
new file mode 100644
index 0000000000000000000000000000000000000000..5e741fb6a47293fb8c9a4a843a9cfbb70779d608
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/CellUserInfo.md
@@ -0,0 +1,11 @@
+# CellUserInfo
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Ecgi** | [***Ecgi**](Ecgi.md) | | [default to null]
+**UeInfo** | [**[]UeInfo**](UeInfo.md) | | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/DefaultApi.md b/go-packages/meep-rnis-client/docs/DefaultApi.md
new file mode 100644
index 0000000000000000000000000000000000000000..ba578b2668971e06234cb1e0b687a160d22c4e0e
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/DefaultApi.md
@@ -0,0 +1,1287 @@
+# \DefaultApi
+
+All URIs are relative to *http://localhost/rni/v1*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**CaReConfSubscriptionSubscriptionsGET**](DefaultApi.md#CaReConfSubscriptionSubscriptionsGET) | **Get** /subscriptions/ca_reconf/{subscriptionId} |
+[**CaReConfSubscriptionSubscriptionsPOST**](DefaultApi.md#CaReConfSubscriptionSubscriptionsPOST) | **Post** /subscriptions/ca_reconf |
+[**CaReConfSubscriptionSubscriptionsPUT**](DefaultApi.md#CaReConfSubscriptionSubscriptionsPUT) | **Put** /subscriptions/ca_reconf/{subscriptionId} |
+[**CaReConfSubscriptionsSubscrIdDELETE**](DefaultApi.md#CaReConfSubscriptionsSubscrIdDELETE) | **Delete** /subscriptions/ca_reconf/{subscriptionId} |
+[**CellChangeSubscriptionsGET**](DefaultApi.md#CellChangeSubscriptionsGET) | **Get** /subscriptions/cell_change/{subscriptionId} |
+[**CellChangeSubscriptionsPOST**](DefaultApi.md#CellChangeSubscriptionsPOST) | **Post** /subscriptions/cell_change |
+[**CellChangeSubscriptionsPUT**](DefaultApi.md#CellChangeSubscriptionsPUT) | **Put** /subscriptions/cell_change/{subscriptionId} |
+[**CellChangeSubscriptionsSubscrIdDELETE**](DefaultApi.md#CellChangeSubscriptionsSubscrIdDELETE) | **Delete** /subscriptions/cell_change/{subscriptionId} |
+[**MeasRepUeReportSubscriptionsPUT**](DefaultApi.md#MeasRepUeReportSubscriptionsPUT) | **Put** /subscriptions/meas_rep_ue/{subscriptionId} |
+[**MeasRepUeSubscriptionsGET**](DefaultApi.md#MeasRepUeSubscriptionsGET) | **Get** /subscriptions/meas_rep_ue/{subscriptionId} |
+[**MeasRepUeSubscriptionsPOST**](DefaultApi.md#MeasRepUeSubscriptionsPOST) | **Post** /subscriptions/meas_rep_ue |
+[**MeasRepUeSubscriptionsSubscrIdDELETE**](DefaultApi.md#MeasRepUeSubscriptionsSubscrIdDELETE) | **Delete** /subscriptions/meas_rep_ue/{subscriptionId} |
+[**MeasTaSubscriptionsGET**](DefaultApi.md#MeasTaSubscriptionsGET) | **Get** /subscriptions/ta/{subscriptionId} |
+[**MeasTaSubscriptionsPOST**](DefaultApi.md#MeasTaSubscriptionsPOST) | **Post** /subscriptions/ta |
+[**MeasTaSubscriptionsPUT**](DefaultApi.md#MeasTaSubscriptionsPUT) | **Put** /subscriptions/ta/{subscriptionId} |
+[**MeasTaSubscriptionsSubscrIdDELETE**](DefaultApi.md#MeasTaSubscriptionsSubscrIdDELETE) | **Delete** /subscriptions/ta/{subscriptionId} |
+[**PlmnInfoGET**](DefaultApi.md#PlmnInfoGET) | **Get** /queries/plmn_info |
+[**RabEstSubscriptionSubscriptionsGET**](DefaultApi.md#RabEstSubscriptionSubscriptionsGET) | **Get** /subscriptions/rab_est/{subscriptionId} |
+[**RabEstSubscriptionSubscriptionsPOST**](DefaultApi.md#RabEstSubscriptionSubscriptionsPOST) | **Post** /subscriptions/rab_est |
+[**RabEstSubscriptionSubscriptionsPUT**](DefaultApi.md#RabEstSubscriptionSubscriptionsPUT) | **Put** /subscriptions/rab_est/{subscriptionId} |
+[**RabEstSubscriptionsSubscrIdDELETE**](DefaultApi.md#RabEstSubscriptionsSubscrIdDELETE) | **Delete** /subscriptions/rab_est/{subscriptionId} |
+[**RabInfoGET**](DefaultApi.md#RabInfoGET) | **Get** /queries/rab_info |
+[**RabModSubscriptionSubscriptionsGET**](DefaultApi.md#RabModSubscriptionSubscriptionsGET) | **Get** /subscriptions/rab_mod/{subscriptionId} |
+[**RabModSubscriptionSubscriptionsPOST**](DefaultApi.md#RabModSubscriptionSubscriptionsPOST) | **Post** /subscriptions/rab_mod |
+[**RabModSubscriptionSubscriptionsPUT**](DefaultApi.md#RabModSubscriptionSubscriptionsPUT) | **Put** /subscriptions/rab_mod/{subscriptionId} |
+[**RabModSubscriptionsSubscrIdDELETE**](DefaultApi.md#RabModSubscriptionsSubscrIdDELETE) | **Delete** /subscriptions/rab_mod/{subscriptionId} |
+[**RabRelSubscriptionSubscriptionsGET**](DefaultApi.md#RabRelSubscriptionSubscriptionsGET) | **Get** /subscriptions/rab_rel/{subscriptionId} |
+[**RabRelSubscriptionSubscriptionsPOST**](DefaultApi.md#RabRelSubscriptionSubscriptionsPOST) | **Post** /subscriptions/rab_rel |
+[**RabRelSubscriptionSubscriptionsPUT**](DefaultApi.md#RabRelSubscriptionSubscriptionsPUT) | **Put** /subscriptions/rab_rel/{subscriptionId} |
+[**RabRelSubscriptionsSubscrIdDELETE**](DefaultApi.md#RabRelSubscriptionsSubscrIdDELETE) | **Delete** /subscriptions/rab_rel/{subscriptionId} |
+[**S1BearerInfoGET**](DefaultApi.md#S1BearerInfoGET) | **Get** /queries/s1_bearer_info |
+[**S1BearerSubscriptionSubscriptionsGET**](DefaultApi.md#S1BearerSubscriptionSubscriptionsGET) | **Get** /subscriptions/s1_bearer/{subscriptionId} |
+[**S1BearerSubscriptionSubscriptionsPOST**](DefaultApi.md#S1BearerSubscriptionSubscriptionsPOST) | **Post** /subscriptions/s1_bearer |
+[**S1BearerSubscriptionSubscriptionsPUT**](DefaultApi.md#S1BearerSubscriptionSubscriptionsPUT) | **Put** /subscriptions/s1_bearer/{subscriptionId} |
+[**S1BearerSubscriptionsSubscrIdDELETE**](DefaultApi.md#S1BearerSubscriptionsSubscrIdDELETE) | **Delete** /subscriptions/s1_bearer/{subscriptionId} |
+[**SubscriptionLinkListSubscriptionsCcGET**](DefaultApi.md#SubscriptionLinkListSubscriptionsCcGET) | **Get** /subscriptions/cell_change |
+[**SubscriptionLinkListSubscriptionsCrGET**](DefaultApi.md#SubscriptionLinkListSubscriptionsCrGET) | **Get** /subscriptions/ca_reconf |
+[**SubscriptionLinkListSubscriptionsGET**](DefaultApi.md#SubscriptionLinkListSubscriptionsGET) | **Get** /subscriptions/ |
+[**SubscriptionLinkListSubscriptionsMrGET**](DefaultApi.md#SubscriptionLinkListSubscriptionsMrGET) | **Get** /subscriptions/meas_rep_ue |
+[**SubscriptionLinkListSubscriptionsReGET**](DefaultApi.md#SubscriptionLinkListSubscriptionsReGET) | **Get** /subscriptions/rab_est |
+[**SubscriptionLinkListSubscriptionsRmGET**](DefaultApi.md#SubscriptionLinkListSubscriptionsRmGET) | **Get** /subscriptions/rab_mod |
+[**SubscriptionLinkListSubscriptionsRrGET**](DefaultApi.md#SubscriptionLinkListSubscriptionsRrGET) | **Get** /subscriptions/rab_rel |
+[**SubscriptionLinkListSubscriptionsS1GET**](DefaultApi.md#SubscriptionLinkListSubscriptionsS1GET) | **Get** /subscriptions/s1_bearer |
+[**SubscriptionLinkListSubscriptionsTaGET**](DefaultApi.md#SubscriptionLinkListSubscriptionsTaGET) | **Get** /subscriptions/ta |
+
+
+# **CaReConfSubscriptionSubscriptionsGET**
+> InlineResponse20010 CaReConfSubscriptionSubscriptionsGET(ctx, subscriptionId)
+
+
+Gets a subscription to Carrier Aggregation Reconfiguration notifications from Radio Network Information Service
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Subscription Id, specifically the \"self\" returned in the subscription request |
+
+### Return type
+
+[**InlineResponse20010**](inline_response_200_10.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **CaReConfSubscriptionSubscriptionsPOST**
+> InlineResponse2017 CaReConfSubscriptionSubscriptionsPOST(ctx, caReConfSubscriptionPost)
+
+
+Creates a subscription to Carrier Aggregation Reconfiguration notifications from Radio Network Information Service
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **caReConfSubscriptionPost** | [**CaReConfSubscriptionPost1**](CaReConfSubscriptionPost1.md)| Use to creates a subscription to Carrier Aggregation Reconfiguration notifications based on the filter criteria |
+
+### Return type
+
+[**InlineResponse2017**](inline_response_201_7.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **CaReConfSubscriptionSubscriptionsPUT**
+> CaReConfSubscription1 CaReConfSubscriptionSubscriptionsPUT(ctx, subscriptionId, caReConfSubscription)
+
+
+Updates a subscription to Carrier Aggregation Reconfiguration notifications from Radio Network Information Service
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Subscription Id, specifically the \"self\" returned in the subscription request |
+ **caReConfSubscription** | [**CaReConfSubscription1**](CaReConfSubscription1.md)| Use to creates a subscription to Carrier Aggregation Reconfiguration notifications based on the filter criteria |
+
+### Return type
+
+[**CaReConfSubscription1**](CaReConfSubscription_1.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **CaReConfSubscriptionsSubscrIdDELETE**
+> CaReConfSubscriptionsSubscrIdDELETE(ctx, subscriptionId)
+
+
+Method to delete a subscription
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Subscription Id, specifically the \"self\" returned in the subscription request |
+
+### Return type
+
+ (empty response body)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **CellChangeSubscriptionsGET**
+> InlineResponse2004 CellChangeSubscriptionsGET(ctx, subscriptionId)
+
+
+Get cell change subscription information
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Subscription Id, specifically the \"self\" returned in the subscription request |
+
+### Return type
+
+[**InlineResponse2004**](inline_response_200_4.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **CellChangeSubscriptionsPOST**
+> InlineResponse201 CellChangeSubscriptionsPOST(ctx, cellChangeSubscriptionPost)
+
+
+Creates a subscription to cell change notifications from Radio Network Information Service
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **cellChangeSubscriptionPost** | [**CellChangeSubscriptionPost1**](CellChangeSubscriptionPost1.md)| Use to creates a subscription to cell change notifications based on the filter criteria |
+
+### Return type
+
+[**InlineResponse201**](inline_response_201.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **CellChangeSubscriptionsPUT**
+> CellChangeSubscription1 CellChangeSubscriptionsPUT(ctx, cellChangeSubscription, subscriptionId)
+
+
+Updates a subscription to cell change notifications from Radio Network Information Service
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **cellChangeSubscription** | [**CellChangeSubscription1**](CellChangeSubscription1.md)| Use to creates a subscription to cell change notifications based on the filter criteria |
+ **subscriptionId** | **string**| Subscription Id, specifically the \"self\" returned in the subscription request |
+
+### Return type
+
+[**CellChangeSubscription1**](CellChangeSubscription_1.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **CellChangeSubscriptionsSubscrIdDELETE**
+> CellChangeSubscriptionsSubscrIdDELETE(ctx, subscriptionId)
+
+
+Method to delete a subscription
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Subscription Id, specifically the \"self\" returned in the subscription request |
+
+### Return type
+
+ (empty response body)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **MeasRepUeReportSubscriptionsPUT**
+> MeasRepUeSubscription1 MeasRepUeReportSubscriptionsPUT(ctx, subscriptionId, measRepUeSubscription)
+
+
+Updates a subscription to UE measurement report notifications from Radio Network Information Service
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Subscription Id, specifically the \"self\" returned in the subscription request |
+ **measRepUeSubscription** | [**MeasRepUeSubscription1**](MeasRepUeSubscription1.md)| Use to creates a subscription to UE measurement report notifications based on the filter criteria |
+
+### Return type
+
+[**MeasRepUeSubscription1**](MeasRepUeSubscription_1.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **MeasRepUeSubscriptionsGET**
+> InlineResponse2006 MeasRepUeSubscriptionsGET(ctx, subscriptionId)
+
+
+Gets a subscription to UE measurement report notifications from Radio Network Information Service
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Subscription Id, specifically the \"self\" returned in the subscription request |
+
+### Return type
+
+[**InlineResponse2006**](inline_response_200_6.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **MeasRepUeSubscriptionsPOST**
+> InlineResponse2013 MeasRepUeSubscriptionsPOST(ctx, measRepUeSubscriptionPost)
+
+
+Creates a subscription to UE measurement report notifications from Radio Network Information Service
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **measRepUeSubscriptionPost** | [**MeasRepUeSubscriptionPost1**](MeasRepUeSubscriptionPost1.md)| Use to creates a subscription to UE measurement report notifications based on the filter criteria |
+
+### Return type
+
+[**InlineResponse2013**](inline_response_201_3.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **MeasRepUeSubscriptionsSubscrIdDELETE**
+> MeasRepUeSubscriptionsSubscrIdDELETE(ctx, subscriptionId)
+
+
+Method to delete a subscription
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Subscription Id, specifically the \"self\" returned in the subscription request |
+
+### Return type
+
+ (empty response body)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **MeasTaSubscriptionsGET**
+> InlineResponse2005 MeasTaSubscriptionsGET(ctx, subscriptionId)
+
+
+Gets UE Timing Advance subscription information from Radio Network Information Service
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Subscription Id, specifically the \"self\" returned in the subscription request |
+
+### Return type
+
+[**InlineResponse2005**](inline_response_200_5.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **MeasTaSubscriptionsPOST**
+> InlineResponse2012 MeasTaSubscriptionsPOST(ctx, measTaSubscriptionPost)
+
+
+Creates a subscription to UE Timing Advance notifications from Radio Network Information Service
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **measTaSubscriptionPost** | [**MeasTaSubscriptionPost1**](MeasTaSubscriptionPost1.md)| Use to creates a subscription to UE Timing Advance notifications based on the filter criteria |
+
+### Return type
+
+[**InlineResponse2012**](inline_response_201_2.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **MeasTaSubscriptionsPUT**
+> MeasTaSubscription1 MeasTaSubscriptionsPUT(ctx, subscriptionId, measTaSubscription)
+
+
+Updates a subscription to UE Timing Advance notifications from Radio Network Information Service
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Subscription Id, specifically the \"self\" returned in the subscription request |
+ **measTaSubscription** | [**MeasTaSubscription1**](MeasTaSubscription1.md)| Use to creates a subscription to UE Timing Advance notifications based on the filter criteria |
+
+### Return type
+
+[**MeasTaSubscription1**](MeasTaSubscription_1.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **MeasTaSubscriptionsSubscrIdDELETE**
+> MeasTaSubscriptionsSubscrIdDELETE(ctx, subscriptionId)
+
+
+Method to delete a subscription
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Subscription Id, specifically the \"self\" returned in the subscription request |
+
+### Return type
+
+ (empty response body)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **PlmnInfoGET**
+> InlineResponse2001 PlmnInfoGET(ctx, appInsId)
+
+
+Gets the information on Mobile Network(s) that are associated with a specific mobile edge application instance
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **appInsId** | [**[]string**](string.md)| Application instance identifier |
+
+### Return type
+
+[**InlineResponse2001**](inline_response_200_1.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **RabEstSubscriptionSubscriptionsGET**
+> InlineResponse2007 RabEstSubscriptionSubscriptionsGET(ctx, subscriptionId)
+
+
+Gets a subscription to RAB establishment notifications from Radio Network Information Service
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Subscription Id, specifically the \"self\" returned in the subscription request |
+
+### Return type
+
+[**InlineResponse2007**](inline_response_200_7.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **RabEstSubscriptionSubscriptionsPOST**
+> InlineResponse2014 RabEstSubscriptionSubscriptionsPOST(ctx, rabEstSubscriptionPost)
+
+
+Creates a subscription to RAB establishment notifications from Radio Network Information Service
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **rabEstSubscriptionPost** | [**RabEstSubscriptionPost1**](RabEstSubscriptionPost1.md)| Use to creates a subscription to RAB establishment notifications based on the filter criteria |
+
+### Return type
+
+[**InlineResponse2014**](inline_response_201_4.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **RabEstSubscriptionSubscriptionsPUT**
+> RabEstSubscription1 RabEstSubscriptionSubscriptionsPUT(ctx, subscriptionId, rabEstSubscription)
+
+
+Updates a subscription to RAB establishment notifications from Radio Network Information Service
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Subscription Id, specifically the \"self\" returned in the subscription request |
+ **rabEstSubscription** | [**RabEstSubscription1**](RabEstSubscription1.md)| Use to creates a subscription to RAB establishment notifications based on the filter criteria |
+
+### Return type
+
+[**RabEstSubscription1**](RabEstSubscription_1.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **RabEstSubscriptionsSubscrIdDELETE**
+> RabEstSubscriptionsSubscrIdDELETE(ctx, subscriptionId)
+
+
+Method to delete a subscription
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Subscription Id, specifically the \"self\" returned in the subscription request |
+
+### Return type
+
+ (empty response body)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **RabInfoGET**
+> InlineResponse200 RabInfoGET(ctx, optional)
+
+
+Gets information on existing E-RABs that are associated with a specific mobile edge application instance
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **optional** | ***RabInfoGETOpts** | optional parameters | nil if no parameters
+
+### Optional Parameters
+Optional parameters are passed through a pointer to a RabInfoGETOpts struct
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **appInsId** | **optional.String**| Application instance identifier |
+ **cellId** | [**optional.Interface of []string**](string.md)| E-UTRAN Cell Identity as a bit string (size (28)), as defined in ETSI TS 136 413 |
+ **ueIpv4Address** | [**optional.Interface of []string**](string.md)| Comma separated list of IE IPv4 addresses as defined for the type for AssociateId |
+ **ueIpv6Address** | [**optional.Interface of []string**](string.md)| Comma separated list of IE IPv6 addresses as defined for the type for AssociateId |
+ **natedIpAddress** | [**optional.Interface of []string**](string.md)| Comma separated list of IE NATed IP addresses as defined for the type for AssociateId |
+ **gtpTeid** | [**optional.Interface of []string**](string.md)| Comma separated list of GTP TEID addresses as defined for the type for AssociateId |
+ **erabId** | **optional.Int32**| E-RAB identifier |
+ **qci** | **optional.Int32**| QoS Class Identifier as defined in ETSI TS 123 401 |
+ **erabMbrDl** | **optional.Int32**| Maximum downlink E-RAB Bit Rate as defined in ETSI TS 123 401 |
+ **erabMbrUl** | **optional.Int32**| Maximum uplink E-RAB Bit Rate as defined in ETSI TS 123 401 |
+ **erabGbrDl** | **optional.Int32**| Guaranteed downlink E-RAB Bit Rate as defined in ETSI TS 123 401 |
+ **erabGbrUl** | **optional.Int32**| Guaranteed uplink E-RAB Bit Rate as defined in ETSI TS 123 401 |
+
+### Return type
+
+[**InlineResponse200**](inline_response_200.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **RabModSubscriptionSubscriptionsGET**
+> InlineResponse2008 RabModSubscriptionSubscriptionsGET(ctx, subscriptionId)
+
+
+Gets a subscription to RAB Modification notifications from Radio Network Information Service
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Subscription Id, specifically the \"self\" returned in the subscription request |
+
+### Return type
+
+[**InlineResponse2008**](inline_response_200_8.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **RabModSubscriptionSubscriptionsPOST**
+> InlineResponse2015 RabModSubscriptionSubscriptionsPOST(ctx, rabModSubscriptionPost)
+
+
+Creates a subscription to RAB Modification notifications from Radio Network Information Service
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **rabModSubscriptionPost** | [**RabModSubscriptionPost1**](RabModSubscriptionPost1.md)| Use to creates a subscription to RAB Modification notifications based on the filter criteria |
+
+### Return type
+
+[**InlineResponse2015**](inline_response_201_5.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **RabModSubscriptionSubscriptionsPUT**
+> RabModSubscription1 RabModSubscriptionSubscriptionsPUT(ctx, subscriptionId, rabModSubscription)
+
+
+Updates a subscription to RAB Modification notifications from Radio Network Information Service
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Subscription Id, specifically the \"self\" returned in the subscription request |
+ **rabModSubscription** | [**RabModSubscription1**](RabModSubscription1.md)| Use to creates a subscription to RAB Modification notifications based on the filter criteria |
+
+### Return type
+
+[**RabModSubscription1**](RabModSubscription_1.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **RabModSubscriptionsSubscrIdDELETE**
+> RabModSubscriptionsSubscrIdDELETE(ctx, subscriptionId)
+
+
+Method to delete a subscription
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Subscription Id, specifically the \"self\" returned in the subscription request |
+
+### Return type
+
+ (empty response body)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **RabRelSubscriptionSubscriptionsGET**
+> InlineResponse2009 RabRelSubscriptionSubscriptionsGET(ctx, subscriptionId)
+
+
+Gets a subscription to RAB Release notifications from Radio Network Information Service
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Subscription Id, specifically the \"self\" returned in the subscription request |
+
+### Return type
+
+[**InlineResponse2009**](inline_response_200_9.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **RabRelSubscriptionSubscriptionsPOST**
+> InlineResponse2016 RabRelSubscriptionSubscriptionsPOST(ctx, rabRelSubscriptionPost)
+
+
+Creates a subscription to RAB Release notifications from Radio Network Information Service
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **rabRelSubscriptionPost** | [**RabRelSubscriptionPost1**](RabRelSubscriptionPost1.md)| Use to creates a subscription to RAB Release notifications based on the filter criteria |
+
+### Return type
+
+[**InlineResponse2016**](inline_response_201_6.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **RabRelSubscriptionSubscriptionsPUT**
+> RabRelSubscription1 RabRelSubscriptionSubscriptionsPUT(ctx, subscriptionId, rabRelSubscription)
+
+
+Updates a subscription to RAB Release notifications from Radio Network Information Service
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Subscription Id, specifically the \"self\" returned in the subscription request |
+ **rabRelSubscription** | [**RabRelSubscription1**](RabRelSubscription1.md)| Use to creates a subscription to RAB Release notifications based on the filter criteria |
+
+### Return type
+
+[**RabRelSubscription1**](RabRelSubscription_1.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **RabRelSubscriptionsSubscrIdDELETE**
+> RabRelSubscriptionsSubscrIdDELETE(ctx, subscriptionId)
+
+
+Method to delete a subscription
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Subscription Id, specifically the \"self\" returned in the subscription request |
+
+### Return type
+
+ (empty response body)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **S1BearerInfoGET**
+> InlineResponse2002 S1BearerInfoGET(ctx, optional)
+
+
+Gets information on existing E-RABs that are associated with a specific mobile edge application instance
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **optional** | ***S1BearerInfoGETOpts** | optional parameters | nil if no parameters
+
+### Optional Parameters
+Optional parameters are passed through a pointer to a S1BearerInfoGETOpts struct
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **tempUeId** | [**optional.Interface of []string**](string.md)| The temporary identifier allocated for the specific UE as defined in ETSI TS 136 413 |
+ **ueIpv4Address** | [**optional.Interface of []string**](string.md)| Comma separated list of IE IPv4 addresses as defined for the type for AssociateId |
+ **ueIpv6Address** | [**optional.Interface of []string**](string.md)| Comma separated list of IE IPv6 addresses as defined for the type for AssociateId |
+ **natedIpAddress** | [**optional.Interface of []string**](string.md)| Comma separated list of IE NATed IP addresses as defined for the type for AssociateId |
+ **gtpTeid** | [**optional.Interface of []string**](string.md)| Comma separated list of GTP TEID addresses as defined for the type for AssociateId |
+ **cellId** | [**optional.Interface of []string**](string.md)| E-UTRAN Cell Identity as a bit string (size (28)), as defined in ETSI TS 136 413 |
+ **erabId** | [**optional.Interface of []int32**](int32.md)| E-RAB identifier |
+
+### Return type
+
+[**InlineResponse2002**](inline_response_200_2.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **S1BearerSubscriptionSubscriptionsGET**
+> InlineResponse2011 S1BearerSubscriptionSubscriptionsGET(ctx, subscriptionId)
+
+
+Gets a subscription to S1 bearer notifications from Radio Network Information Service
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Subscription Id, specifically the \"self\" returned in the subscription request |
+
+### Return type
+
+[**InlineResponse2011**](inline_response_201_1.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **S1BearerSubscriptionSubscriptionsPOST**
+> InlineResponse2011 S1BearerSubscriptionSubscriptionsPOST(ctx, s1BearerSubscriptionPost)
+
+
+Creates a subscription to S1 bearer notifications from Radio Network Information Service
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **s1BearerSubscriptionPost** | [**S1BearerSubscriptionPost1**](S1BearerSubscriptionPost1.md)| Use to creates a subscription to S1 Bearer notifications based on the filter criteria |
+
+### Return type
+
+[**InlineResponse2011**](inline_response_201_1.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **S1BearerSubscriptionSubscriptionsPUT**
+> S1BearerSubscription1 S1BearerSubscriptionSubscriptionsPUT(ctx, subscriptionId, s1BearerSubscription)
+
+
+Updates a subscription to S1 bearer notifications from Radio Network Information Service
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Subscription Id, specifically the \"self\" returned in the subscription request |
+ **s1BearerSubscription** | [**S1BearerSubscription1**](S1BearerSubscription1.md)| Use to creates a subscription to S1 Bearer notifications based on the filter criteria |
+
+### Return type
+
+[**S1BearerSubscription1**](S1BearerSubscription_1.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **S1BearerSubscriptionsSubscrIdDELETE**
+> S1BearerSubscriptionsSubscrIdDELETE(ctx, subscriptionId)
+
+
+Method to delete a subscription
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Subscription Id, specifically the \"self\" returned in the subscription request |
+
+### Return type
+
+ (empty response body)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **SubscriptionLinkListSubscriptionsCcGET**
+> InlineResponse2003 SubscriptionLinkListSubscriptionsCcGET(ctx, )
+
+
+The GET method can be used to request information about the cell_change subscriptions for this requestor
+
+### Required Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**InlineResponse2003**](inline_response_200_3.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **SubscriptionLinkListSubscriptionsCrGET**
+> InlineResponse2003 SubscriptionLinkListSubscriptionsCrGET(ctx, )
+
+
+The GET method can be used to request information about the ca_reconf subscriptions for this requestor
+
+### Required Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**InlineResponse2003**](inline_response_200_3.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **SubscriptionLinkListSubscriptionsGET**
+> InlineResponse2003 SubscriptionLinkListSubscriptionsGET(ctx, )
+
+
+The GET method can be used to request information about the subscriptions for this requestor
+
+### Required Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**InlineResponse2003**](inline_response_200_3.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **SubscriptionLinkListSubscriptionsMrGET**
+> InlineResponse2003 SubscriptionLinkListSubscriptionsMrGET(ctx, )
+
+
+The GET method can be used to request information about the meas_rep_ue subscriptions for this requestor
+
+### Required Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**InlineResponse2003**](inline_response_200_3.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **SubscriptionLinkListSubscriptionsReGET**
+> InlineResponse2003 SubscriptionLinkListSubscriptionsReGET(ctx, )
+
+
+The GET method can be used to request information about the rab_est subscriptions for this requestor
+
+### Required Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**InlineResponse2003**](inline_response_200_3.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **SubscriptionLinkListSubscriptionsRmGET**
+> InlineResponse2003 SubscriptionLinkListSubscriptionsRmGET(ctx, )
+
+
+The GET method can be used to request information about the rab_mod subscriptions for this requestor
+
+### Required Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**InlineResponse2003**](inline_response_200_3.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **SubscriptionLinkListSubscriptionsRrGET**
+> InlineResponse2003 SubscriptionLinkListSubscriptionsRrGET(ctx, )
+
+
+The GET method can be used to request information about the rab_rel subscriptions for this requestor
+
+### Required Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**InlineResponse2003**](inline_response_200_3.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **SubscriptionLinkListSubscriptionsS1GET**
+> InlineResponse2003 SubscriptionLinkListSubscriptionsS1GET(ctx, )
+
+
+The GET method can be used to request information about the s1_bearer subscriptions for this requestor
+
+### Required Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**InlineResponse2003**](inline_response_200_3.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **SubscriptionLinkListSubscriptionsTaGET**
+> InlineResponse2003 SubscriptionLinkListSubscriptionsTaGET(ctx, )
+
+
+The GET method can be used to request information about the ta subscriptions for this requestor
+
+### Required Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**InlineResponse2003**](inline_response_200_3.md)
+
+### Authorization
+
+[OauthSecurity](../README.md#OauthSecurity)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json, application/problem+json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/go-packages/meep-rnis-client/docs/Ecgi.md b/go-packages/meep-rnis-client/docs/Ecgi.md
new file mode 100644
index 0000000000000000000000000000000000000000..15ba9aca0512d03a18d082a1906d2f33cd32f4c4
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/Ecgi.md
@@ -0,0 +1,11 @@
+# Ecgi
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Plmn** | [***Plmn**](Plmn.md) | | [default to null]
+**CellId** | **[]string** | The E-UTRAN Cell Identity as a bit string (size (28)), as defined in 3GPP TS 36.413 | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/ErabQosParameters.md b/go-packages/meep-rnis-client/docs/ErabQosParameters.md
new file mode 100644
index 0000000000000000000000000000000000000000..2b7c5ccf1c42a330c20360e5e48d3e3f3b29c69e
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/ErabQosParameters.md
@@ -0,0 +1,11 @@
+# ErabQosParameters
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Qci** | **int32** | QoS Class Identifier as defined in TS 23.401 | [optional] [default to null]
+**QosInformation** | [***QosInformation**](QosInformation.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/ErabQosParametersQci.md b/go-packages/meep-rnis-client/docs/ErabQosParametersQci.md
new file mode 100644
index 0000000000000000000000000000000000000000..9c6748e08348b4bfcde20d1e0d5fa16a42c9f5c0
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/ErabQosParametersQci.md
@@ -0,0 +1,10 @@
+# ErabQosParametersQci
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**QosInformation** | [***QosInformation**](QosInformation.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-ctrl-engine-client/docs/ScenarioName.md b/go-packages/meep-rnis-client/docs/EventType.md
similarity index 94%
rename from go-packages/meep-ctrl-engine-client/docs/ScenarioName.md
rename to go-packages/meep-rnis-client/docs/EventType.md
index 4ec14d613ab049f357d944a0c30ef3f553eeb769..9b26cfe63d898a470348ff40e6abab1995dcad91 100644
--- a/go-packages/meep-ctrl-engine-client/docs/ScenarioName.md
+++ b/go-packages/meep-rnis-client/docs/EventType.md
@@ -1,4 +1,4 @@
-# ScenarioName
+# EventType
## Properties
Name | Type | Description | Notes
diff --git a/go-packages/meep-rnis-client/docs/FilterCriteriaAssoc.md b/go-packages/meep-rnis-client/docs/FilterCriteriaAssoc.md
new file mode 100644
index 0000000000000000000000000000000000000000..15e275c806d1ce4a7851099c99175ae0ec81a43b
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/FilterCriteriaAssoc.md
@@ -0,0 +1,13 @@
+# FilterCriteriaAssoc
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**AppInsId** | **string** | Unique identifier for the mobile edge application instance | [optional] [default to null]
+**AssociateId** | [***AssociateId**](AssociateId.md) | | [optional] [default to null]
+**Plmn** | [***Plmn**](Plmn.md) | | [optional] [default to null]
+**CellId** | **[]string** | The E-UTRAN Cell Identity as a bit string (size (28)), as defined in 3GPP TS 36.413 | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/FilterCriteriaAssocHo.md b/go-packages/meep-rnis-client/docs/FilterCriteriaAssocHo.md
new file mode 100644
index 0000000000000000000000000000000000000000..51644a7722811570d1679fb58d680cbb75c2f6c8
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/FilterCriteriaAssocHo.md
@@ -0,0 +1,14 @@
+# FilterCriteriaAssocHo
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**AppInsId** | **string** | Unique identifier for the mobile edge application instance | [optional] [default to null]
+**AssociateId** | [***AssociateId**](AssociateId.md) | | [optional] [default to null]
+**Plmn** | [***Plmn**](Plmn.md) | | [optional] [default to null]
+**CellId** | **[]string** | The E-UTRAN Cell Identity as a bit string (size (28)), as defined in 3GPP TS 36.413 | [optional] [default to null]
+**HoStatus** | [***HoStatus**](HoStatus.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/FilterCriteriaAssocQci.md b/go-packages/meep-rnis-client/docs/FilterCriteriaAssocQci.md
new file mode 100644
index 0000000000000000000000000000000000000000..ad78faef6ef1290bdadf80de1af632eed8b77099
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/FilterCriteriaAssocQci.md
@@ -0,0 +1,14 @@
+# FilterCriteriaAssocQci
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**AppInsId** | **string** | Unique identifier for the mobile edge application instance | [optional] [default to null]
+**AssociateId** | [***AssociateId**](AssociateId.md) | | [optional] [default to null]
+**Plmn** | [***Plmn**](Plmn.md) | | [optional] [default to null]
+**CellId** | **[]string** | The E-UTRAN Cell Identity as a bit string (size (28)), as defined in 3GPP TS 36.413 | [optional] [default to null]
+**Qci** | **int32** | QoS Class Identifier as defined in TS 23.401 | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/FilterCriteriaAssocTri.md b/go-packages/meep-rnis-client/docs/FilterCriteriaAssocTri.md
new file mode 100644
index 0000000000000000000000000000000000000000..e9bb6163241b3f565c53f951409f290d6a2d2877
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/FilterCriteriaAssocTri.md
@@ -0,0 +1,14 @@
+# FilterCriteriaAssocTri
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**AppInsId** | **string** | Unique identifier for the mobile edge application instance | [optional] [default to null]
+**AssociateId** | [***AssociateId**](AssociateId.md) | | [optional] [default to null]
+**Plmn** | [***Plmn**](Plmn.md) | | [optional] [default to null]
+**CellId** | **[]string** | The E-UTRAN Cell Identity as a bit string (size (28)), as defined in 3GPP TS 36.413 | [optional] [default to null]
+**Trigger** | [***Trigger**](Trigger.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-ctrl-engine-model/docs/ScenarioName.md b/go-packages/meep-rnis-client/docs/HoStatus.md
similarity index 94%
rename from go-packages/meep-ctrl-engine-model/docs/ScenarioName.md
rename to go-packages/meep-rnis-client/docs/HoStatus.md
index 4ec14d613ab049f357d944a0c30ef3f553eeb769..085ea70e427c18a5cfedd2a148ff6f8db47ccee6 100644
--- a/go-packages/meep-ctrl-engine-model/docs/ScenarioName.md
+++ b/go-packages/meep-rnis-client/docs/HoStatus.md
@@ -1,4 +1,4 @@
-# ScenarioName
+# HoStatus
## Properties
Name | Type | Description | Notes
diff --git a/go-packages/meep-ctrl-engine-model/docs/ScenarioInfo.md b/go-packages/meep-rnis-client/docs/InlineResponse200.md
similarity index 76%
rename from go-packages/meep-ctrl-engine-model/docs/ScenarioInfo.md
rename to go-packages/meep-rnis-client/docs/InlineResponse200.md
index 576166745b0de18d707f310077859a2aa7910bdb..d64b2fa114b6e36b79029b821c6abf43743ffb34 100644
--- a/go-packages/meep-ctrl-engine-model/docs/ScenarioInfo.md
+++ b/go-packages/meep-rnis-client/docs/InlineResponse200.md
@@ -1,9 +1,9 @@
-# ScenarioInfo
+# InlineResponse200
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
-**Name** | **string** | Scenario name | [optional] [default to null]
+**RabInfo** | [***RabInfo**](RabInfo.md) | | [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/go-packages/meep-ctrl-engine-client/docs/PodsStatus.md b/go-packages/meep-rnis-client/docs/InlineResponse2001.md
similarity index 73%
rename from go-packages/meep-ctrl-engine-client/docs/PodsStatus.md
rename to go-packages/meep-rnis-client/docs/InlineResponse2001.md
index 148d06e683d0a51f84ae61485d60d1347c6456f5..d0a377b1718c71214aef740a8ee36430988db2a7 100644
--- a/go-packages/meep-ctrl-engine-client/docs/PodsStatus.md
+++ b/go-packages/meep-rnis-client/docs/InlineResponse2001.md
@@ -1,9 +1,9 @@
-# PodsStatus
+# InlineResponse2001
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
-**PodStatus** | [**[]PodStatus**](PodStatus.md) | | [optional] [default to null]
+**PlmnInfo** | [**[]PlmnInfo**](PlmnInfo.md) | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/go-packages/meep-rnis-client/docs/InlineResponse20010.md b/go-packages/meep-rnis-client/docs/InlineResponse20010.md
new file mode 100644
index 0000000000000000000000000000000000000000..3ee02e71c89678c0b5fbeee97f00717ae2bf3da1
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/InlineResponse20010.md
@@ -0,0 +1,10 @@
+# InlineResponse20010
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CaReConfSubscription** | [***CaReConfSubscription**](CaReConfSubscription.md) | | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/InlineResponse2002.md b/go-packages/meep-rnis-client/docs/InlineResponse2002.md
new file mode 100644
index 0000000000000000000000000000000000000000..fbcb11774b45ecd24d3b830ed7082b46ed824137
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/InlineResponse2002.md
@@ -0,0 +1,10 @@
+# InlineResponse2002
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**S1BearerInfo** | [***S1BearerInfo**](S1BearerInfo.md) | | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/InlineResponse2003.md b/go-packages/meep-rnis-client/docs/InlineResponse2003.md
new file mode 100644
index 0000000000000000000000000000000000000000..cc7491728a0ea12ec8db153c5c452a7118b2704a
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/InlineResponse2003.md
@@ -0,0 +1,10 @@
+# InlineResponse2003
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**SubscriptionLinkList** | [***SubscriptionLinkList**](SubscriptionLinkList.md) | | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/InlineResponse2004.md b/go-packages/meep-rnis-client/docs/InlineResponse2004.md
new file mode 100644
index 0000000000000000000000000000000000000000..139b2f6ee99c11b3253f97d85143545749a50f75
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/InlineResponse2004.md
@@ -0,0 +1,10 @@
+# InlineResponse2004
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CellChangeSubscription** | [***CellChangeSubscription**](CellChangeSubscription.md) | | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/InlineResponse2005.md b/go-packages/meep-rnis-client/docs/InlineResponse2005.md
new file mode 100644
index 0000000000000000000000000000000000000000..5611225797c78eac753ed742fcdf93c6390af87a
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/InlineResponse2005.md
@@ -0,0 +1,10 @@
+# InlineResponse2005
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**MeasTaSubscription** | [***MeasTaSubscription**](MeasTaSubscription.md) | | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/InlineResponse2006.md b/go-packages/meep-rnis-client/docs/InlineResponse2006.md
new file mode 100644
index 0000000000000000000000000000000000000000..0182f7473caf4915693cce4b454161b42de48b21
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/InlineResponse2006.md
@@ -0,0 +1,10 @@
+# InlineResponse2006
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**MeasRepUeSubscription** | [***MeasRepUeSubscription**](MeasRepUeSubscription.md) | | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/InlineResponse2007.md b/go-packages/meep-rnis-client/docs/InlineResponse2007.md
new file mode 100644
index 0000000000000000000000000000000000000000..86993798726a557ee2c997c2fa5bfc0746613b67
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/InlineResponse2007.md
@@ -0,0 +1,10 @@
+# InlineResponse2007
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**RabEstSubscription** | [***RabEstSubscription**](RabEstSubscription.md) | | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/InlineResponse2008.md b/go-packages/meep-rnis-client/docs/InlineResponse2008.md
new file mode 100644
index 0000000000000000000000000000000000000000..ae1b9684e420f44d09701c0ec220eb673117ad3b
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/InlineResponse2008.md
@@ -0,0 +1,10 @@
+# InlineResponse2008
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**RabModSubscription** | [***RabModSubscription**](RabModSubscription.md) | | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/InlineResponse2009.md b/go-packages/meep-rnis-client/docs/InlineResponse2009.md
new file mode 100644
index 0000000000000000000000000000000000000000..385fe9d8d54fd220ed83bad2c383abda650cb28e
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/InlineResponse2009.md
@@ -0,0 +1,10 @@
+# InlineResponse2009
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**RabRelSubscription** | [***RabRelSubscription**](RabRelSubscription.md) | | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/InlineResponse201.md b/go-packages/meep-rnis-client/docs/InlineResponse201.md
new file mode 100644
index 0000000000000000000000000000000000000000..f4b47f056a308e1f94f3245cb50e3f762812840f
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/InlineResponse201.md
@@ -0,0 +1,10 @@
+# InlineResponse201
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CellChangeSubscription** | [***CellChangeSubscription**](CellChangeSubscription.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/InlineResponse2011.md b/go-packages/meep-rnis-client/docs/InlineResponse2011.md
new file mode 100644
index 0000000000000000000000000000000000000000..7684b96aab0439c4d023da9d611b4d969c6e8a2a
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/InlineResponse2011.md
@@ -0,0 +1,10 @@
+# InlineResponse2011
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**S1BearerSubscription** | [***S1BearerSubscription**](S1BearerSubscription.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/InlineResponse2012.md b/go-packages/meep-rnis-client/docs/InlineResponse2012.md
new file mode 100644
index 0000000000000000000000000000000000000000..adfe37f04fd3de446722c9073bee10859a576394
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/InlineResponse2012.md
@@ -0,0 +1,10 @@
+# InlineResponse2012
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**MeasTaSubscription** | [***MeasTaSubscription**](MeasTaSubscription.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/InlineResponse2013.md b/go-packages/meep-rnis-client/docs/InlineResponse2013.md
new file mode 100644
index 0000000000000000000000000000000000000000..27e1e4135abdce73b84d0e4ff09c88d6f04d95ed
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/InlineResponse2013.md
@@ -0,0 +1,10 @@
+# InlineResponse2013
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**MeasRepUeSubscription** | [***MeasRepUeSubscription**](MeasRepUeSubscription.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/InlineResponse2014.md b/go-packages/meep-rnis-client/docs/InlineResponse2014.md
new file mode 100644
index 0000000000000000000000000000000000000000..7a4c06775064214bc8e027317d18182d5c403210
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/InlineResponse2014.md
@@ -0,0 +1,10 @@
+# InlineResponse2014
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**RabEstSubscription** | [***RabEstSubscription**](RabEstSubscription.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/InlineResponse2015.md b/go-packages/meep-rnis-client/docs/InlineResponse2015.md
new file mode 100644
index 0000000000000000000000000000000000000000..e5c611c67aec4b56dd27863a0e45d258655d94dd
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/InlineResponse2015.md
@@ -0,0 +1,10 @@
+# InlineResponse2015
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**RabModSubscription** | [***RabModSubscription**](RabModSubscription.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/InlineResponse2016.md b/go-packages/meep-rnis-client/docs/InlineResponse2016.md
new file mode 100644
index 0000000000000000000000000000000000000000..32f10624cdff234b8b5b54811773c55a8a480895
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/InlineResponse2016.md
@@ -0,0 +1,10 @@
+# InlineResponse2016
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**RabRelSubscription** | [***RabRelSubscription**](RabRelSubscription.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/InlineResponse2017.md b/go-packages/meep-rnis-client/docs/InlineResponse2017.md
new file mode 100644
index 0000000000000000000000000000000000000000..7852c0b9cc02558fa30de0d22b6b1b58f2057fc5
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/InlineResponse2017.md
@@ -0,0 +1,10 @@
+# InlineResponse2017
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CaReConfSubscription** | [***CaReConfSubscription**](CaReConfSubscription.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/InlineResponse400.md b/go-packages/meep-rnis-client/docs/InlineResponse400.md
new file mode 100644
index 0000000000000000000000000000000000000000..ab4077c717d3d9697c2b4c21c15ed3e37abff383
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/InlineResponse400.md
@@ -0,0 +1,10 @@
+# InlineResponse400
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**ProblemDetails** | [***ProblemDetails**](ProblemDetails.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/InlineResponse403.md b/go-packages/meep-rnis-client/docs/InlineResponse403.md
new file mode 100644
index 0000000000000000000000000000000000000000..5750a05c73fc3e361b34b64cc759bb4e3b92dda4
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/InlineResponse403.md
@@ -0,0 +1,10 @@
+# InlineResponse403
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**ProblemDetails** | [***ProblemDetails**](ProblemDetails.md) | | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-ctrl-engine-client/docs/EventOther.md b/go-packages/meep-rnis-client/docs/Link.md
similarity index 75%
rename from go-packages/meep-ctrl-engine-client/docs/EventOther.md
rename to go-packages/meep-rnis-client/docs/Link.md
index df06c50f6a72108d8cb82cc5f12d78c91565e0ef..25f1aacc9fe5612569713a2d2b0eb04b9ebb1cbb 100644
--- a/go-packages/meep-ctrl-engine-client/docs/EventOther.md
+++ b/go-packages/meep-rnis-client/docs/Link.md
@@ -1,9 +1,9 @@
-# EventOther
+# Link
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
-**Event** | **string** | Other event string | [optional] [default to null]
+**Self** | **string** | URI referring to a resource | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/go-packages/meep-rnis-client/docs/MeasRepUeSubscription.md b/go-packages/meep-rnis-client/docs/MeasRepUeSubscription.md
new file mode 100644
index 0000000000000000000000000000000000000000..8c2745e26f4b161c3d157edeaf4b1c2cf428fa99
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/MeasRepUeSubscription.md
@@ -0,0 +1,13 @@
+# MeasRepUeSubscription
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CallbackReference** | **string** | URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information. | [default to null]
+**Links** | [***Link**](Link.md) | | [default to null]
+**FilterCriteria** | [***FilterCriteriaAssocTri**](FilterCriteriaAssocTri.md) | | [default to null]
+**ExpiryDeadline** | [***TimeStamp**](TimeStamp.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/MeasRepUeSubscription1.md b/go-packages/meep-rnis-client/docs/MeasRepUeSubscription1.md
new file mode 100644
index 0000000000000000000000000000000000000000..294c363a184b222aaf2a934b4571b907c4d3d63f
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/MeasRepUeSubscription1.md
@@ -0,0 +1,10 @@
+# MeasRepUeSubscription1
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**MeasRepUeSubscription** | [***MeasRepUeSubscription**](MeasRepUeSubscription.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/MeasRepUeSubscriptionPost.md b/go-packages/meep-rnis-client/docs/MeasRepUeSubscriptionPost.md
new file mode 100644
index 0000000000000000000000000000000000000000..2b35d46a636c25b07f8df48d2538ca01034a2b1a
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/MeasRepUeSubscriptionPost.md
@@ -0,0 +1,12 @@
+# MeasRepUeSubscriptionPost
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CallbackReference** | **string** | URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information. | [default to null]
+**FilterCriteria** | [***FilterCriteriaAssocTri**](FilterCriteriaAssocTri.md) | | [default to null]
+**ExpiryDeadline** | [***TimeStamp**](TimeStamp.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/MeasRepUeSubscriptionPost1.md b/go-packages/meep-rnis-client/docs/MeasRepUeSubscriptionPost1.md
new file mode 100644
index 0000000000000000000000000000000000000000..4561a5a2912915b636ee16061180f80cd8bcbd75
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/MeasRepUeSubscriptionPost1.md
@@ -0,0 +1,10 @@
+# MeasRepUeSubscriptionPost1
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**MeasRepUeSubscription** | [***MeasRepUeSubscriptionPost**](MeasRepUeSubscriptionPost.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/MeasTaSubscription.md b/go-packages/meep-rnis-client/docs/MeasTaSubscription.md
new file mode 100644
index 0000000000000000000000000000000000000000..eaf8e30b08276e58cc7503b61c162580cd029547
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/MeasTaSubscription.md
@@ -0,0 +1,13 @@
+# MeasTaSubscription
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CallbackReference** | **string** | URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information. | [default to null]
+**Links** | [***Link**](Link.md) | | [default to null]
+**FilterCriteria** | [***FilterCriteriaAssoc**](FilterCriteriaAssoc.md) | | [default to null]
+**ExpiryDeadline** | [***TimeStamp**](TimeStamp.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/MeasTaSubscription1.md b/go-packages/meep-rnis-client/docs/MeasTaSubscription1.md
new file mode 100644
index 0000000000000000000000000000000000000000..b1c125b70a881d5e85b5d2fcb5f52b9c27e1bd18
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/MeasTaSubscription1.md
@@ -0,0 +1,10 @@
+# MeasTaSubscription1
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**MeasTaSubscription** | [***MeasTaSubscription**](MeasTaSubscription.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/MeasTaSubscriptionPost.md b/go-packages/meep-rnis-client/docs/MeasTaSubscriptionPost.md
new file mode 100644
index 0000000000000000000000000000000000000000..180cea6951816da2a2da9ccc604a8def2724b9ed
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/MeasTaSubscriptionPost.md
@@ -0,0 +1,12 @@
+# MeasTaSubscriptionPost
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CallbackReference** | **string** | URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information. | [default to null]
+**FilterCriteria** | [***FilterCriteriaAssoc**](FilterCriteriaAssoc.md) | | [default to null]
+**ExpiryDeadline** | [***TimeStamp**](TimeStamp.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/MeasTaSubscriptionPost1.md b/go-packages/meep-rnis-client/docs/MeasTaSubscriptionPost1.md
new file mode 100644
index 0000000000000000000000000000000000000000..79fdabf256cae34865e20d2cd1c2c8b11070bd0a
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/MeasTaSubscriptionPost1.md
@@ -0,0 +1,10 @@
+# MeasTaSubscriptionPost1
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**MeasTaSubscription** | [***MeasTaSubscriptionPost**](MeasTaSubscriptionPost.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/Plmn.md b/go-packages/meep-rnis-client/docs/Plmn.md
new file mode 100644
index 0000000000000000000000000000000000000000..2df30e99256bf4ec515f6cbc6991812603a866ca
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/Plmn.md
@@ -0,0 +1,11 @@
+# Plmn
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Mcc** | **string** | The Mobile Country Code part of PLMN Identity as defined in 3GPP TS 36.413 | [default to null]
+**Mnc** | **string** | The Mobile Network Code part of PLMN Identity as defined in 3GPP TS 36.413 | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/PlmnInfo.md b/go-packages/meep-rnis-client/docs/PlmnInfo.md
new file mode 100644
index 0000000000000000000000000000000000000000..f549837437cfea10e57092afbb2d093b3f9b6490
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/PlmnInfo.md
@@ -0,0 +1,12 @@
+# PlmnInfo
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**TimeStamp** | [***TimeStamp**](TimeStamp.md) | | [optional] [default to null]
+**AppInsId** | **string** | Unique identifier for the mobile edge application instance | [default to null]
+**Ecgi** | [***Ecgi**](Ecgi.md) | | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/ProblemDetails.md b/go-packages/meep-rnis-client/docs/ProblemDetails.md
new file mode 100644
index 0000000000000000000000000000000000000000..465caf4ff539056d6e360d9394c45af4e0f56fef
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/ProblemDetails.md
@@ -0,0 +1,14 @@
+# ProblemDetails
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Type_** | **string** | A URI reference according to IETF RFC 3986 that identifies the problem type | [optional] [default to null]
+**Title** | **string** | A short, human-readable summary of the problem type | [optional] [default to null]
+**Status** | **int32** | The HTTP status code for this occurrence of the problem | [optional] [default to null]
+**Detail** | **string** | A human-readable explanation specific to this occurrence of the problem | [optional] [default to null]
+**Instance** | **string** | A URI reference that identifies the specific occurrence of the problem | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/QosInformation.md b/go-packages/meep-rnis-client/docs/QosInformation.md
new file mode 100644
index 0000000000000000000000000000000000000000..40ee4a3cfef379740dc7b1a8e059df3e6102c2b0
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/QosInformation.md
@@ -0,0 +1,13 @@
+# QosInformation
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**ErabMbrDl** | **int32** | This IE indicates the maximum downlink E-RAB Bit Rate as defined in TS 23.401 for this bearer. | [default to null]
+**ErabMbrUl** | **int32** | This IE indicates the maximum uplink E-RAB Bit Rate as defined in TS 23.401 for this bearer. | [default to null]
+**ErabGbrDl** | **int32** | This IE indicates the guaranteed downlink E-RAB Bit Rate as defined in TS 23.401 for this bearer. | [default to null]
+**ErabGbrUl** | **int32** | This IE indicates the guaranteed uplink E-RAB Bit Rate as defined in TS 23.401 for this bearer. | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/RabEstSubscription.md b/go-packages/meep-rnis-client/docs/RabEstSubscription.md
new file mode 100644
index 0000000000000000000000000000000000000000..c03e6d67fa88f3abe4a536cad6d347b0d266d39a
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/RabEstSubscription.md
@@ -0,0 +1,13 @@
+# RabEstSubscription
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CallbackReference** | **string** | URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information. | [default to null]
+**Links** | [***Link**](Link.md) | | [default to null]
+**FilterCriteria** | [***FilterCriteriaAssocQci**](FilterCriteriaAssocQci.md) | | [default to null]
+**ExpiryDeadline** | [***TimeStamp**](TimeStamp.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/RabEstSubscription1.md b/go-packages/meep-rnis-client/docs/RabEstSubscription1.md
new file mode 100644
index 0000000000000000000000000000000000000000..7dad23e3c98d21a385ebf70b9f3484050f1ab64b
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/RabEstSubscription1.md
@@ -0,0 +1,10 @@
+# RabEstSubscription1
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**RabEstSubscription** | [***RabEstSubscription**](RabEstSubscription.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/RabEstSubscriptionPost.md b/go-packages/meep-rnis-client/docs/RabEstSubscriptionPost.md
new file mode 100644
index 0000000000000000000000000000000000000000..f9b872e34df1b5cc65df9b425da704735cceb2e2
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/RabEstSubscriptionPost.md
@@ -0,0 +1,12 @@
+# RabEstSubscriptionPost
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CallbackReference** | **string** | URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information. | [default to null]
+**FilterCriteria** | [***FilterCriteriaAssocQci**](FilterCriteriaAssocQci.md) | | [default to null]
+**ExpiryDeadline** | [***TimeStamp**](TimeStamp.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/RabEstSubscriptionPost1.md b/go-packages/meep-rnis-client/docs/RabEstSubscriptionPost1.md
new file mode 100644
index 0000000000000000000000000000000000000000..e86973991f57ae2d65439cc6c81cb6fded2d5a41
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/RabEstSubscriptionPost1.md
@@ -0,0 +1,10 @@
+# RabEstSubscriptionPost1
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**RabEstSubscription** | [***RabEstSubscriptionPost**](RabEstSubscriptionPost.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/RabInfo.md b/go-packages/meep-rnis-client/docs/RabInfo.md
new file mode 100644
index 0000000000000000000000000000000000000000..c7e0a53a961f0fc9022ee4760a07e219d697df7f
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/RabInfo.md
@@ -0,0 +1,13 @@
+# RabInfo
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**TimeStamp** | [***TimeStamp**](TimeStamp.md) | | [optional] [default to null]
+**AppInsId** | **string** | Unique identifier for the mobile edge application instance | [default to null]
+**RequestId** | **string** | Unique identifier allocated by the Mobile Edge application for the Information request. | [default to null]
+**CellUserInfo** | [**[]CellUserInfo**](CellUserInfo.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/RabModSubscription.md b/go-packages/meep-rnis-client/docs/RabModSubscription.md
new file mode 100644
index 0000000000000000000000000000000000000000..41f3a1ac1b638189f8f1f5057f8a7a479bf7e510
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/RabModSubscription.md
@@ -0,0 +1,13 @@
+# RabModSubscription
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CallbackReference** | **string** | URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information. | [default to null]
+**Links** | [***Link**](Link.md) | | [default to null]
+**FilterCriteria** | [***FilterCriteriaAssocQci**](FilterCriteriaAssocQci.md) | | [default to null]
+**ExpiryDeadline** | [***TimeStamp**](TimeStamp.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/RabModSubscription1.md b/go-packages/meep-rnis-client/docs/RabModSubscription1.md
new file mode 100644
index 0000000000000000000000000000000000000000..ae10f0fe027f3cb05ef3be99f226968ad749b497
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/RabModSubscription1.md
@@ -0,0 +1,10 @@
+# RabModSubscription1
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**RabModSubscription** | [***RabModSubscription**](RabModSubscription.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/RabModSubscriptionPost.md b/go-packages/meep-rnis-client/docs/RabModSubscriptionPost.md
new file mode 100644
index 0000000000000000000000000000000000000000..1735073727c2963fd9e335ff517e706fa088065d
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/RabModSubscriptionPost.md
@@ -0,0 +1,12 @@
+# RabModSubscriptionPost
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CallbackReference** | **string** | URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information. | [default to null]
+**FilterCriteria** | [***FilterCriteriaAssocQci**](FilterCriteriaAssocQci.md) | | [default to null]
+**ExpiryDeadline** | [***TimeStamp**](TimeStamp.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/RabModSubscriptionPost1.md b/go-packages/meep-rnis-client/docs/RabModSubscriptionPost1.md
new file mode 100644
index 0000000000000000000000000000000000000000..603e99e70706575eb6ec4a82f527aee7b295fb96
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/RabModSubscriptionPost1.md
@@ -0,0 +1,10 @@
+# RabModSubscriptionPost1
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**RabModSubscription** | [***RabModSubscriptionPost**](RabModSubscriptionPost.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/RabRelSubscription.md b/go-packages/meep-rnis-client/docs/RabRelSubscription.md
new file mode 100644
index 0000000000000000000000000000000000000000..13b07c6c6c866dee64dd632be2dbdb0674c53359
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/RabRelSubscription.md
@@ -0,0 +1,13 @@
+# RabRelSubscription
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CallbackReference** | **string** | URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information. | [default to null]
+**Links** | [***Link**](Link.md) | | [default to null]
+**FilterCriteria** | [***FilterCriteriaAssocQci**](FilterCriteriaAssocQci.md) | | [default to null]
+**ExpiryDeadline** | [***TimeStamp**](TimeStamp.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/RabRelSubscription1.md b/go-packages/meep-rnis-client/docs/RabRelSubscription1.md
new file mode 100644
index 0000000000000000000000000000000000000000..58db43f016a8b110a4779d152a7182b7177ab124
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/RabRelSubscription1.md
@@ -0,0 +1,10 @@
+# RabRelSubscription1
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**RabRelSubscription** | [***RabRelSubscription**](RabRelSubscription.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/RabRelSubscriptionPost.md b/go-packages/meep-rnis-client/docs/RabRelSubscriptionPost.md
new file mode 100644
index 0000000000000000000000000000000000000000..14663e543bb184b7541f58527f695b53943d565b
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/RabRelSubscriptionPost.md
@@ -0,0 +1,12 @@
+# RabRelSubscriptionPost
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CallbackReference** | **string** | URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information. | [default to null]
+**FilterCriteria** | [***FilterCriteriaAssocQci**](FilterCriteriaAssocQci.md) | | [default to null]
+**ExpiryDeadline** | [***TimeStamp**](TimeStamp.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/RabRelSubscriptionPost1.md b/go-packages/meep-rnis-client/docs/RabRelSubscriptionPost1.md
new file mode 100644
index 0000000000000000000000000000000000000000..31fb1c4dc36667e93132c1d4af403f5f0de24360
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/RabRelSubscriptionPost1.md
@@ -0,0 +1,10 @@
+# RabRelSubscriptionPost1
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**RabRelSubscription** | [***RabRelSubscriptionPost**](RabRelSubscriptionPost.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/S1BearerInfo.md b/go-packages/meep-rnis-client/docs/S1BearerInfo.md
new file mode 100644
index 0000000000000000000000000000000000000000..6c14104e7959d614b4d639502eb75a7c8e2b2ee8
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/S1BearerInfo.md
@@ -0,0 +1,11 @@
+# S1BearerInfo
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**TimeStamp** | [***TimeStamp**](TimeStamp.md) | | [optional] [default to null]
+**S1UeInfo** | [**[]S1UeInfo**](S1UeInfo.md) | | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/S1BearerInfoDetailed.md b/go-packages/meep-rnis-client/docs/S1BearerInfoDetailed.md
new file mode 100644
index 0000000000000000000000000000000000000000..11f9a7efc4b4775a504f7afc56f31424c94d83b2
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/S1BearerInfoDetailed.md
@@ -0,0 +1,12 @@
+# S1BearerInfoDetailed
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**ErabId** | **int32** | The element that uniquely identifies a S1 bearer for a specific UE, as defined in ETSI TS 136 413 | [default to null]
+**S1EnbInfo** | [***S1EnbInfo**](S1EnbInfo.md) | | [default to null]
+**SGwInfo** | [***SGwInfo**](SGwInfo.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/S1BearerSubscription.md b/go-packages/meep-rnis-client/docs/S1BearerSubscription.md
new file mode 100644
index 0000000000000000000000000000000000000000..19528602280174656283398032af8d1e147465d0
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/S1BearerSubscription.md
@@ -0,0 +1,14 @@
+# S1BearerSubscription
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CallbackReference** | **string** | URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information. | [default to null]
+**Links** | [***Link**](Link.md) | | [default to null]
+**EventType** | [***EventType**](EventType.md) | | [optional] [default to null]
+**S1BearerSubscriptionCriteria** | [***S1BearerSubscriptionCriteria**](S1BearerSubscriptionCriteria.md) | | [default to null]
+**ExpiryDeadline** | [***TimeStamp**](TimeStamp.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/S1BearerSubscription1.md b/go-packages/meep-rnis-client/docs/S1BearerSubscription1.md
new file mode 100644
index 0000000000000000000000000000000000000000..c824dd3ab47eae20f04286ebe14f504b65e71253
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/S1BearerSubscription1.md
@@ -0,0 +1,10 @@
+# S1BearerSubscription1
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**S1BearerSubscription** | [***S1BearerSubscription**](S1BearerSubscription.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/S1BearerSubscriptionCriteria.md b/go-packages/meep-rnis-client/docs/S1BearerSubscriptionCriteria.md
new file mode 100644
index 0000000000000000000000000000000000000000..3f3c46ae814c1191b89838fcd7632dec917ba92a
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/S1BearerSubscriptionCriteria.md
@@ -0,0 +1,13 @@
+# S1BearerSubscriptionCriteria
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**AssociateId** | [***AssociateId**](AssociateId.md) | | [optional] [default to null]
+**Plmn** | [***Plmn**](Plmn.md) | | [optional] [default to null]
+**CellId** | **[]string** | The E-UTRAN Cell Identity as a bit string (size (28)), as defined in 3GPP TS 36.413 | [optional] [default to null]
+**ErabId** | **int32** | The element that uniquely identifies a S1 bearer for a specific UE, as defined in ETSI TS 136 413 | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/S1BearerSubscriptionPost.md b/go-packages/meep-rnis-client/docs/S1BearerSubscriptionPost.md
new file mode 100644
index 0000000000000000000000000000000000000000..3e26fa81bc1b125dd1d90c0dfdcda4080673597a
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/S1BearerSubscriptionPost.md
@@ -0,0 +1,13 @@
+# S1BearerSubscriptionPost
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**CallbackReference** | **string** | URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information. | [default to null]
+**EventType** | [***EventType**](EventType.md) | | [optional] [default to null]
+**S1BearerSubscriptionCriteria** | [***S1BearerSubscriptionCriteria**](S1BearerSubscriptionCriteria.md) | | [default to null]
+**ExpiryDeadline** | [***TimeStamp**](TimeStamp.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/S1BearerSubscriptionPost1.md b/go-packages/meep-rnis-client/docs/S1BearerSubscriptionPost1.md
new file mode 100644
index 0000000000000000000000000000000000000000..66e4e32a5af2f30cc8597433bab03aeadb1f85cd
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/S1BearerSubscriptionPost1.md
@@ -0,0 +1,10 @@
+# S1BearerSubscriptionPost1
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**S1BearerSubscription** | [***S1BearerSubscriptionPost**](S1BearerSubscriptionPost.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/S1EnbInfo.md b/go-packages/meep-rnis-client/docs/S1EnbInfo.md
new file mode 100644
index 0000000000000000000000000000000000000000..f8e7f0aa39de28bcd36b6a1e3a7ac8748c70a000
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/S1EnbInfo.md
@@ -0,0 +1,11 @@
+# S1EnbInfo
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**IpAddress** | **string** | eNB transport layer address of this S1 bearer. | [default to null]
+**TunnelId** | **string** | eNB GTP-U TEID of this S1 bearer. | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/S1UeInfo.md b/go-packages/meep-rnis-client/docs/S1UeInfo.md
new file mode 100644
index 0000000000000000000000000000000000000000..e3c36d2d6c80b733d3f80fef943357233df6ab07
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/S1UeInfo.md
@@ -0,0 +1,13 @@
+# S1UeInfo
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**TempUeId** | [**[]TempUeId**](TempUeId.md) | | [default to null]
+**AssociateId** | [**[]AssociateId**](AssociateId.md) | | [optional] [default to null]
+**Ecgi** | [**[]Ecgi**](Ecgi.md) | | [default to null]
+**S1BearerInfoDetailed** | [**[]S1BearerInfoDetailed**](S1BearerInfoDetailed.md) | | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/SGwInfo.md b/go-packages/meep-rnis-client/docs/SGwInfo.md
new file mode 100644
index 0000000000000000000000000000000000000000..509feadb3ad5370ab7edefcc322448e2b1a4ea4c
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/SGwInfo.md
@@ -0,0 +1,11 @@
+# SGwInfo
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**IpAddress** | **string** | SGW transport layer address of this S1 bearer. | [default to null]
+**TunnelId** | **string** | SGW GTP-U TEID of this S1 bearer. | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/Subscription.md b/go-packages/meep-rnis-client/docs/Subscription.md
new file mode 100644
index 0000000000000000000000000000000000000000..d9a84079663d4d5f4e54bd5cb472eb70ae9eeb85
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/Subscription.md
@@ -0,0 +1,11 @@
+# Subscription
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Href** | **string** | URI referring to a resource | [default to null]
+**SubscriptionType** | [***SubscriptionType**](SubscriptionType.md) | | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/SubscriptionLinkList.md b/go-packages/meep-rnis-client/docs/SubscriptionLinkList.md
new file mode 100644
index 0000000000000000000000000000000000000000..6b9701f2c52a28ad123d4135a3beba36c957f7c9
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/SubscriptionLinkList.md
@@ -0,0 +1,11 @@
+# SubscriptionLinkList
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Links** | [***Link**](Link.md) | | [default to null]
+**Subscription** | [**[]Subscription**](Subscription.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/SubscriptionType.md b/go-packages/meep-rnis-client/docs/SubscriptionType.md
new file mode 100644
index 0000000000000000000000000000000000000000..33986fec33ed369110210a532c04d32783db9aab
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/SubscriptionType.md
@@ -0,0 +1,9 @@
+# SubscriptionType
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-ctrl-engine-model/docs/PodsStatus.md b/go-packages/meep-rnis-client/docs/TempUeId.md
similarity index 65%
rename from go-packages/meep-ctrl-engine-model/docs/PodsStatus.md
rename to go-packages/meep-rnis-client/docs/TempUeId.md
index 148d06e683d0a51f84ae61485d60d1347c6456f5..e0295d76bf40ecd293950c6a974c795bfeff07f7 100644
--- a/go-packages/meep-ctrl-engine-model/docs/PodsStatus.md
+++ b/go-packages/meep-rnis-client/docs/TempUeId.md
@@ -1,9 +1,10 @@
-# PodsStatus
+# TempUeId
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
-**PodStatus** | [**[]PodStatus**](PodStatus.md) | | [optional] [default to null]
+**Mmec** | **string** | MMEC as defined in ETSI TS 136 413 | [default to null]
+**Mtmsi** | **string** | M-TMSI as defined in ETSI TS 136 413 | [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/go-packages/meep-rnis-client/docs/TimeStamp.md b/go-packages/meep-rnis-client/docs/TimeStamp.md
new file mode 100644
index 0000000000000000000000000000000000000000..0a19f574ad40ba1f64c59494e4f459f58a222a5d
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/TimeStamp.md
@@ -0,0 +1,11 @@
+# TimeStamp
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Seconds** | **int32** | The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC | [default to null]
+**NanoSeconds** | **int32** | The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/Trigger.md b/go-packages/meep-rnis-client/docs/Trigger.md
new file mode 100644
index 0000000000000000000000000000000000000000..c439fe44d0d5706dc73a56275bbf4d318e5a7c09
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/Trigger.md
@@ -0,0 +1,9 @@
+# Trigger
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-client/docs/UeInfo.md b/go-packages/meep-rnis-client/docs/UeInfo.md
new file mode 100644
index 0000000000000000000000000000000000000000..aafdb3a3d53a7f41280dd46b4a5269530773a061
--- /dev/null
+++ b/go-packages/meep-rnis-client/docs/UeInfo.md
@@ -0,0 +1,11 @@
+# UeInfo
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**AssociateId** | [**[]AssociateId**](AssociateId.md) | | [optional] [default to null]
+**ErabInfo** | [**[]ErabQosParameters**](ErabQosParameters.md) | | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-ctrl-engine-client/git_push.sh b/go-packages/meep-rnis-client/git_push.sh
similarity index 100%
rename from go-packages/meep-ctrl-engine-client/git_push.sh
rename to go-packages/meep-rnis-client/git_push.sh
diff --git a/go-packages/meep-rnis-client/go.mod b/go-packages/meep-rnis-client/go.mod
new file mode 100644
index 0000000000000000000000000000000000000000..7c9da08832b2e03804aac9147153cfc4c536fe35
--- /dev/null
+++ b/go-packages/meep-rnis-client/go.mod
@@ -0,0 +1,9 @@
+module github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-rnis-client
+
+go 1.12
+
+require (
+ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3
+ golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a
+)
+
diff --git a/go-packages/meep-rnis-client/model_associate_id.go b/go-packages/meep-rnis-client/model_associate_id.go
new file mode 100644
index 0000000000000000000000000000000000000000..50a95e9fbda6db19372173a2d87423caafe0413a
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_associate_id.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type AssociateId struct {
+ // Numeric value (0-255) corresponding to specified type of identifier
+ Type_ string `json:"type"`
+ // Value for the identifier
+ Value string `json:"value"`
+}
diff --git a/go-packages/meep-rnis-client/model_ca_re_conf_subscription.go b/go-packages/meep-rnis-client/model_ca_re_conf_subscription.go
new file mode 100644
index 0000000000000000000000000000000000000000..5744963f35814fb30efb4e50601d084cdcd53f45
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_ca_re_conf_subscription.go
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type CaReConfSubscription struct {
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+ Links *Link `json:"_links"`
+ FilterCriteria *FilterCriteriaAssoc `json:"filterCriteria"`
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_ca_re_conf_subscription_1.go b/go-packages/meep-rnis-client/model_ca_re_conf_subscription_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..befc7881f12e46de5de89a857780a6a6fe89843b
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_ca_re_conf_subscription_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type CaReConfSubscription1 struct {
+ CaReConfSubscription *CaReConfSubscription `json:"CaReConfSubscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_ca_re_conf_subscription_post.go b/go-packages/meep-rnis-client/model_ca_re_conf_subscription_post.go
new file mode 100644
index 0000000000000000000000000000000000000000..7e435c3173b7cf93587e4d97d096f129eefc9e63
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_ca_re_conf_subscription_post.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type CaReConfSubscriptionPost struct {
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+ FilterCriteria *FilterCriteriaAssoc `json:"filterCriteria"`
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_ca_re_conf_subscription_post_1.go b/go-packages/meep-rnis-client/model_ca_re_conf_subscription_post_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..70f6aa90463eb87e3fb5b9eb98a35d218505a2ca
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_ca_re_conf_subscription_post_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type CaReConfSubscriptionPost1 struct {
+ CaReConfSubscription *CaReConfSubscriptionPost `json:"CaReConfSubscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_cell_change_subscription.go b/go-packages/meep-rnis-client/model_cell_change_subscription.go
new file mode 100644
index 0000000000000000000000000000000000000000..573b3b66a1459ac5c266f51807a4078c68a34246
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_cell_change_subscription.go
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type CellChangeSubscription struct {
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+ Links *Link `json:"_links"`
+ FilterCriteria *FilterCriteriaAssocHo `json:"filterCriteria"`
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_cell_change_subscription_1.go b/go-packages/meep-rnis-client/model_cell_change_subscription_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..8edb696287aa6c328b7d68c4fb2399778e361862
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_cell_change_subscription_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type CellChangeSubscription1 struct {
+ CellChangeSubscription *CellChangeSubscription `json:"CellChangeSubscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_cell_change_subscription_post.go b/go-packages/meep-rnis-client/model_cell_change_subscription_post.go
new file mode 100644
index 0000000000000000000000000000000000000000..d3284473c955135fbfa3ce974e46bfc426ed8278
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_cell_change_subscription_post.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type CellChangeSubscriptionPost struct {
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+ FilterCriteria *FilterCriteriaAssocHo `json:"filterCriteria"`
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_cell_change_subscription_post_1.go b/go-packages/meep-rnis-client/model_cell_change_subscription_post_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..498549d5bffcd63548f82f83c40b371e7640021b
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_cell_change_subscription_post_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type CellChangeSubscriptionPost1 struct {
+ CellChangeSubscription *CellChangeSubscriptionPost `json:"CellChangeSubscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_cell_user_info.go b/go-packages/meep-rnis-client/model_cell_user_info.go
new file mode 100644
index 0000000000000000000000000000000000000000..572ac63e98cb5393651a816819c48bfac3bc42bf
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_cell_user_info.go
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// The information on users per cell.
+type CellUserInfo struct {
+ Ecgi *Ecgi `json:"ecgi"`
+ UeInfo []UeInfo `json:"ueInfo"`
+}
diff --git a/go-packages/meep-rnis-client/model_ecgi.go b/go-packages/meep-rnis-client/model_ecgi.go
new file mode 100644
index 0000000000000000000000000000000000000000..76824026b50599016bd55eed54fa318a4f985c08
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_ecgi.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// E-UTRAN CelI Global Identifier as defined in 3GPP TS 36.413
+type Ecgi struct {
+ Plmn *Plmn `json:"plmn"`
+ // The E-UTRAN Cell Identity as a bit string (size (28)), as defined in 3GPP TS 36.413
+ CellId []string `json:"cellId"`
+}
diff --git a/go-packages/meep-rnis-client/model_erab_qos_parameters.go b/go-packages/meep-rnis-client/model_erab_qos_parameters.go
new file mode 100644
index 0000000000000000000000000000000000000000..d482277a75b5a680a73fecc0471a103f2cbbddec
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_erab_qos_parameters.go
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type ErabQosParameters struct {
+ // QoS Class Identifier as defined in TS 23.401
+ Qci int32 `json:"qci,omitempty"`
+ QosInformation *QosInformation `json:"qos_information,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_erab_qos_parameters_qci.go b/go-packages/meep-rnis-client/model_erab_qos_parameters_qci.go
new file mode 100644
index 0000000000000000000000000000000000000000..c0751db92a232a9d2fd51faa2beb7ccb7510435b
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_erab_qos_parameters_qci.go
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// QoS Class Identifier as defined in TS 23.401
+type ErabQosParametersQci struct {
+ QosInformation *QosInformation `json:"qosInformation,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_event_type.go b/go-packages/meep-rnis-client/model_event_type.go
new file mode 100644
index 0000000000000000000000000000000000000000..9caaa99dc92534ecdf13031804421ea88a56f599
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_event_type.go
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// EventType : Description of the subscribed event.
+type EventType string
+
+// List of EventType
+const (
+ RESERVED_EVENT_TYPE_EventType EventType = "RESERVED_EVENT_TYPE"
+ S1_BEARER_ESTABLISH_EventType EventType = "S1_BEARER_ESTABLISH"
+ S1_BEARER_MODIFY_EventType EventType = "S1_BEARER_MODIFY"
+ S1_BEARER_RELEASE_EventType EventType = "S1_BEARER_RELEASE"
+)
diff --git a/go-packages/meep-rnis-client/model_filter_criteria_assoc.go b/go-packages/meep-rnis-client/model_filter_criteria_assoc.go
new file mode 100644
index 0000000000000000000000000000000000000000..7ac91b7e1fc3eafaf1e05e3b5ca522ae5f279853
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_filter_criteria_assoc.go
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// List of filtering criteria for the subscription.
+type FilterCriteriaAssoc struct {
+ // Unique identifier for the mobile edge application instance
+ AppInsId string `json:"appInsId,omitempty"`
+ AssociateId *AssociateId `json:"associateId,omitempty"`
+ Plmn *Plmn `json:"plmn,omitempty"`
+ // The E-UTRAN Cell Identity as a bit string (size (28)), as defined in 3GPP TS 36.413
+ CellId []string `json:"cellId,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_filter_criteria_assoc_ho.go b/go-packages/meep-rnis-client/model_filter_criteria_assoc_ho.go
new file mode 100644
index 0000000000000000000000000000000000000000..d3b8dd431aeda161be78e819ed71edd373b6f96e
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_filter_criteria_assoc_ho.go
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// List of filtering criteria for the subscription.
+type FilterCriteriaAssocHo struct {
+ // Unique identifier for the mobile edge application instance
+ AppInsId string `json:"appInsId,omitempty"`
+ AssociateId *AssociateId `json:"associateId,omitempty"`
+ Plmn *Plmn `json:"plmn,omitempty"`
+ // The E-UTRAN Cell Identity as a bit string (size (28)), as defined in 3GPP TS 36.413
+ CellId []string `json:"cellId,omitempty"`
+ HoStatus *HoStatus `json:"hoStatus,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_filter_criteria_assoc_qci.go b/go-packages/meep-rnis-client/model_filter_criteria_assoc_qci.go
new file mode 100644
index 0000000000000000000000000000000000000000..42df19fd5483e35857fbb352d48a882b11d3d9cb
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_filter_criteria_assoc_qci.go
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// List of filtering criteria for the subscription.
+type FilterCriteriaAssocQci struct {
+ // Unique identifier for the mobile edge application instance
+ AppInsId string `json:"appInsId,omitempty"`
+ AssociateId *AssociateId `json:"associateId,omitempty"`
+ Plmn *Plmn `json:"plmn,omitempty"`
+ // The E-UTRAN Cell Identity as a bit string (size (28)), as defined in 3GPP TS 36.413
+ CellId []string `json:"cellId,omitempty"`
+ // QoS Class Identifier as defined in TS 23.401
+ Qci int32 `json:"qci,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_filter_criteria_assoc_tri.go b/go-packages/meep-rnis-client/model_filter_criteria_assoc_tri.go
new file mode 100644
index 0000000000000000000000000000000000000000..19bfdac8d08dfe56acdddf3def10a3a8f2e551e8
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_filter_criteria_assoc_tri.go
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// List of filtering criteria for the subscription.
+type FilterCriteriaAssocTri struct {
+ // Unique identifier for the mobile edge application instance
+ AppInsId string `json:"appInsId,omitempty"`
+ AssociateId *AssociateId `json:"associateId,omitempty"`
+ Plmn *Plmn `json:"plmn,omitempty"`
+ // The E-UTRAN Cell Identity as a bit string (size (28)), as defined in 3GPP TS 36.413
+ CellId []string `json:"cellId,omitempty"`
+ Trigger *Trigger `json:"trigger,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_ho_status.go b/go-packages/meep-rnis-client/model_ho_status.go
new file mode 100644
index 0000000000000000000000000000000000000000..b165dd4dfae6a8017af3347df0349ccbadbdbdcd
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_ho_status.go
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// HoStatus : Description of the subscribed to event
+type HoStatus string
+
+// List of HoStatus
+const (
+ RESERVED_HO_STATUS_HoStatus HoStatus = "RESERVED_HO_STATUS"
+ IN_PREPARATION_HoStatus HoStatus = "IN_PREPARATION"
+ IN_EXECUTION_HoStatus HoStatus = "IN_EXECUTION"
+ COMPLETED_HoStatus HoStatus = "COMPLETED"
+ REJECTED_HoStatus HoStatus = "REJECTED"
+ CANCELLED_HoStatus HoStatus = "CANCELLED"
+)
diff --git a/go-packages/meep-rnis-client/model_inline_response_200.go b/go-packages/meep-rnis-client/model_inline_response_200.go
new file mode 100644
index 0000000000000000000000000000000000000000..28e1a9d086fbc63439b0812bd82fc1d94113faca
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_inline_response_200.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type InlineResponse200 struct {
+ RabInfo *RabInfo `json:"RabInfo"`
+}
diff --git a/go-packages/meep-rnis-client/model_inline_response_200_1.go b/go-packages/meep-rnis-client/model_inline_response_200_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..3db150f8649152cb719198c43090e965c861aa9f
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_inline_response_200_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type InlineResponse2001 struct {
+ PlmnInfo []PlmnInfo `json:"PlmnInfo,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_inline_response_200_10.go b/go-packages/meep-rnis-client/model_inline_response_200_10.go
new file mode 100644
index 0000000000000000000000000000000000000000..36cae61d118304d6c5cda8f3c67df4ee2d00836f
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_inline_response_200_10.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type InlineResponse20010 struct {
+ CaReConfSubscription *CaReConfSubscription `json:"CaReConfSubscription"`
+}
diff --git a/go-packages/meep-rnis-client/model_inline_response_200_2.go b/go-packages/meep-rnis-client/model_inline_response_200_2.go
new file mode 100644
index 0000000000000000000000000000000000000000..cbde8330ef3499de927cf30a4e0946034dbf7a4e
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_inline_response_200_2.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type InlineResponse2002 struct {
+ S1BearerInfo *S1BearerInfo `json:"S1BearerInfo"`
+}
diff --git a/go-packages/meep-rnis-client/model_inline_response_200_3.go b/go-packages/meep-rnis-client/model_inline_response_200_3.go
new file mode 100644
index 0000000000000000000000000000000000000000..63b51217d3796078fcbbfdbdbcd98047759e2030
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_inline_response_200_3.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type InlineResponse2003 struct {
+ SubscriptionLinkList *SubscriptionLinkList `json:"SubscriptionLinkList"`
+}
diff --git a/go-packages/meep-rnis-client/model_inline_response_200_4.go b/go-packages/meep-rnis-client/model_inline_response_200_4.go
new file mode 100644
index 0000000000000000000000000000000000000000..aa6cbbf1e8319718cf4227fc59cc3c4e4f787591
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_inline_response_200_4.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type InlineResponse2004 struct {
+ CellChangeSubscription *CellChangeSubscription `json:"CellChangeSubscription"`
+}
diff --git a/go-packages/meep-rnis-client/model_inline_response_200_5.go b/go-packages/meep-rnis-client/model_inline_response_200_5.go
new file mode 100644
index 0000000000000000000000000000000000000000..81442c4d0be00eb44ee8963379edadc457d3b1b4
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_inline_response_200_5.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type InlineResponse2005 struct {
+ MeasTaSubscription *MeasTaSubscription `json:"MeasTaSubscription"`
+}
diff --git a/go-packages/meep-rnis-client/model_inline_response_200_6.go b/go-packages/meep-rnis-client/model_inline_response_200_6.go
new file mode 100644
index 0000000000000000000000000000000000000000..3ec316af811d93371c52322a5abbf8c12fba772b
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_inline_response_200_6.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type InlineResponse2006 struct {
+ MeasRepUeSubscription *MeasRepUeSubscription `json:"MeasRepUeSubscription"`
+}
diff --git a/go-packages/meep-rnis-client/model_inline_response_200_7.go b/go-packages/meep-rnis-client/model_inline_response_200_7.go
new file mode 100644
index 0000000000000000000000000000000000000000..9440335d087b1234a35ce1061a5cbc0d2e980fdc
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_inline_response_200_7.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type InlineResponse2007 struct {
+ RabEstSubscription *RabEstSubscription `json:"RabEstSubscription"`
+}
diff --git a/go-packages/meep-rnis-client/model_inline_response_200_8.go b/go-packages/meep-rnis-client/model_inline_response_200_8.go
new file mode 100644
index 0000000000000000000000000000000000000000..26323a246145777c4a5280df18cc89467875e3d4
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_inline_response_200_8.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type InlineResponse2008 struct {
+ RabModSubscription *RabModSubscription `json:"RabModSubscription"`
+}
diff --git a/go-packages/meep-rnis-client/model_inline_response_200_9.go b/go-packages/meep-rnis-client/model_inline_response_200_9.go
new file mode 100644
index 0000000000000000000000000000000000000000..416603fe15932938d76d51924d6b4e2f3da5987e
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_inline_response_200_9.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type InlineResponse2009 struct {
+ RabRelSubscription *RabRelSubscription `json:"RabRelSubscription"`
+}
diff --git a/go-packages/meep-rnis-client/model_inline_response_201.go b/go-packages/meep-rnis-client/model_inline_response_201.go
new file mode 100644
index 0000000000000000000000000000000000000000..a52eb5dd33860880d38e9dafa6ccd7ab4c943edf
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_inline_response_201.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type InlineResponse201 struct {
+ CellChangeSubscription *CellChangeSubscription `json:"CellChangeSubscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_inline_response_201_1.go b/go-packages/meep-rnis-client/model_inline_response_201_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..96cf6def56e69c6cb6e20029011489b551eb62aa
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_inline_response_201_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type InlineResponse2011 struct {
+ S1BearerSubscription *S1BearerSubscription `json:"S1BearerSubscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_inline_response_201_2.go b/go-packages/meep-rnis-client/model_inline_response_201_2.go
new file mode 100644
index 0000000000000000000000000000000000000000..591e1ebb770969dd5e9a5f2a2b62f377b3cb4c80
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_inline_response_201_2.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type InlineResponse2012 struct {
+ MeasTaSubscription *MeasTaSubscription `json:"MeasTaSubscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_inline_response_201_3.go b/go-packages/meep-rnis-client/model_inline_response_201_3.go
new file mode 100644
index 0000000000000000000000000000000000000000..0305a5f95e4b97b89f673edc7a4b046834f906f1
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_inline_response_201_3.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type InlineResponse2013 struct {
+ MeasRepUeSubscription *MeasRepUeSubscription `json:"MeasRepUeSubscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_inline_response_201_4.go b/go-packages/meep-rnis-client/model_inline_response_201_4.go
new file mode 100644
index 0000000000000000000000000000000000000000..f36546443594ce004ec05f5d5a4e9e67b15db203
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_inline_response_201_4.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type InlineResponse2014 struct {
+ RabEstSubscription *RabEstSubscription `json:"RabEstSubscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_inline_response_201_5.go b/go-packages/meep-rnis-client/model_inline_response_201_5.go
new file mode 100644
index 0000000000000000000000000000000000000000..3c074fad6c44e22da2b16b25d5a023b47125951b
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_inline_response_201_5.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type InlineResponse2015 struct {
+ RabModSubscription *RabModSubscription `json:"RabModSubscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_inline_response_201_6.go b/go-packages/meep-rnis-client/model_inline_response_201_6.go
new file mode 100644
index 0000000000000000000000000000000000000000..9124b35f70f2bb4caa96a2dbd24f04fe0c91dc72
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_inline_response_201_6.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type InlineResponse2016 struct {
+ RabRelSubscription *RabRelSubscription `json:"RabRelSubscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_inline_response_201_7.go b/go-packages/meep-rnis-client/model_inline_response_201_7.go
new file mode 100644
index 0000000000000000000000000000000000000000..77feb6017249ea974c575c78c884dfee544fd5bb
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_inline_response_201_7.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type InlineResponse2017 struct {
+ CaReConfSubscription *CaReConfSubscription `json:"CaReConfSubscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_inline_response_400.go b/go-packages/meep-rnis-client/model_inline_response_400.go
new file mode 100644
index 0000000000000000000000000000000000000000..b6d6d882d1c3a42946ae26e3f350b86cda3a7806
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_inline_response_400.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type InlineResponse400 struct {
+ ProblemDetails *ProblemDetails `json:"ProblemDetails,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_inline_response_403.go b/go-packages/meep-rnis-client/model_inline_response_403.go
new file mode 100644
index 0000000000000000000000000000000000000000..9b07335ca26dc7d5bcfa55529826ffb81764260f
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_inline_response_403.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type InlineResponse403 struct {
+ ProblemDetails *ProblemDetails `json:"ProblemDetails"`
+}
diff --git a/go-packages/meep-rnis-client/model_link.go b/go-packages/meep-rnis-client/model_link.go
new file mode 100644
index 0000000000000000000000000000000000000000..105a625011cb69c6e5a1d4967e0b37f55079efa2
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_link.go
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// List of hyperlinks related to the resource
+type Link struct {
+ // URI referring to a resource
+ Self string `json:"self,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_meas_rep_ue_subscription.go b/go-packages/meep-rnis-client/model_meas_rep_ue_subscription.go
new file mode 100644
index 0000000000000000000000000000000000000000..ea70c1fdcdbf18011b466223219dd8d6b5909f73
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_meas_rep_ue_subscription.go
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type MeasRepUeSubscription struct {
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+ Links *Link `json:"_links"`
+ FilterCriteria *FilterCriteriaAssocTri `json:"filterCriteria"`
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_meas_rep_ue_subscription_1.go b/go-packages/meep-rnis-client/model_meas_rep_ue_subscription_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..1c3bf0f2bde205efc92b216fc913e160fbff2792
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_meas_rep_ue_subscription_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type MeasRepUeSubscription1 struct {
+ MeasRepUeSubscription *MeasRepUeSubscription `json:"MeasRepUeSubscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_meas_rep_ue_subscription_post.go b/go-packages/meep-rnis-client/model_meas_rep_ue_subscription_post.go
new file mode 100644
index 0000000000000000000000000000000000000000..0dab150c17158761d6293d6f619fe4f769299bf0
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_meas_rep_ue_subscription_post.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type MeasRepUeSubscriptionPost struct {
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+ FilterCriteria *FilterCriteriaAssocTri `json:"filterCriteria"`
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_meas_rep_ue_subscription_post_1.go b/go-packages/meep-rnis-client/model_meas_rep_ue_subscription_post_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..960ca8e02607c44ba9fd93dc705d01287c08ab97
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_meas_rep_ue_subscription_post_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type MeasRepUeSubscriptionPost1 struct {
+ MeasRepUeSubscription *MeasRepUeSubscriptionPost `json:"MeasRepUeSubscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_meas_ta_subscription.go b/go-packages/meep-rnis-client/model_meas_ta_subscription.go
new file mode 100644
index 0000000000000000000000000000000000000000..d1e8d333174112754e509afb3e1c41b856a1a7a1
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_meas_ta_subscription.go
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type MeasTaSubscription struct {
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+ Links *Link `json:"_links"`
+ FilterCriteria *FilterCriteriaAssoc `json:"filterCriteria"`
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_meas_ta_subscription_1.go b/go-packages/meep-rnis-client/model_meas_ta_subscription_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..4a05e7851a2b79ba2e75b9e77d6101df01c19d45
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_meas_ta_subscription_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type MeasTaSubscription1 struct {
+ MeasTaSubscription *MeasTaSubscription `json:"MeasTaSubscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_meas_ta_subscription_post.go b/go-packages/meep-rnis-client/model_meas_ta_subscription_post.go
new file mode 100644
index 0000000000000000000000000000000000000000..30efdddcc3c6ac87938ee66221b5cd827e0cd3c0
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_meas_ta_subscription_post.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type MeasTaSubscriptionPost struct {
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+ FilterCriteria *FilterCriteriaAssoc `json:"filterCriteria"`
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_meas_ta_subscription_post_1.go b/go-packages/meep-rnis-client/model_meas_ta_subscription_post_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..30d6caf6840c4bfc08cc1421c2a99ea8c9bf1d97
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_meas_ta_subscription_post_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type MeasTaSubscriptionPost1 struct {
+ MeasTaSubscription *MeasTaSubscriptionPost `json:"MeasTaSubscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_plmn.go b/go-packages/meep-rnis-client/model_plmn.go
new file mode 100644
index 0000000000000000000000000000000000000000..a71ae3719a156725d44d9a0a30f631a366cdbdeb
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_plmn.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type Plmn struct {
+ // The Mobile Country Code part of PLMN Identity as defined in 3GPP TS 36.413
+ Mcc string `json:"mcc"`
+ // The Mobile Network Code part of PLMN Identity as defined in 3GPP TS 36.413
+ Mnc string `json:"mnc"`
+}
diff --git a/go-packages/meep-rnis-client/model_plmn_info.go b/go-packages/meep-rnis-client/model_plmn_info.go
new file mode 100644
index 0000000000000000000000000000000000000000..3ce422fcf53af4af83cae76d695d3a157e96fd7b
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_plmn_info.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type PlmnInfo struct {
+ TimeStamp *TimeStamp `json:"timeStamp,omitempty"`
+ // Unique identifier for the mobile edge application instance
+ AppInsId string `json:"appInsId"`
+ Ecgi *Ecgi `json:"ecgi"`
+}
diff --git a/go-packages/meep-rnis-client/model_problem_details.go b/go-packages/meep-rnis-client/model_problem_details.go
new file mode 100644
index 0000000000000000000000000000000000000000..0f1fb9cca360b4d366deb8dd509498285d934d0d
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_problem_details.go
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type ProblemDetails struct {
+ // A URI reference according to IETF RFC 3986 that identifies the problem type
+ Type_ string `json:"type,omitempty"`
+ // A short, human-readable summary of the problem type
+ Title string `json:"title,omitempty"`
+ // The HTTP status code for this occurrence of the problem
+ Status int32 `json:"status,omitempty"`
+ // A human-readable explanation specific to this occurrence of the problem
+ Detail string `json:"detail,omitempty"`
+ // A URI reference that identifies the specific occurrence of the problem
+ Instance string `json:"instance,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_qos_information.go b/go-packages/meep-rnis-client/model_qos_information.go
new file mode 100644
index 0000000000000000000000000000000000000000..5c74dfd760b78522a8bbf8a40c2af4e21c49f8ec
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_qos_information.go
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type QosInformation struct {
+ // This IE indicates the maximum downlink E-RAB Bit Rate as defined in TS 23.401 for this bearer.
+ ErabMbrDl int32 `json:"erabMbrDl"`
+ // This IE indicates the maximum uplink E-RAB Bit Rate as defined in TS 23.401 for this bearer.
+ ErabMbrUl int32 `json:"erabMbrUl"`
+ // This IE indicates the guaranteed downlink E-RAB Bit Rate as defined in TS 23.401 for this bearer.
+ ErabGbrDl int32 `json:"erabGbrDl"`
+ // This IE indicates the guaranteed uplink E-RAB Bit Rate as defined in TS 23.401 for this bearer.
+ ErabGbrUl int32 `json:"erabGbrUl"`
+}
diff --git a/go-packages/meep-rnis-client/model_rab_est_subscription.go b/go-packages/meep-rnis-client/model_rab_est_subscription.go
new file mode 100644
index 0000000000000000000000000000000000000000..1ee8238662fa8b9e609d3a9e263824c1f6263007
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_rab_est_subscription.go
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type RabEstSubscription struct {
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+ Links *Link `json:"_links"`
+ FilterCriteria *FilterCriteriaAssocQci `json:"filterCriteria"`
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_rab_est_subscription_1.go b/go-packages/meep-rnis-client/model_rab_est_subscription_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..b92f483107110902eef9b61205969d6896628ae2
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_rab_est_subscription_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type RabEstSubscription1 struct {
+ RabEstSubscription *RabEstSubscription `json:"RabEstSubscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_rab_est_subscription_post.go b/go-packages/meep-rnis-client/model_rab_est_subscription_post.go
new file mode 100644
index 0000000000000000000000000000000000000000..a6af9b611b4453d0bb1d5415d0fdd01273006018
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_rab_est_subscription_post.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type RabEstSubscriptionPost struct {
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+ FilterCriteria *FilterCriteriaAssocQci `json:"filterCriteria"`
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_rab_est_subscription_post_1.go b/go-packages/meep-rnis-client/model_rab_est_subscription_post_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..0b31dbe73e8d46ad7af933b57652c7f43e2c43d1
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_rab_est_subscription_post_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type RabEstSubscriptionPost1 struct {
+ RabEstSubscription *RabEstSubscriptionPost `json:"RabEstSubscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_rab_info.go b/go-packages/meep-rnis-client/model_rab_info.go
new file mode 100644
index 0000000000000000000000000000000000000000..5babcf11d3b987d36808bc783bd7002faa49f2a5
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_rab_info.go
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type RabInfo struct {
+ TimeStamp *TimeStamp `json:"timeStamp,omitempty"`
+ // Unique identifier for the mobile edge application instance
+ AppInsId string `json:"appInsId"`
+ // Unique identifier allocated by the Mobile Edge application for the Information request.
+ RequestId string `json:"requestId"`
+ CellUserInfo []CellUserInfo `json:"cellUserInfo,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_rab_mod_subscription.go b/go-packages/meep-rnis-client/model_rab_mod_subscription.go
new file mode 100644
index 0000000000000000000000000000000000000000..f2585066ae413d91e82316c8f843f7bc0d3eec60
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_rab_mod_subscription.go
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type RabModSubscription struct {
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+ Links *Link `json:"_links"`
+ FilterCriteria *FilterCriteriaAssocQci `json:"filterCriteria"`
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_rab_mod_subscription_1.go b/go-packages/meep-rnis-client/model_rab_mod_subscription_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..c80e3a39a6b3498bbd04d64bfcf05f2a91716127
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_rab_mod_subscription_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type RabModSubscription1 struct {
+ RabModSubscription *RabModSubscription `json:"RabModSubscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_rab_mod_subscription_post.go b/go-packages/meep-rnis-client/model_rab_mod_subscription_post.go
new file mode 100644
index 0000000000000000000000000000000000000000..f604d9faff26ec259eb5a60eb5538385f7897e84
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_rab_mod_subscription_post.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type RabModSubscriptionPost struct {
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+ FilterCriteria *FilterCriteriaAssocQci `json:"filterCriteria"`
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_rab_mod_subscription_post_1.go b/go-packages/meep-rnis-client/model_rab_mod_subscription_post_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..06efc2435fc34debade4dd7607a312362ff0b00d
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_rab_mod_subscription_post_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type RabModSubscriptionPost1 struct {
+ RabModSubscription *RabModSubscriptionPost `json:"RabModSubscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_rab_rel_subscription.go b/go-packages/meep-rnis-client/model_rab_rel_subscription.go
new file mode 100644
index 0000000000000000000000000000000000000000..23f591072dd78afe0e0117536a582ae84de5db81
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_rab_rel_subscription.go
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type RabRelSubscription struct {
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+ Links *Link `json:"_links"`
+ FilterCriteria *FilterCriteriaAssocQci `json:"filterCriteria"`
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_rab_rel_subscription_1.go b/go-packages/meep-rnis-client/model_rab_rel_subscription_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..dce9ef16a377f1e3b2eacff28d8453515888dab7
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_rab_rel_subscription_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type RabRelSubscription1 struct {
+ RabRelSubscription *RabRelSubscription `json:"RabRelSubscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_rab_rel_subscription_post.go b/go-packages/meep-rnis-client/model_rab_rel_subscription_post.go
new file mode 100644
index 0000000000000000000000000000000000000000..e800c5b5c27659179a77d63477d63d3569d0dd34
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_rab_rel_subscription_post.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type RabRelSubscriptionPost struct {
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+ FilterCriteria *FilterCriteriaAssocQci `json:"filterCriteria"`
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_rab_rel_subscription_post_1.go b/go-packages/meep-rnis-client/model_rab_rel_subscription_post_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..74b943aa3627be1a650fa7005cfbf3cf63e8b35e
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_rab_rel_subscription_post_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type RabRelSubscriptionPost1 struct {
+ RabRelSubscription *RabRelSubscriptionPost `json:"RabRelSubscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_s1_bearer_info.go b/go-packages/meep-rnis-client/model_s1_bearer_info.go
new file mode 100644
index 0000000000000000000000000000000000000000..0e8a7efe30161b96d7769e553888ebe740cacbfe
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_s1_bearer_info.go
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type S1BearerInfo struct {
+ TimeStamp *TimeStamp `json:"timeStamp,omitempty"`
+ S1UeInfo []S1UeInfo `json:"s1UeInfo"`
+}
diff --git a/go-packages/meep-rnis-client/model_s1_bearer_info_detailed.go b/go-packages/meep-rnis-client/model_s1_bearer_info_detailed.go
new file mode 100644
index 0000000000000000000000000000000000000000..62f98cb553559e2fff67fa3fa02d5cd15410de42
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_s1_bearer_info_detailed.go
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// Information on UEs in the specific cell.
+type S1BearerInfoDetailed struct {
+ // The element that uniquely identifies a S1 bearer for a specific UE, as defined in ETSI TS 136 413
+ ErabId int32 `json:"erabId"`
+ S1EnbInfo *S1EnbInfo `json:"s1EnbInfo"`
+ SGwInfo *SGwInfo `json:"sGwInfo,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_s1_bearer_subscription.go b/go-packages/meep-rnis-client/model_s1_bearer_subscription.go
new file mode 100644
index 0000000000000000000000000000000000000000..46aee4831ce6aad40001d76c45ac8ca1bb338a4d
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_s1_bearer_subscription.go
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type S1BearerSubscription struct {
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+ Links *Link `json:"_links"`
+ EventType *EventType `json:"eventType,omitempty"`
+ S1BearerSubscriptionCriteria *S1BearerSubscriptionCriteria `json:"s1BearerSubscriptionCriteria"`
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_s1_bearer_subscription_1.go b/go-packages/meep-rnis-client/model_s1_bearer_subscription_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..bfec6c586115ddc7e1ea9ecc73c978061b2d222b
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_s1_bearer_subscription_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type S1BearerSubscription1 struct {
+ S1BearerSubscription *S1BearerSubscription `json:"S1BearerSubscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_s1_bearer_subscription_criteria.go b/go-packages/meep-rnis-client/model_s1_bearer_subscription_criteria.go
new file mode 100644
index 0000000000000000000000000000000000000000..d66f0c7ea01f4f93a0aa3241fefa37e7f4b55f1d
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_s1_bearer_subscription_criteria.go
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// List of filtering criteria for the subscription.
+type S1BearerSubscriptionCriteria struct {
+ AssociateId *AssociateId `json:"associateId,omitempty"`
+ Plmn *Plmn `json:"plmn,omitempty"`
+ // The E-UTRAN Cell Identity as a bit string (size (28)), as defined in 3GPP TS 36.413
+ CellId []string `json:"cellId,omitempty"`
+ // The element that uniquely identifies a S1 bearer for a specific UE, as defined in ETSI TS 136 413
+ ErabId int32 `json:"erabId,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_s1_bearer_subscription_post.go b/go-packages/meep-rnis-client/model_s1_bearer_subscription_post.go
new file mode 100644
index 0000000000000000000000000000000000000000..e69edb2bf15a6bec4d06c14aa49cff797daaf1eb
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_s1_bearer_subscription_post.go
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type S1BearerSubscriptionPost struct {
+ // URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.
+ CallbackReference string `json:"callbackReference"`
+ EventType *EventType `json:"eventType,omitempty"`
+ S1BearerSubscriptionCriteria *S1BearerSubscriptionCriteria `json:"s1BearerSubscriptionCriteria"`
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_s1_bearer_subscription_post_1.go b/go-packages/meep-rnis-client/model_s1_bearer_subscription_post_1.go
new file mode 100644
index 0000000000000000000000000000000000000000..d45267b8d1308fbd789c537856e3a153c75d1477
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_s1_bearer_subscription_post_1.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type S1BearerSubscriptionPost1 struct {
+ S1BearerSubscription *S1BearerSubscriptionPost `json:"S1BearerSubscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_s1_enb_info.go b/go-packages/meep-rnis-client/model_s1_enb_info.go
new file mode 100644
index 0000000000000000000000000000000000000000..c5cec6bce9b6311b1755443015ab7a6592d15983
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_s1_enb_info.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type S1EnbInfo struct {
+ // eNB transport layer address of this S1 bearer.
+ IpAddress string `json:"ipAddress"`
+ // eNB GTP-U TEID of this S1 bearer.
+ TunnelId string `json:"tunnelId"`
+}
diff --git a/go-packages/meep-rnis-client/model_s1_ue_info.go b/go-packages/meep-rnis-client/model_s1_ue_info.go
new file mode 100644
index 0000000000000000000000000000000000000000..a42ac1190f7bea4f1a217674471d2001495b37a4
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_s1_ue_info.go
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// The information on users per cell.
+type S1UeInfo struct {
+ TempUeId []TempUeId `json:"tempUeId"`
+ AssociateId []AssociateId `json:"associateId,omitempty"`
+ Ecgi []Ecgi `json:"ecgi"`
+ S1BearerInfoDetailed []S1BearerInfoDetailed `json:"s1BearerInfoDetailed"`
+}
diff --git a/go-packages/meep-rnis-client/model_s_gw_info.go b/go-packages/meep-rnis-client/model_s_gw_info.go
new file mode 100644
index 0000000000000000000000000000000000000000..80d7caccd0ed0c9ddf908a48691bd6a64727252b
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_s_gw_info.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type SGwInfo struct {
+ // SGW transport layer address of this S1 bearer.
+ IpAddress string `json:"ipAddress"`
+ // SGW GTP-U TEID of this S1 bearer.
+ TunnelId string `json:"tunnelId"`
+}
diff --git a/go-packages/meep-rnis-client/model_subscription.go b/go-packages/meep-rnis-client/model_subscription.go
new file mode 100644
index 0000000000000000000000000000000000000000..2d4d07239433e70f1702a528c32182a968d70482
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_subscription.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// A link to a subscription.
+type Subscription struct {
+ // URI referring to a resource
+ Href string `json:"href"`
+ SubscriptionType *SubscriptionType `json:"subscriptionType"`
+}
diff --git a/go-packages/meep-rnis-client/model_subscription_link_list.go b/go-packages/meep-rnis-client/model_subscription_link_list.go
new file mode 100644
index 0000000000000000000000000000000000000000..a1ad25f04d454643f84822b3e65a0be6a61489ba
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_subscription_link_list.go
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type SubscriptionLinkList struct {
+ Links *Link `json:"_links"`
+ Subscription []Subscription `json:"subscription,omitempty"`
+}
diff --git a/go-packages/meep-rnis-client/model_subscription_type.go b/go-packages/meep-rnis-client/model_subscription_type.go
new file mode 100644
index 0000000000000000000000000000000000000000..ef996961a1c3454727cf0e821fb48b19cc8f53fb
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_subscription_type.go
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// SubscriptionType : Numeric value corresponding to specified type of subscription.
+type SubscriptionType string
+
+// List of SubscriptionType
+const (
+ RESERVED_SUBSCRIPTION_TYPE_SubscriptionType SubscriptionType = "RESERVED_SUBSCRIPTION_TYPE"
+ CELL_CHANGE_SubscriptionType SubscriptionType = "CELL_CHANGE"
+ RAB_ESTABLISHMENT_SubscriptionType SubscriptionType = "RAB_ESTABLISHMENT"
+ RAB_MODIFICATION_SubscriptionType SubscriptionType = "RAB_MODIFICATION"
+ RAB_RELEASE_SubscriptionType SubscriptionType = "RAB_RELEASE"
+ MEAS_REPORT_UE_SubscriptionType SubscriptionType = "MEAS_REPORT_UE"
+ MEAS_TIMING_ADVANCE_SubscriptionType SubscriptionType = "MEAS_TIMING_ADVANCE"
+ CA_RECONF_SubscriptionType SubscriptionType = "CA_RECONF"
+ S1_BEARE_SubscriptionType SubscriptionType = "S1_BEARE"
+)
diff --git a/go-packages/meep-rnis-client/model_temp_ue_id.go b/go-packages/meep-rnis-client/model_temp_ue_id.go
new file mode 100644
index 0000000000000000000000000000000000000000..89369277092abc50378c8c47c2ab330f831874bf
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_temp_ue_id.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type TempUeId struct {
+ // MMEC as defined in ETSI TS 136 413
+ Mmec string `json:"mmec"`
+ // M-TMSI as defined in ETSI TS 136 413
+ Mtmsi string `json:"mtmsi"`
+}
diff --git a/go-packages/meep-rnis-client/model_time_stamp.go b/go-packages/meep-rnis-client/model_time_stamp.go
new file mode 100644
index 0000000000000000000000000000000000000000..db676f04eec5b6dd2e3871fa9b828e75bf26651d
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_time_stamp.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type TimeStamp struct {
+ // The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC
+ Seconds int32 `json:"seconds"`
+ // The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC
+ NanoSeconds int32 `json:"nanoSeconds"`
+}
diff --git a/go-packages/meep-rnis-client/model_trigger.go b/go-packages/meep-rnis-client/model_trigger.go
new file mode 100644
index 0000000000000000000000000000000000000000..e5351bbab725d7ae9c472e61a503e65d7d394b9e
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_trigger.go
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// Trigger : Unique identifier for the mobile edge application instance
+type Trigger string
+
+// List of Trigger
+const (
+ NOT_AVAILABLE_Trigger Trigger = "NOT_AVAILABLE"
+ PERIODICAL_REPORT_STRONGEST_CELLS_Trigger Trigger = "PERIODICAL_REPORT_STRONGEST_CELLS"
+ PERIODICAL_REPORT_STRONGEST_CELLS_FOR_SON_Trigger Trigger = "PERIODICAL_REPORT_STRONGEST_CELLS_FOR_SON"
+ PERIODICAL_REPORT_CGI_Trigger Trigger = "PERIODICAL_REPORT_CGI"
+ EVENT_A1_Trigger Trigger = "EVENT_A1"
+ EVENT_A2_Trigger Trigger = "EVENT_A2"
+ EVENT_A3_Trigger Trigger = "EVENT_A3"
+ EVENT_A4_Trigger Trigger = "EVENT_A4"
+ EVENT_A5_Trigger Trigger = "EVENT_A5"
+ EVENT_A6_Trigger Trigger = "EVENT_A6"
+ EVENT_B1_Trigger Trigger = "EVENT_B1"
+ EVENT_B2_Trigger Trigger = "EVENT_B2"
+ EVENT_C1_Trigger Trigger = "EVENT_C1"
+ EVENT_C2_Trigger Trigger = "EVENT_C2"
+ EVENT_W1_Trigger Trigger = "EVENT_W1"
+ EVENT_W2_Trigger Trigger = "EVENT_W2"
+ EVENT_W3_Trigger Trigger = "EVENT_W3"
+)
diff --git a/go-packages/meep-rnis-client/model_ue_info.go b/go-packages/meep-rnis-client/model_ue_info.go
new file mode 100644
index 0000000000000000000000000000000000000000..b8546f6e00d4a03f03edc2ba5214bb531d8c1dfe
--- /dev/null
+++ b/go-packages/meep-rnis-client/model_ue_info.go
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// Information on UEs in the specific cell.
+type UeInfo struct {
+ AssociateId []AssociateId `json:"associateId,omitempty"`
+ ErabInfo []ErabQosParameters `json:"erabInfo"`
+}
diff --git a/go-packages/meep-rnis-client/response.go b/go-packages/meep-rnis-client/response.go
new file mode 100644
index 0000000000000000000000000000000000000000..22fa8ea0fba35828a4158f64a7f57051867ca40b
--- /dev/null
+++ b/go-packages/meep-rnis-client/response.go
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service REST API
+ *
+ * Radio Network Information Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC012 RNI API](http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf)
[meep-rnis](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-rnis)
Edge Service used by edge applications that want to get information about radio conditions in the network
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.1.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+import (
+ "net/http"
+)
+
+type APIResponse struct {
+ *http.Response `json:"-"`
+ Message string `json:"message,omitempty"`
+ // Operation is the name of the swagger operation.
+ Operation string `json:"operation,omitempty"`
+ // RequestURL is the request URL. This value is always available, even if the
+ // embedded *http.Response is nil.
+ RequestURL string `json:"url,omitempty"`
+ // Method is the HTTP method used for the request. This value is always
+ // available, even if the embedded *http.Response is nil.
+ Method string `json:"method,omitempty"`
+ // Payload holds the contents of the response body (which may be nil or empty).
+ // This is provided here as the raw response.Body() reader will have already
+ // been drained.
+ Payload []byte `json:"-"`
+}
+
+func NewAPIResponse(r *http.Response) *APIResponse {
+
+ response := &APIResponse{Response: r}
+ return response
+}
+
+func NewAPIResponseWithError(errorMessage string) *APIResponse {
+
+ response := &APIResponse{Message: errorMessage}
+ return response
+}
diff --git a/go-packages/meep-rnis-notification-client/README.md b/go-packages/meep-rnis-notification-client/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..2d5ef88e2b97e4fb7bd93fa4fcc4bbcca3065e2b
--- /dev/null
+++ b/go-packages/meep-rnis-notification-client/README.md
@@ -0,0 +1,48 @@
+# Go API client for client
+
+This API enables the Radio Network Information Service to post notification events to subscribers' applications
None
User's Edge Applications subscribing to Radio Network Information events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
+
+## Overview
+This API client was generated by the [swagger-codegen](https://github.com/swagger-api/swagger-codegen) project. By using the [swagger-spec](https://github.com/swagger-api/swagger-spec) from a remote server, you can easily generate an API client.
+
+- API version: 1.0.0
+- Package version: 1.0.0
+- Build package: io.swagger.codegen.languages.GoClientCodegen
+
+## Installation
+Put the package under your project folder and add the following in import:
+```golang
+import "./client"
+```
+
+## Documentation for API Endpoints
+
+All URIs are relative to *https://localhost/rni/v1*
+
+Class | Method | HTTP request | Description
+------------ | ------------- | ------------- | -------------
+*NotificationsApi* | [**PostCellChangeNotification**](docs/NotificationsApi.md#postcellchangenotification) | **Post** /notifications/cell_change/{subscriptionId} | This operation is used by the AdvantEDGE RNI Service to issue a callback notification to inform about teh cell change of a UE subscription
+*NotificationsApi* | [**PostExpiryNotification**](docs/NotificationsApi.md#postexpirynotification) | **Post** /notifications/expiry/{subscriptionId} | This operation is used by the AdvantEDGE RNI Service to issue a notification with regards to expiry of an existing subscription
+
+
+## Documentation For Models
+
+ - [AssociateId](docs/AssociateId.md)
+ - [CellChangeNotification](docs/CellChangeNotification.md)
+ - [Ecgi](docs/Ecgi.md)
+ - [ExpiryNotification](docs/ExpiryNotification.md)
+ - [HoStatus](docs/HoStatus.md)
+ - [Link](docs/Link.md)
+ - [Plmn](docs/Plmn.md)
+ - [TempUeId](docs/TempUeId.md)
+ - [TimeStamp](docs/TimeStamp.md)
+
+
+## Documentation For Authorization
+ Endpoints do not require authorization.
+
+
+## Author
+
+AdvantEDGE@InterDigital.com
+
diff --git a/go-packages/meep-rnis-notification-client/api/swagger.yaml b/go-packages/meep-rnis-notification-client/api/swagger.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..e8d2224ee54e404e1fd7a8fbde94bb6546329de3
--- /dev/null
+++ b/go-packages/meep-rnis-notification-client/api/swagger.yaml
@@ -0,0 +1,296 @@
+---
+swagger: "2.0"
+info:
+ description: "This API enables the Radio Network Information Service to post notification\
+ \ events to subscribers' applications
None
User's Edge Applications subscribing to Radio Network Information\
+ \ events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_\
+ \
This API is not exposed by default on the AdvantEDGE platform"
+ version: "1.0.0"
+ title: "AdvantEDGE Radio Network Information Service Subscription Notification REST\
+ \ API"
+ contact:
+ name: "InterDigital AdvantEDGE Support"
+ email: "AdvantEDGE@InterDigital.com"
+ license:
+ name: "Apache 2.0"
+ url: "https://github.com/InterDigitalInc/AdvantEDGE/blob/master/LICENSE"
+basePath: "/rni/v1"
+tags:
+- name: "notifications"
+consumes:
+- "application/json"
+produces:
+- "application/json"
+paths:
+ /notifications/cell_change/{subscriptionId}:
+ post:
+ tags:
+ - "notifications"
+ summary: "This operation is used by the AdvantEDGE RNI Service to issue a callback\
+ \ notification to inform about teh cell change of a UE subscription"
+ description: "Cell change subscription notification"
+ operationId: "postCellChangeNotification"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Identity of a notification subscription"
+ required: true
+ type: "string"
+ x-exportParamName: "SubscriptionId"
+ - in: "body"
+ name: "Notification"
+ description: "Cell change Notification"
+ required: true
+ schema:
+ $ref: "#/definitions/CellChangeNotification"
+ x-exportParamName: "Notification"
+ responses:
+ 204:
+ description: "No Content"
+ /notifications/expiry/{subscriptionId}:
+ post:
+ tags:
+ - "notifications"
+ summary: "This operation is used by the AdvantEDGE RNI Service to issue a notification\
+ \ with regards to expiry of an existing subscription"
+ description: "Subscription expiry notification"
+ operationId: "postExpiryNotification"
+ parameters:
+ - name: "subscriptionId"
+ in: "path"
+ description: "Identity of a notification subscription"
+ required: true
+ type: "string"
+ x-exportParamName: "SubscriptionId"
+ - in: "body"
+ name: "Notification"
+ description: "Subscription expiry Notification"
+ required: true
+ schema:
+ $ref: "#/definitions/ExpiryNotification"
+ x-exportParamName: "Notification"
+ responses:
+ 204:
+ description: "No Content"
+definitions:
+ AssociateId:
+ type: "object"
+ required:
+ - "type"
+ - "value"
+ properties:
+ type:
+ type: "string"
+ example: "UE_IPV4_ADDRESS"
+ description: "Numeric value (0-255) corresponding to specified type of identifier"
+ enum:
+ - "RESERVED_ASSOCIATED_ID_TYPE"
+ - "UE_IPV4_ADDRESS"
+ - "UE_IPV6_ADDRESS"
+ - "NATED_IP_ADDRESS"
+ - "GTP_TEID"
+ value:
+ type: "string"
+ example: "192.168.10.1"
+ description: "Value for the identifier"
+ example:
+ type: "UE_IPV4_ADDRESS"
+ value: "192.168.10.1"
+ Ecgi:
+ type: "object"
+ required:
+ - "cellId"
+ - "plmn"
+ properties:
+ plmn:
+ $ref: "#/definitions/Plmn"
+ cellId:
+ type: "array"
+ example: "0x800000A"
+ description: "The E-UTRAN Cell Identity as a bit string (size (28)), as defined\
+ \ in 3GPP TS 36.413"
+ items:
+ type: "string"
+ format: "binary"
+ description: "E-UTRAN CelI Global Identifier as defined in 3GPP TS 36.413"
+ example:
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000A"
+ HoStatus:
+ type: "string"
+ description: "Description of the subscribed to event"
+ example: "COMPLETED"
+ enum:
+ - "RESERVED_HO_STATUS"
+ - "IN_PREPARATION"
+ - "IN_EXECUTION"
+ - "COMPLETED"
+ - "REJECTED"
+ - "CANCELLED"
+ Link:
+ type: "object"
+ properties:
+ self:
+ type: "string"
+ format: "uri"
+ example: "http://meAppClient.example.com/rni/v1/"
+ description: "URI referring to a resource"
+ description: "List of hyperlinks related to the resource"
+ example:
+ self: "http://meAppClient.example.com/rni/v1/"
+ Plmn:
+ type: "object"
+ required:
+ - "mcc"
+ - "mnc"
+ properties:
+ mcc:
+ type: "string"
+ format: "string"
+ example: "001"
+ description: "The Mobile Country Code part of PLMN Identity as defined in\
+ \ 3GPP TS 36.413"
+ mnc:
+ type: "string"
+ format: "string"
+ example: "01"
+ description: "The Mobile Network Code part of PLMN Identity as defined in\
+ \ 3GPP TS 36.413"
+ example:
+ mnc: "01"
+ mcc: "001"
+ TempUeId:
+ type: "object"
+ required:
+ - "mmec"
+ - "mtmsi"
+ properties:
+ mmec:
+ type: "string"
+ example: "0"
+ description: "MMEC as defined in ETSI TS 136 413"
+ mtmsi:
+ type: "string"
+ example: "1234"
+ description: "M-TMSI as defined in ETSI TS 136 413"
+ example:
+ mtmsi: "1234"
+ mmec: "0"
+ TimeStamp:
+ type: "object"
+ required:
+ - "nanoSeconds"
+ - "seconds"
+ properties:
+ seconds:
+ type: "integer"
+ format: "uint32"
+ example: 1577836800
+ description: "The seconds part of the time. Time is defined as Unix-time since\
+ \ January 1, 1970, 00:00:00 UTC"
+ nanoSeconds:
+ type: "integer"
+ format: "uint32"
+ example: 0
+ description: "The nanoseconds part of the time. Time is defined as Unix-time\
+ \ since January 1, 1970, 00:00:00 UTC"
+ example:
+ seconds: 1577836800
+ nanoSeconds: 0
+ ExpiryNotification:
+ type: "object"
+ required:
+ - "_links"
+ - "expiryDeadline"
+ properties:
+ timestamp:
+ $ref: "#/definitions/TimeStamp"
+ _links:
+ $ref: "#/definitions/Link"
+ expiryDeadline:
+ $ref: "#/definitions/TimeStamp"
+ example:
+ _links:
+ self: "http://meAppClient.example.com/rni/v1/"
+ expiryDeadline:
+ seconds: 1577836800
+ nanoSeconds: 0
+ timestamp:
+ seconds: 1577836800
+ nanoSeconds: 0
+ CellChangeNotification:
+ type: "object"
+ required:
+ - "hoStatus"
+ - "srcEcgi"
+ - "trgEcgi"
+ properties:
+ timestamp:
+ $ref: "#/definitions/TimeStamp"
+ associateId:
+ $ref: "#/definitions/AssociateId"
+ srcEcgi:
+ $ref: "#/definitions/Ecgi"
+ trgEcgi:
+ type: "array"
+ items:
+ $ref: "#/definitions/Ecgi"
+ hoStatus:
+ $ref: "#/definitions/HoStatus"
+ tempUeId:
+ $ref: "#/definitions/TempUeId"
+ example:
+ associateId:
+ type: "UE_IPV4_ADDRESS"
+ value: "192.168.10.1"
+ hoStatus: "COMPLETED"
+ srcEcgi:
+ plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000A"
+ trgEcgi:
+ - plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000A"
+ - plmn:
+ mnc: "01"
+ mcc: "001"
+ cellId: "0x800000A"
+ timestamp:
+ seconds: 1577836800
+ nanoSeconds: 0
+ tempUeId:
+ mtmsi: "1234"
+ mmec: "0"
+parameters:
+ Path.SubscriptionId:
+ name: "subscriptionId"
+ in: "path"
+ description: "Identity of a notification subscription"
+ required: true
+ type: "string"
+ x-exportParamName: "SubscriptionId"
+ Body.CellChangeNotification:
+ in: "body"
+ name: "Notification"
+ description: "Cell change Notification"
+ required: true
+ schema:
+ $ref: "#/definitions/CellChangeNotification"
+ x-exportParamName: "Notification"
+ Body.ExpiryNotification:
+ in: "body"
+ name: "Notification"
+ description: "Subscription expiry Notification"
+ required: true
+ schema:
+ $ref: "#/definitions/ExpiryNotification"
+ x-exportParamName: "Notification"
+externalDocs:
+ description: "ETSI MEC012 V1.1.1 Radio Network Information Service API"
+ url: "http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf"
diff --git a/go-packages/meep-rnis-notification-client/api_notifications.go b/go-packages/meep-rnis-notification-client/api_notifications.go
new file mode 100644
index 0000000000000000000000000000000000000000..1adf306416028544a40694ab2d570d19a155153c
--- /dev/null
+++ b/go-packages/meep-rnis-notification-client/api_notifications.go
@@ -0,0 +1,185 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service Subscription Notification REST API
+ *
+ * This API enables the Radio Network Information Service to post notification events to subscribers' applications
None
User's Edge Applications subscribing to Radio Network Information events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+import (
+ "context"
+ "fmt"
+ "io/ioutil"
+ "net/http"
+ "net/url"
+ "strings"
+)
+
+// Linger please
+var (
+ _ context.Context
+)
+
+type NotificationsApiService service
+
+/*
+NotificationsApiService This operation is used by the AdvantEDGE RNI Service to issue a callback notification to inform about teh cell change of a UE subscription
+Cell change subscription notification
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Identity of a notification subscription
+ * @param notification Cell change Notification
+
+
+*/
+func (a *NotificationsApiService) PostCellChangeNotification(ctx context.Context, subscriptionId string, notification CellChangeNotification) (*http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Post")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/notifications/cell_change/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ // body params
+ localVarPostBody = ¬ification
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ return localVarHttpResponse, newErr
+ }
+
+ return localVarHttpResponse, nil
+}
+
+/*
+NotificationsApiService This operation is used by the AdvantEDGE RNI Service to issue a notification with regards to expiry of an existing subscription
+Subscription expiry notification
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param subscriptionId Identity of a notification subscription
+ * @param notification Subscription expiry Notification
+
+
+*/
+func (a *NotificationsApiService) PostExpiryNotification(ctx context.Context, subscriptionId string, notification ExpiryNotification) (*http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Post")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/notifications/expiry/{subscriptionId}"
+ localVarPath = strings.Replace(localVarPath, "{"+"subscriptionId"+"}", fmt.Sprintf("%v", subscriptionId), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ // body params
+ localVarPostBody = ¬ification
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ return localVarHttpResponse, newErr
+ }
+
+ return localVarHttpResponse, nil
+}
diff --git a/go-packages/meep-rnis-notification-client/client.go b/go-packages/meep-rnis-notification-client/client.go
new file mode 100644
index 0000000000000000000000000000000000000000..b0c4e787b5d17410108271544c6c33b1adb973fa
--- /dev/null
+++ b/go-packages/meep-rnis-notification-client/client.go
@@ -0,0 +1,479 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service Subscription Notification REST API
+ *
+ * This API enables the Radio Network Information Service to post notification events to subscribers' applications
None
User's Edge Applications subscribing to Radio Network Information events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+import (
+ "bytes"
+ "context"
+ "encoding/json"
+ "encoding/xml"
+ "errors"
+ "fmt"
+ "io"
+ "mime/multipart"
+ "net/http"
+ "net/url"
+ "os"
+ "path/filepath"
+ "reflect"
+ "regexp"
+ "strconv"
+ "strings"
+ "time"
+ "unicode/utf8"
+
+ "golang.org/x/oauth2"
+)
+
+var (
+ jsonCheck = regexp.MustCompile("(?i:[application|text]/json)")
+ xmlCheck = regexp.MustCompile("(?i:[application|text]/xml)")
+)
+
+// APIClient manages communication with the AdvantEDGE Radio Network Information Service Subscription Notification REST API API v1.0.0
+// In most cases there should be only one, shared, APIClient.
+type APIClient struct {
+ cfg *Configuration
+ common service // Reuse a single struct instead of allocating one for each service on the heap.
+
+ // API Services
+
+ NotificationsApi *NotificationsApiService
+}
+
+type service struct {
+ client *APIClient
+}
+
+// NewAPIClient creates a new API client. Requires a userAgent string describing your application.
+// optionally a custom http.Client to allow for advanced features such as caching.
+func NewAPIClient(cfg *Configuration) *APIClient {
+ if cfg.HTTPClient == nil {
+ cfg.HTTPClient = http.DefaultClient
+ }
+
+ c := &APIClient{}
+ c.cfg = cfg
+ c.common.client = c
+
+ // API Services
+ c.NotificationsApi = (*NotificationsApiService)(&c.common)
+
+ return c
+}
+
+func atoi(in string) (int, error) {
+ return strconv.Atoi(in)
+}
+
+// selectHeaderContentType select a content type from the available list.
+func selectHeaderContentType(contentTypes []string) string {
+ if len(contentTypes) == 0 {
+ return ""
+ }
+ if contains(contentTypes, "application/json") {
+ return "application/json"
+ }
+ return contentTypes[0] // use the first content type specified in 'consumes'
+}
+
+// selectHeaderAccept join all accept types and return
+func selectHeaderAccept(accepts []string) string {
+ if len(accepts) == 0 {
+ return ""
+ }
+
+ if contains(accepts, "application/json") {
+ return "application/json"
+ }
+
+ return strings.Join(accepts, ",")
+}
+
+// contains is a case insenstive match, finding needle in a haystack
+func contains(haystack []string, needle string) bool {
+ for _, a := range haystack {
+ if strings.ToLower(a) == strings.ToLower(needle) {
+ return true
+ }
+ }
+ return false
+}
+
+// Verify optional parameters are of the correct type.
+func typeCheckParameter(obj interface{}, expected string, name string) error {
+ // Make sure there is an object.
+ if obj == nil {
+ return nil
+ }
+
+ // Check the type is as expected.
+ if reflect.TypeOf(obj).String() != expected {
+ return fmt.Errorf("Expected %s to be of type %s but received %s.", name, expected, reflect.TypeOf(obj).String())
+ }
+ return nil
+}
+
+// parameterToString convert interface{} parameters to string, using a delimiter if format is provided.
+func parameterToString(obj interface{}, collectionFormat string) string {
+ var delimiter string
+
+ switch collectionFormat {
+ case "pipes":
+ delimiter = "|"
+ case "ssv":
+ delimiter = " "
+ case "tsv":
+ delimiter = "\t"
+ case "csv":
+ delimiter = ","
+ }
+
+ if reflect.TypeOf(obj).Kind() == reflect.Slice {
+ return strings.Trim(strings.Replace(fmt.Sprint(obj), " ", delimiter, -1), "[]")
+ }
+
+ return fmt.Sprintf("%v", obj)
+}
+
+// callAPI do the request.
+func (c *APIClient) callAPI(request *http.Request) (*http.Response, error) {
+ return c.cfg.HTTPClient.Do(request)
+}
+
+// Change base path to allow switching to mocks
+func (c *APIClient) ChangeBasePath(path string) {
+ c.cfg.BasePath = path
+}
+
+// prepareRequest build the request
+func (c *APIClient) prepareRequest(
+ ctx context.Context,
+ path string, method string,
+ postBody interface{},
+ headerParams map[string]string,
+ queryParams url.Values,
+ formParams url.Values,
+ fileName string,
+ fileBytes []byte) (localVarRequest *http.Request, err error) {
+
+ var body *bytes.Buffer
+
+ // Detect postBody type and post.
+ if postBody != nil {
+ contentType := headerParams["Content-Type"]
+ if contentType == "" {
+ contentType = detectContentType(postBody)
+ headerParams["Content-Type"] = contentType
+ }
+
+ body, err = setBody(postBody, contentType)
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ // add form parameters and file if available.
+ if len(formParams) > 0 || (len(fileBytes) > 0 && fileName != "") {
+ if body != nil {
+ return nil, errors.New("Cannot specify postBody and multipart form at the same time.")
+ }
+ body = &bytes.Buffer{}
+ w := multipart.NewWriter(body)
+
+ for k, v := range formParams {
+ for _, iv := range v {
+ if strings.HasPrefix(k, "@") { // file
+ err = addFile(w, k[1:], iv)
+ if err != nil {
+ return nil, err
+ }
+ } else { // form value
+ w.WriteField(k, iv)
+ }
+ }
+ }
+ if len(fileBytes) > 0 && fileName != "" {
+ w.Boundary()
+ //_, fileNm := filepath.Split(fileName)
+ part, err := w.CreateFormFile("file", filepath.Base(fileName))
+ if err != nil {
+ return nil, err
+ }
+ _, err = part.Write(fileBytes)
+ if err != nil {
+ return nil, err
+ }
+ // Set the Boundary in the Content-Type
+ headerParams["Content-Type"] = w.FormDataContentType()
+ }
+
+ // Set Content-Length
+ headerParams["Content-Length"] = fmt.Sprintf("%d", body.Len())
+ w.Close()
+ }
+
+ // Setup path and query parameters
+ url, err := url.Parse(path)
+ if err != nil {
+ return nil, err
+ }
+
+ // Adding Query Param
+ query := url.Query()
+ for k, v := range queryParams {
+ for _, iv := range v {
+ query.Add(k, iv)
+ }
+ }
+
+ // Encode the parameters.
+ url.RawQuery = query.Encode()
+
+ // Generate a new request
+ if body != nil {
+ localVarRequest, err = http.NewRequest(method, url.String(), body)
+ } else {
+ localVarRequest, err = http.NewRequest(method, url.String(), nil)
+ }
+ if err != nil {
+ return nil, err
+ }
+
+ // add header parameters, if any
+ if len(headerParams) > 0 {
+ headers := http.Header{}
+ for h, v := range headerParams {
+ headers.Set(h, v)
+ }
+ localVarRequest.Header = headers
+ }
+
+ // Override request host, if applicable
+ if c.cfg.Host != "" {
+ localVarRequest.Host = c.cfg.Host
+ }
+
+ // Add the user agent to the request.
+ localVarRequest.Header.Add("User-Agent", c.cfg.UserAgent)
+
+ if ctx != nil {
+ // add context to the request
+ localVarRequest = localVarRequest.WithContext(ctx)
+
+ // Walk through any authentication.
+
+ // OAuth2 authentication
+ if tok, ok := ctx.Value(ContextOAuth2).(oauth2.TokenSource); ok {
+ // We were able to grab an oauth2 token from the context
+ var latestToken *oauth2.Token
+ if latestToken, err = tok.Token(); err != nil {
+ return nil, err
+ }
+
+ latestToken.SetAuthHeader(localVarRequest)
+ }
+
+ // Basic HTTP Authentication
+ if auth, ok := ctx.Value(ContextBasicAuth).(BasicAuth); ok {
+ localVarRequest.SetBasicAuth(auth.UserName, auth.Password)
+ }
+
+ // AccessToken Authentication
+ if auth, ok := ctx.Value(ContextAccessToken).(string); ok {
+ localVarRequest.Header.Add("Authorization", "Bearer "+auth)
+ }
+ }
+
+ for header, value := range c.cfg.DefaultHeader {
+ localVarRequest.Header.Add(header, value)
+ }
+
+ return localVarRequest, nil
+}
+
+func (c *APIClient) decode(v interface{}, b []byte, contentType string) (err error) {
+ if strings.Contains(contentType, "application/xml") {
+ if err = xml.Unmarshal(b, v); err != nil {
+ return err
+ }
+ return nil
+ } else if strings.Contains(contentType, "application/json") {
+ if err = json.Unmarshal(b, v); err != nil {
+ return err
+ }
+ return nil
+ }
+ return errors.New("undefined response type")
+}
+
+// Add a file to the multipart request
+func addFile(w *multipart.Writer, fieldName, path string) error {
+ file, err := os.Open(path)
+ if err != nil {
+ return err
+ }
+ defer file.Close()
+
+ part, err := w.CreateFormFile(fieldName, filepath.Base(path))
+ if err != nil {
+ return err
+ }
+ _, err = io.Copy(part, file)
+
+ return err
+}
+
+// Prevent trying to import "fmt"
+func reportError(format string, a ...interface{}) error {
+ return fmt.Errorf(format, a...)
+}
+
+// Set request body from an interface{}
+func setBody(body interface{}, contentType string) (bodyBuf *bytes.Buffer, err error) {
+ if bodyBuf == nil {
+ bodyBuf = &bytes.Buffer{}
+ }
+
+ if reader, ok := body.(io.Reader); ok {
+ _, err = bodyBuf.ReadFrom(reader)
+ } else if b, ok := body.([]byte); ok {
+ _, err = bodyBuf.Write(b)
+ } else if s, ok := body.(string); ok {
+ _, err = bodyBuf.WriteString(s)
+ } else if s, ok := body.(*string); ok {
+ _, err = bodyBuf.WriteString(*s)
+ } else if jsonCheck.MatchString(contentType) {
+ err = json.NewEncoder(bodyBuf).Encode(body)
+ } else if xmlCheck.MatchString(contentType) {
+ xml.NewEncoder(bodyBuf).Encode(body)
+ }
+
+ if err != nil {
+ return nil, err
+ }
+
+ if bodyBuf.Len() == 0 {
+ err = fmt.Errorf("Invalid body type %s\n", contentType)
+ return nil, err
+ }
+ return bodyBuf, nil
+}
+
+// detectContentType method is used to figure out `Request.Body` content type for request header
+func detectContentType(body interface{}) string {
+ contentType := "text/plain; charset=utf-8"
+ kind := reflect.TypeOf(body).Kind()
+
+ switch kind {
+ case reflect.Struct, reflect.Map, reflect.Ptr:
+ contentType = "application/json; charset=utf-8"
+ case reflect.String:
+ contentType = "text/plain; charset=utf-8"
+ default:
+ if b, ok := body.([]byte); ok {
+ contentType = http.DetectContentType(b)
+ } else if kind == reflect.Slice {
+ contentType = "application/json; charset=utf-8"
+ }
+ }
+
+ return contentType
+}
+
+// Ripped from https://github.com/gregjones/httpcache/blob/master/httpcache.go
+type cacheControl map[string]string
+
+func parseCacheControl(headers http.Header) cacheControl {
+ cc := cacheControl{}
+ ccHeader := headers.Get("Cache-Control")
+ for _, part := range strings.Split(ccHeader, ",") {
+ part = strings.Trim(part, " ")
+ if part == "" {
+ continue
+ }
+ if strings.ContainsRune(part, '=') {
+ keyval := strings.Split(part, "=")
+ cc[strings.Trim(keyval[0], " ")] = strings.Trim(keyval[1], ",")
+ } else {
+ cc[part] = ""
+ }
+ }
+ return cc
+}
+
+// CacheExpires helper function to determine remaining time before repeating a request.
+func CacheExpires(r *http.Response) time.Time {
+ // Figure out when the cache expires.
+ var expires time.Time
+ now, err := time.Parse(time.RFC1123, r.Header.Get("date"))
+ if err != nil {
+ return time.Now()
+ }
+ respCacheControl := parseCacheControl(r.Header)
+
+ if maxAge, ok := respCacheControl["max-age"]; ok {
+ lifetime, err := time.ParseDuration(maxAge + "s")
+ if err != nil {
+ expires = now
+ }
+ expires = now.Add(lifetime)
+ } else {
+ expiresHeader := r.Header.Get("Expires")
+ if expiresHeader != "" {
+ expires, err = time.Parse(time.RFC1123, expiresHeader)
+ if err != nil {
+ expires = now
+ }
+ }
+ }
+ return expires
+}
+
+func strlen(s string) int {
+ return utf8.RuneCountInString(s)
+}
+
+// GenericSwaggerError Provides access to the body, error and model on returned errors.
+type GenericSwaggerError struct {
+ body []byte
+ error string
+ model interface{}
+}
+
+// Error returns non-empty string if there was an error.
+func (e GenericSwaggerError) Error() string {
+ return e.error
+}
+
+// Body returns the raw bytes of the response
+func (e GenericSwaggerError) Body() []byte {
+ return e.body
+}
+
+// Model returns the unpacked model of the error
+func (e GenericSwaggerError) Model() interface{} {
+ return e.model
+}
diff --git a/go-packages/meep-ctrl-engine-client/configuration.go b/go-packages/meep-rnis-notification-client/configuration.go
similarity index 80%
rename from go-packages/meep-ctrl-engine-client/configuration.go
rename to go-packages/meep-rnis-notification-client/configuration.go
index 7a18ad7fad13d5703ffcbc0ae25301b5202d9994..a240060b086b83f05bb391912641ed026e7d6fcb 100644
--- a/go-packages/meep-ctrl-engine-client/configuration.go
+++ b/go-packages/meep-rnis-notification-client/configuration.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Radio Network Information Service Subscription Notification REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API enables the Radio Network Information Service to post notification events to subscribers' applications
None
User's Edge Applications subscribing to Radio Network Information events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -75,7 +75,7 @@ type Configuration struct {
func NewConfiguration() *Configuration {
cfg := &Configuration{
- BasePath: "http://localhost/v1",
+ BasePath: "https://localhost/rni/v1",
DefaultHeader: make(map[string]string),
UserAgent: "Swagger-Codegen/1.0.0/go",
}
diff --git a/go-packages/meep-rnis-notification-client/docs/AssociateId.md b/go-packages/meep-rnis-notification-client/docs/AssociateId.md
new file mode 100644
index 0000000000000000000000000000000000000000..0277a33a8dbbb13be34904f26969898363e8b47a
--- /dev/null
+++ b/go-packages/meep-rnis-notification-client/docs/AssociateId.md
@@ -0,0 +1,11 @@
+# AssociateId
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Type_** | **string** | Numeric value (0-255) corresponding to specified type of identifier | [default to null]
+**Value** | **string** | Value for the identifier | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-notification-client/docs/CellChangeNotification.md b/go-packages/meep-rnis-notification-client/docs/CellChangeNotification.md
new file mode 100644
index 0000000000000000000000000000000000000000..fa90f5788c257944414519bad3594ae33ac589c4
--- /dev/null
+++ b/go-packages/meep-rnis-notification-client/docs/CellChangeNotification.md
@@ -0,0 +1,15 @@
+# CellChangeNotification
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Timestamp** | [***TimeStamp**](TimeStamp.md) | | [optional] [default to null]
+**AssociateId** | [***AssociateId**](AssociateId.md) | | [optional] [default to null]
+**SrcEcgi** | [***Ecgi**](Ecgi.md) | | [default to null]
+**TrgEcgi** | [**[]Ecgi**](Ecgi.md) | | [default to null]
+**HoStatus** | [***HoStatus**](HoStatus.md) | | [default to null]
+**TempUeId** | [***TempUeId**](TempUeId.md) | | [optional] [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-notification-client/docs/Ecgi.md b/go-packages/meep-rnis-notification-client/docs/Ecgi.md
new file mode 100644
index 0000000000000000000000000000000000000000..15ba9aca0512d03a18d082a1906d2f33cd32f4c4
--- /dev/null
+++ b/go-packages/meep-rnis-notification-client/docs/Ecgi.md
@@ -0,0 +1,11 @@
+# Ecgi
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Plmn** | [***Plmn**](Plmn.md) | | [default to null]
+**CellId** | **[]string** | The E-UTRAN Cell Identity as a bit string (size (28)), as defined in 3GPP TS 36.413 | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-notification-client/docs/ExpiryNotification.md b/go-packages/meep-rnis-notification-client/docs/ExpiryNotification.md
new file mode 100644
index 0000000000000000000000000000000000000000..30654e66611954eb844ca9596887ecc2a5a6e19f
--- /dev/null
+++ b/go-packages/meep-rnis-notification-client/docs/ExpiryNotification.md
@@ -0,0 +1,12 @@
+# ExpiryNotification
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Timestamp** | [***TimeStamp**](TimeStamp.md) | | [optional] [default to null]
+**Links** | [***Link**](Link.md) | | [default to null]
+**ExpiryDeadline** | [***TimeStamp**](TimeStamp.md) | | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-notification-client/docs/HoStatus.md b/go-packages/meep-rnis-notification-client/docs/HoStatus.md
new file mode 100644
index 0000000000000000000000000000000000000000..085ea70e427c18a5cfedd2a148ff6f8db47ccee6
--- /dev/null
+++ b/go-packages/meep-rnis-notification-client/docs/HoStatus.md
@@ -0,0 +1,9 @@
+# HoStatus
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-ctrl-engine-model/docs/EventOther.md b/go-packages/meep-rnis-notification-client/docs/Link.md
similarity index 75%
rename from go-packages/meep-ctrl-engine-model/docs/EventOther.md
rename to go-packages/meep-rnis-notification-client/docs/Link.md
index df06c50f6a72108d8cb82cc5f12d78c91565e0ef..25f1aacc9fe5612569713a2d2b0eb04b9ebb1cbb 100644
--- a/go-packages/meep-ctrl-engine-model/docs/EventOther.md
+++ b/go-packages/meep-rnis-notification-client/docs/Link.md
@@ -1,9 +1,9 @@
-# EventOther
+# Link
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
-**Event** | **string** | Other event string | [optional] [default to null]
+**Self** | **string** | URI referring to a resource | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/go-packages/meep-rnis-notification-client/docs/NotificationsApi.md b/go-packages/meep-rnis-notification-client/docs/NotificationsApi.md
new file mode 100644
index 0000000000000000000000000000000000000000..3912df369238ea9bd5b2f7879e2514dbe3025fd1
--- /dev/null
+++ b/go-packages/meep-rnis-notification-client/docs/NotificationsApi.md
@@ -0,0 +1,68 @@
+# \NotificationsApi
+
+All URIs are relative to *https://localhost/rni/v1*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**PostCellChangeNotification**](NotificationsApi.md#PostCellChangeNotification) | **Post** /notifications/cell_change/{subscriptionId} | This operation is used by the AdvantEDGE RNI Service to issue a callback notification to inform about teh cell change of a UE subscription
+[**PostExpiryNotification**](NotificationsApi.md#PostExpiryNotification) | **Post** /notifications/expiry/{subscriptionId} | This operation is used by the AdvantEDGE RNI Service to issue a notification with regards to expiry of an existing subscription
+
+
+# **PostCellChangeNotification**
+> PostCellChangeNotification(ctx, subscriptionId, notification)
+This operation is used by the AdvantEDGE RNI Service to issue a callback notification to inform about teh cell change of a UE subscription
+
+Cell change subscription notification
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Identity of a notification subscription |
+ **notification** | [**CellChangeNotification**](CellChangeNotification.md)| Cell change Notification |
+
+### Return type
+
+ (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **PostExpiryNotification**
+> PostExpiryNotification(ctx, subscriptionId, notification)
+This operation is used by the AdvantEDGE RNI Service to issue a notification with regards to expiry of an existing subscription
+
+Subscription expiry notification
+
+### Required Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc.
+ **subscriptionId** | **string**| Identity of a notification subscription |
+ **notification** | [**ExpiryNotification**](ExpiryNotification.md)| Subscription expiry Notification |
+
+### Return type
+
+ (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/go-packages/meep-rnis-notification-client/docs/Plmn.md b/go-packages/meep-rnis-notification-client/docs/Plmn.md
new file mode 100644
index 0000000000000000000000000000000000000000..2df30e99256bf4ec515f6cbc6991812603a866ca
--- /dev/null
+++ b/go-packages/meep-rnis-notification-client/docs/Plmn.md
@@ -0,0 +1,11 @@
+# Plmn
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Mcc** | **string** | The Mobile Country Code part of PLMN Identity as defined in 3GPP TS 36.413 | [default to null]
+**Mnc** | **string** | The Mobile Network Code part of PLMN Identity as defined in 3GPP TS 36.413 | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-notification-client/docs/TempUeId.md b/go-packages/meep-rnis-notification-client/docs/TempUeId.md
new file mode 100644
index 0000000000000000000000000000000000000000..e0295d76bf40ecd293950c6a974c795bfeff07f7
--- /dev/null
+++ b/go-packages/meep-rnis-notification-client/docs/TempUeId.md
@@ -0,0 +1,11 @@
+# TempUeId
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Mmec** | **string** | MMEC as defined in ETSI TS 136 413 | [default to null]
+**Mtmsi** | **string** | M-TMSI as defined in ETSI TS 136 413 | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-notification-client/docs/TimeStamp.md b/go-packages/meep-rnis-notification-client/docs/TimeStamp.md
new file mode 100644
index 0000000000000000000000000000000000000000..0a19f574ad40ba1f64c59494e4f459f58a222a5d
--- /dev/null
+++ b/go-packages/meep-rnis-notification-client/docs/TimeStamp.md
@@ -0,0 +1,11 @@
+# TimeStamp
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Seconds** | **int32** | The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC | [default to null]
+**NanoSeconds** | **int32** | The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC | [default to null]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/go-packages/meep-rnis-notification-client/git_push.sh b/go-packages/meep-rnis-notification-client/git_push.sh
new file mode 100644
index 0000000000000000000000000000000000000000..ae01b182ae9eb047d0999a496b060e62d7b01e5c
--- /dev/null
+++ b/go-packages/meep-rnis-notification-client/git_push.sh
@@ -0,0 +1,52 @@
+#!/bin/sh
+# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/
+#
+# Usage example: /bin/sh ./git_push.sh wing328 swagger-petstore-perl "minor update"
+
+git_user_id=$1
+git_repo_id=$2
+release_note=$3
+
+if [ "$git_user_id" = "" ]; then
+ git_user_id="GIT_USER_ID"
+ echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id"
+fi
+
+if [ "$git_repo_id" = "" ]; then
+ git_repo_id="GIT_REPO_ID"
+ echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id"
+fi
+
+if [ "$release_note" = "" ]; then
+ release_note="Minor update"
+ echo "[INFO] No command line input provided. Set \$release_note to $release_note"
+fi
+
+# Initialize the local directory as a Git repository
+git init
+
+# Adds the files in the local repository and stages them for commit.
+git add .
+
+# Commits the tracked changes and prepares them to be pushed to a remote repository.
+git commit -m "$release_note"
+
+# Sets the new remote
+git_remote=`git remote`
+if [ "$git_remote" = "" ]; then # git remote not defined
+
+ if [ "$GIT_TOKEN" = "" ]; then
+ echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment."
+ git remote add origin https://github.com/${git_user_id}/${git_repo_id}.git
+ else
+ git remote add origin https://${git_user_id}:${GIT_TOKEN}@github.com/${git_user_id}/${git_repo_id}.git
+ fi
+
+fi
+
+git pull origin master
+
+# Pushes (Forces) the changes in the local repository up to the remote repository
+echo "Git pushing to https://github.com/${git_user_id}/${git_repo_id}.git"
+git push origin master 2>&1 | grep -v 'To https'
+
diff --git a/go-packages/meep-rnis-notification-client/go.mod b/go-packages/meep-rnis-notification-client/go.mod
new file mode 100644
index 0000000000000000000000000000000000000000..29c2edb006ebb28bb0287337b609c6068f5c85e2
--- /dev/null
+++ b/go-packages/meep-rnis-notification-client/go.mod
@@ -0,0 +1,8 @@
+module github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-rnis-notification-client
+
+go 1.12
+
+require (
+ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3
+ golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a
+)
diff --git a/go-packages/meep-rnis-notification-client/model_associate_id.go b/go-packages/meep-rnis-notification-client/model_associate_id.go
new file mode 100644
index 0000000000000000000000000000000000000000..106c6fd29124031bd98b2048b58ddd9dae7a4679
--- /dev/null
+++ b/go-packages/meep-rnis-notification-client/model_associate_id.go
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service Subscription Notification REST API
+ *
+ * This API enables the Radio Network Information Service to post notification events to subscribers' applications
None
User's Edge Applications subscribing to Radio Network Information events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type AssociateId struct {
+ // Numeric value (0-255) corresponding to specified type of identifier
+ Type_ string `json:"type"`
+ // Value for the identifier
+ Value string `json:"value"`
+}
diff --git a/go-packages/meep-rnis-notification-client/model_cell_change_notification.go b/go-packages/meep-rnis-notification-client/model_cell_change_notification.go
new file mode 100644
index 0000000000000000000000000000000000000000..058ce2d77d7ddb741610395cc486d9e86289e5bf
--- /dev/null
+++ b/go-packages/meep-rnis-notification-client/model_cell_change_notification.go
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service Subscription Notification REST API
+ *
+ * This API enables the Radio Network Information Service to post notification events to subscribers' applications
None
User's Edge Applications subscribing to Radio Network Information events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type CellChangeNotification struct {
+ Timestamp *TimeStamp `json:"timestamp,omitempty"`
+ AssociateId *AssociateId `json:"associateId,omitempty"`
+ SrcEcgi *Ecgi `json:"srcEcgi"`
+ TrgEcgi []Ecgi `json:"trgEcgi"`
+ HoStatus *HoStatus `json:"hoStatus"`
+ TempUeId *TempUeId `json:"tempUeId,omitempty"`
+}
diff --git a/go-packages/meep-rnis-notification-client/model_ecgi.go b/go-packages/meep-rnis-notification-client/model_ecgi.go
new file mode 100644
index 0000000000000000000000000000000000000000..6e1c1358ceeae41678262a782debd03e6a921796
--- /dev/null
+++ b/go-packages/meep-rnis-notification-client/model_ecgi.go
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service Subscription Notification REST API
+ *
+ * This API enables the Radio Network Information Service to post notification events to subscribers' applications
None
User's Edge Applications subscribing to Radio Network Information events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// E-UTRAN CelI Global Identifier as defined in 3GPP TS 36.413
+type Ecgi struct {
+ Plmn *Plmn `json:"plmn"`
+ // The E-UTRAN Cell Identity as a bit string (size (28)), as defined in 3GPP TS 36.413
+ CellId []string `json:"cellId"`
+}
diff --git a/go-packages/meep-rnis-notification-client/model_expiry_notification.go b/go-packages/meep-rnis-notification-client/model_expiry_notification.go
new file mode 100644
index 0000000000000000000000000000000000000000..aab65f032fa521783d8eeed9e41aca82020a0a32
--- /dev/null
+++ b/go-packages/meep-rnis-notification-client/model_expiry_notification.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service Subscription Notification REST API
+ *
+ * This API enables the Radio Network Information Service to post notification events to subscribers' applications
None
User's Edge Applications subscribing to Radio Network Information events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type ExpiryNotification struct {
+ Timestamp *TimeStamp `json:"timestamp,omitempty"`
+ Links *Link `json:"_links"`
+ ExpiryDeadline *TimeStamp `json:"expiryDeadline"`
+}
diff --git a/go-packages/meep-rnis-notification-client/model_ho_status.go b/go-packages/meep-rnis-notification-client/model_ho_status.go
new file mode 100644
index 0000000000000000000000000000000000000000..07e6d5224ec0747b754efbffa60016c663ec6e95
--- /dev/null
+++ b/go-packages/meep-rnis-notification-client/model_ho_status.go
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service Subscription Notification REST API
+ *
+ * This API enables the Radio Network Information Service to post notification events to subscribers' applications
None
User's Edge Applications subscribing to Radio Network Information events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// HoStatus : Description of the subscribed to event
+type HoStatus string
+
+// List of HoStatus
+const (
+ RESERVED_HO_STATUS_HoStatus HoStatus = "RESERVED_HO_STATUS"
+ IN_PREPARATION_HoStatus HoStatus = "IN_PREPARATION"
+ IN_EXECUTION_HoStatus HoStatus = "IN_EXECUTION"
+ COMPLETED_HoStatus HoStatus = "COMPLETED"
+ REJECTED_HoStatus HoStatus = "REJECTED"
+ CANCELLED_HoStatus HoStatus = "CANCELLED"
+)
diff --git a/go-packages/meep-ctrl-engine-client/model_event_other.go b/go-packages/meep-rnis-notification-client/model_link.go
similarity index 51%
rename from go-packages/meep-ctrl-engine-client/model_event_other.go
rename to go-packages/meep-rnis-notification-client/model_link.go
index 7addeaf21f87cdd3eed7edd2563b293ec8b17aa1..64668f6534b2359abe7c78df2f921d4e38299280 100644
--- a/go-packages/meep-ctrl-engine-client/model_event_other.go
+++ b/go-packages/meep-rnis-notification-client/model_link.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Radio Network Information Service Subscription Notification REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API enables the Radio Network Information Service to post notification events to subscribers' applications
None
User's Edge Applications subscribing to Radio Network Information events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -24,8 +24,8 @@
package client
-// Other Event object
-type EventOther struct {
- // Other event string
- Event string `json:"event,omitempty"`
+// List of hyperlinks related to the resource
+type Link struct {
+ // URI referring to a resource
+ Self string `json:"self,omitempty"`
}
diff --git a/go-packages/meep-rnis-notification-client/model_plmn.go b/go-packages/meep-rnis-notification-client/model_plmn.go
new file mode 100644
index 0000000000000000000000000000000000000000..9161174b0393a93cc622f51df6ef9e0021c75119
--- /dev/null
+++ b/go-packages/meep-rnis-notification-client/model_plmn.go
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service Subscription Notification REST API
+ *
+ * This API enables the Radio Network Information Service to post notification events to subscribers' applications
None
User's Edge Applications subscribing to Radio Network Information events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type Plmn struct {
+ // The Mobile Country Code part of PLMN Identity as defined in 3GPP TS 36.413
+ Mcc string `json:"mcc"`
+ // The Mobile Network Code part of PLMN Identity as defined in 3GPP TS 36.413
+ Mnc string `json:"mnc"`
+}
diff --git a/go-packages/meep-rnis-notification-client/model_temp_ue_id.go b/go-packages/meep-rnis-notification-client/model_temp_ue_id.go
new file mode 100644
index 0000000000000000000000000000000000000000..40a13e04d87956967b6e3863e64e85175005b5d1
--- /dev/null
+++ b/go-packages/meep-rnis-notification-client/model_temp_ue_id.go
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service Subscription Notification REST API
+ *
+ * This API enables the Radio Network Information Service to post notification events to subscribers' applications
None
User's Edge Applications subscribing to Radio Network Information events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type TempUeId struct {
+ // MMEC as defined in ETSI TS 136 413
+ Mmec string `json:"mmec"`
+ // M-TMSI as defined in ETSI TS 136 413
+ Mtmsi string `json:"mtmsi"`
+}
diff --git a/go-packages/meep-rnis-notification-client/model_time_stamp.go b/go-packages/meep-rnis-notification-client/model_time_stamp.go
new file mode 100644
index 0000000000000000000000000000000000000000..1b88a291f368074133f6da6710a51a73bf7ee7de
--- /dev/null
+++ b/go-packages/meep-rnis-notification-client/model_time_stamp.go
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Radio Network Information Service Subscription Notification REST API
+ *
+ * This API enables the Radio Network Information Service to post notification events to subscribers' applications
None
User's Edge Applications subscribing to Radio Network Information events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+type TimeStamp struct {
+ // The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC
+ Seconds int32 `json:"seconds"`
+ // The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC
+ NanoSeconds int32 `json:"nanoSeconds"`
+}
diff --git a/go-packages/meep-ctrl-engine-client/response.go b/go-packages/meep-rnis-notification-client/response.go
similarity index 75%
rename from go-packages/meep-ctrl-engine-client/response.go
rename to go-packages/meep-rnis-notification-client/response.go
index 1de03e72c7249067aec495bff8068123e4e98185..126ce2491281fba8f35a3fd140b46e46e60b9163 100644
--- a/go-packages/meep-ctrl-engine-client/response.go
+++ b/go-packages/meep-rnis-notification-client/response.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Radio Network Information Service Subscription Notification REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API enables the Radio Network Information Service to post notification events to subscribers' applications
None
User's Edge Applications subscribing to Radio Network Information events must implement this API
API details available at _your-AdvantEDGE-ip-address/api_
This API is not exposed by default on the AdvantEDGE platform
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-ctrl-engine-client/README.md b/go-packages/meep-sandbox-ctrl-client/README.md
similarity index 57%
rename from go-packages/meep-ctrl-engine-client/README.md
rename to go-packages/meep-sandbox-ctrl-client/README.md
index cc273e695703a4388f0c29211b2f38666ea8b8f0..77de74fade6e681a05461e4ba644ec9adc42ce6e 100644
--- a/go-packages/meep-ctrl-engine-client/README.md
+++ b/go-packages/meep-sandbox-ctrl-client/README.md
@@ -1,6 +1,6 @@
# Go API client for client
-This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
## Overview
This API client was generated by the [swagger-codegen](https://github.com/swagger-api/swagger-codegen) project. By using the [swagger-spec](https://github.com/swagger-api/swagger-spec) from a remote server, you can easily generate an API client.
@@ -17,12 +17,16 @@ import "./client"
## Documentation for API Endpoints
-All URIs are relative to *http://localhost/v1*
+All URIs are relative to *https://localhost/sandbox-ctrl/v1*
Class | Method | HTTP request | Description
------------ | ------------- | ------------- | -------------
+*ActiveScenarioApi* | [**ActivateScenario**](docs/ActiveScenarioApi.md#activatescenario) | **Post** /active/{name} | Deploy a scenario
+*ActiveScenarioApi* | [**GetActiveNodeServiceMaps**](docs/ActiveScenarioApi.md#getactivenodeservicemaps) | **Get** /active/serviceMaps | Get deployed scenario's port mapping
+*ActiveScenarioApi* | [**GetActiveScenario**](docs/ActiveScenarioApi.md#getactivescenario) | **Get** /active | Get the deployed scenario
+*ActiveScenarioApi* | [**TerminateScenario**](docs/ActiveScenarioApi.md#terminatescenario) | **Delete** /active | Terminate the deployed scenario
*EventReplayApi* | [**CreateReplayFile**](docs/EventReplayApi.md#createreplayfile) | **Post** /replay/{name} | Add a replay file
-*EventReplayApi* | [**CreateReplayFileFromScenarioExec**](docs/EventReplayApi.md#createreplayfilefromscenarioexec) | **Post** /replay/{name}/generate | Generate a replay file from scenario execution events
+*EventReplayApi* | [**CreateReplayFileFromScenarioExec**](docs/EventReplayApi.md#createreplayfilefromscenarioexec) | **Post** /replay/{name}/generate | Generate a replay file from Active Scenario events
*EventReplayApi* | [**DeleteReplayFile**](docs/EventReplayApi.md#deletereplayfile) | **Delete** /replay/{name} | Delete a replay file
*EventReplayApi* | [**DeleteReplayFileList**](docs/EventReplayApi.md#deletereplayfilelist) | **Delete** /replay | Delete all replay files
*EventReplayApi* | [**GetReplayFile**](docs/EventReplayApi.md#getreplayfile) | **Get** /replay/{name} | Get a specific replay file
@@ -31,40 +35,33 @@ Class | Method | HTTP request | Description
*EventReplayApi* | [**LoopReplay**](docs/EventReplayApi.md#loopreplay) | **Post** /replay/{name}/loop | Loop-Execute a replay file present in the platform store
*EventReplayApi* | [**PlayReplayFile**](docs/EventReplayApi.md#playreplayfile) | **Post** /replay/{name}/play | Execute a replay file present in the platform store
*EventReplayApi* | [**StopReplayFile**](docs/EventReplayApi.md#stopreplayfile) | **Post** /replay/{name}/stop | Stop execution of a replay file
-*PodStatesApi* | [**GetStates**](docs/PodStatesApi.md#getstates) | **Get** /states | Get pods states
-*ScenarioConfigurationApi* | [**CreateScenario**](docs/ScenarioConfigurationApi.md#createscenario) | **Post** /scenarios/{name} | Add a scenario
-*ScenarioConfigurationApi* | [**DeleteScenario**](docs/ScenarioConfigurationApi.md#deletescenario) | **Delete** /scenarios/{name} | Delete a scenario
-*ScenarioConfigurationApi* | [**DeleteScenarioList**](docs/ScenarioConfigurationApi.md#deletescenariolist) | **Delete** /scenarios | Delete all scenarios
-*ScenarioConfigurationApi* | [**GetScenario**](docs/ScenarioConfigurationApi.md#getscenario) | **Get** /scenarios/{name} | Get a specific scenario
-*ScenarioConfigurationApi* | [**GetScenarioList**](docs/ScenarioConfigurationApi.md#getscenariolist) | **Get** /scenarios | Get all scenarios
-*ScenarioConfigurationApi* | [**SetScenario**](docs/ScenarioConfigurationApi.md#setscenario) | **Put** /scenarios/{name} | Update a scenario
-*ScenarioExecutionApi* | [**ActivateScenario**](docs/ScenarioExecutionApi.md#activatescenario) | **Post** /active/{name} | Deploy a scenario
-*ScenarioExecutionApi* | [**GetActiveNodeServiceMaps**](docs/ScenarioExecutionApi.md#getactivenodeservicemaps) | **Get** /active/serviceMaps | Get deployed scenario's port mapping
-*ScenarioExecutionApi* | [**GetActiveScenario**](docs/ScenarioExecutionApi.md#getactivescenario) | **Get** /active | Get the deployed scenario
-*ScenarioExecutionApi* | [**SendEvent**](docs/ScenarioExecutionApi.md#sendevent) | **Post** /events/{type} | Send events to the deployed scenario
-*ScenarioExecutionApi* | [**TerminateScenario**](docs/ScenarioExecutionApi.md#terminatescenario) | **Delete** /active | Terminate the deployed scenario
+*EventsApi* | [**SendEvent**](docs/EventsApi.md#sendevent) | **Post** /events/{type} | Send events to the deployed scenario
## Documentation For Models
- [ActivationInfo](docs/ActivationInfo.md)
+ - [CellularDomainConfig](docs/CellularDomainConfig.md)
+ - [CellularPoaConfig](docs/CellularPoaConfig.md)
- [Deployment](docs/Deployment.md)
- [Domain](docs/Domain.md)
- [EgressService](docs/EgressService.md)
- [Event](docs/Event.md)
- [EventMobility](docs/EventMobility.md)
- [EventNetworkCharacteristicsUpdate](docs/EventNetworkCharacteristicsUpdate.md)
- - [EventOther](docs/EventOther.md)
- [EventPoasInRange](docs/EventPoasInRange.md)
+ - [EventScenarioUpdate](docs/EventScenarioUpdate.md)
- [ExternalConfig](docs/ExternalConfig.md)
+ - [GeoData](docs/GeoData.md)
- [GpuConfig](docs/GpuConfig.md)
- [IngressService](docs/IngressService.md)
+ - [LineString](docs/LineString.md)
- [NetworkCharacteristics](docs/NetworkCharacteristics.md)
- [NetworkLocation](docs/NetworkLocation.md)
+ - [NodeDataUnion](docs/NodeDataUnion.md)
- [NodeServiceMaps](docs/NodeServiceMaps.md)
- [PhysicalLocation](docs/PhysicalLocation.md)
- - [PodStatus](docs/PodStatus.md)
- - [PodsStatus](docs/PodsStatus.md)
+ - [Point](docs/Point.md)
- [Process](docs/Process.md)
- [Replay](docs/Replay.md)
- [ReplayEvent](docs/ReplayEvent.md)
@@ -73,7 +70,7 @@ Class | Method | HTTP request | Description
- [ReplayStatus](docs/ReplayStatus.md)
- [Scenario](docs/Scenario.md)
- [ScenarioConfig](docs/ScenarioConfig.md)
- - [ScenarioList](docs/ScenarioList.md)
+ - [ScenarioNode](docs/ScenarioNode.md)
- [ServiceConfig](docs/ServiceConfig.md)
- [ServicePort](docs/ServicePort.md)
- [Zone](docs/Zone.md)
diff --git a/go-packages/meep-ctrl-engine-client/api/swagger.yaml b/go-packages/meep-sandbox-ctrl-client/api/swagger.yaml
similarity index 69%
rename from go-packages/meep-ctrl-engine-client/api/swagger.yaml
rename to go-packages/meep-sandbox-ctrl-client/api/swagger.yaml
index 063b66ef347a05e0bbb17e3350c489b9e91a14ac..ad04c9a80247a72adc8db770403b84ab566de033 100644
--- a/go-packages/meep-ctrl-engine-client/api/swagger.yaml
+++ b/go-packages/meep-sandbox-ctrl-client/api/swagger.yaml
@@ -1,172 +1,33 @@
---
swagger: "2.0"
info:
- description: "This API is the main platform API and mainly used by the AdvantEDGE\
- \ frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)\
- \
Platform main interface used by controller software that\
- \ want to interact with the AdvantEDGE platform
API details\
- \ available at _your-AdvantEDGE-ip-address:30000/api_
`30000` "
+ description: "This API is the main Sandbox Controller API for scenario deployment\
+ \ & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)\
+ \
Platform runtime interface to manage active scenarios\
+ \ and inject events in AdvantEDGE platform
API details available\
+ \ at _your-AdvantEDGE-ip-address/api_"
version: "1.0.0"
- title: "AdvantEDGE Platform Controller REST API"
+ title: "AdvantEDGE Sandbox Controller REST API"
contact:
name: "InterDigital AdvantEDGE Support"
email: "AdvantEDGE@InterDigital.com"
license:
name: "Apache 2.0"
url: "https://github.com/InterDigitalInc/AdvantEDGE/blob/master/LICENSE"
-basePath: "/v1"
+basePath: "/sandbox-ctrl/v1"
tags:
-- name: "Scenario Configuration"
-- name: "Scenario Execution"
+- name: "Active Scenario"
+- name: "Events"
- name: "Event Replay"
-- name: "Pod States"
-schemes:
-- "http"
consumes:
- "application/json"
produces:
- "application/json"
paths:
- /scenarios:
- get:
- tags:
- - "Scenario Configuration"
- summary: "Get all scenarios"
- description: "Returns all scenarios from the platform scenario store"
- operationId: "getScenarioList"
- produces:
- - "application/json"
- parameters: []
- responses:
- 200:
- description: "OK"
- schema:
- $ref: "#/definitions/ScenarioList"
- 404:
- description: "Not found"
- delete:
- tags:
- - "Scenario Configuration"
- summary: "Delete all scenarios"
- description: "Delete all scenarios present in the platform scenario store"
- operationId: "deleteScenarioList"
- produces:
- - "application/json"
- parameters: []
- responses:
- 200:
- description: "OK"
- 404:
- description: "Not found"
- /scenarios/{name}:
- get:
- tags:
- - "Scenario Configuration"
- summary: "Get a specific scenario"
- description: "Get a scenario by name from the platform scenario store"
- operationId: "getScenario"
- produces:
- - "application/json"
- parameters:
- - name: "name"
- in: "path"
- description: "Scenario name"
- required: true
- type: "string"
- x-exportParamName: "Name"
- responses:
- 200:
- description: "OK"
- schema:
- $ref: "#/definitions/Scenario"
- 400:
- description: "Bad request"
- 404:
- description: "Not found"
- post:
- tags:
- - "Scenario Configuration"
- summary: "Add a scenario"
- description: "Add a scenario to the platform scenario store"
- operationId: "createScenario"
- produces:
- - "application/json"
- parameters:
- - name: "name"
- in: "path"
- description: "Scenario name"
- required: true
- type: "string"
- x-exportParamName: "Name"
- - in: "body"
- name: "scenario"
- description: "Scenario"
- required: true
- schema:
- $ref: "#/definitions/Scenario"
- x-exportParamName: "Scenario"
- responses:
- 200:
- description: "OK"
- 400:
- description: "Bad request"
- 404:
- description: "Not found"
- put:
- tags:
- - "Scenario Configuration"
- summary: "Update a scenario"
- description: "Update a scenario by name in the platform scenario store"
- operationId: "setScenario"
- produces:
- - "application/json"
- parameters:
- - name: "name"
- in: "path"
- description: "Scenario name"
- required: true
- type: "string"
- x-exportParamName: "Name"
- - in: "body"
- name: "scenario"
- description: "Scenario to add to MEEP store"
- required: true
- schema:
- $ref: "#/definitions/Scenario"
- x-exportParamName: "Scenario"
- responses:
- 200:
- description: "OK"
- 400:
- description: "Bad request"
- 404:
- description: "Not found"
- delete:
- tags:
- - "Scenario Configuration"
- summary: "Delete a scenario"
- description: "Delete a scenario by name from the platform scenario store"
- operationId: "deleteScenario"
- produces:
- - "application/json"
- parameters:
- - name: "name"
- in: "path"
- description: "Scenario name"
- required: true
- type: "string"
- x-exportParamName: "Name"
- responses:
- 200:
- description: "OK"
- 400:
- description: "Bad request"
- 404:
- description: "Not found"
/active:
get:
tags:
- - "Scenario Execution"
+ - "Active Scenario"
summary: "Get the deployed scenario"
description: "Get the scenario currently deployed on the platform"
operationId: "getActiveScenario"
@@ -180,7 +41,7 @@ paths:
$ref: "#/definitions/Scenario"
delete:
tags:
- - "Scenario Execution"
+ - "Active Scenario"
summary: "Terminate the deployed scenario"
description: "Terminate the scenario currently deployed on the platform"
operationId: "terminateScenario"
@@ -195,7 +56,7 @@ paths:
/active/{name}:
post:
tags:
- - "Scenario Execution"
+ - "Active Scenario"
summary: "Deploy a scenario"
description: "Deploy a scenario present in the platform scenario store"
operationId: "activateScenario"
@@ -225,7 +86,7 @@ paths:
/active/serviceMaps:
get:
tags:
- - "Scenario Execution"
+ - "Active Scenario"
summary: "Get deployed scenario's port mapping"
description: "Returns the deployed scenario's port mapping
Specifies a scenario update action\
+ \ to perform on the provided node.\n
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -40,10 +40,10 @@ var (
_ context.Context
)
-type ScenarioExecutionApiService service
+type ActiveScenarioApiService service
/*
-ScenarioExecutionApiService Deploy a scenario
+ActiveScenarioApiService Deploy a scenario
Deploy a scenario present in the platform scenario store
* @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
* @param name Scenario name
@@ -57,7 +57,7 @@ type ActivateScenarioOpts struct {
ActivationInfo optional.Interface
}
-func (a *ScenarioExecutionApiService) ActivateScenario(ctx context.Context, name string, localVarOptionals *ActivateScenarioOpts) (*http.Response, error) {
+func (a *ActiveScenarioApiService) ActivateScenario(ctx context.Context, name string, localVarOptionals *ActivateScenarioOpts) (*http.Response, error) {
var (
localVarHttpMethod = strings.ToUpper("Post")
localVarPostBody interface{}
@@ -128,7 +128,7 @@ func (a *ScenarioExecutionApiService) ActivateScenario(ctx context.Context, name
}
/*
-ScenarioExecutionApiService Get deployed scenario's port mapping
+ActiveScenarioApiService Get deployed scenario's port mapping
Returns the deployed scenario's port mapping<p> <li>Ports are used by external nodes to access services internal to the platform <li>Port mapping concept for external nodes is available [here](https://github.com/InterDigitalInc/AdvantEDGE/wiki/external-ue#port-mapping)
* @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
* @param optional nil or *GetActiveNodeServiceMapsOpts - Optional Parameters:
@@ -145,7 +145,7 @@ type GetActiveNodeServiceMapsOpts struct {
Service optional.String
}
-func (a *ScenarioExecutionApiService) GetActiveNodeServiceMaps(ctx context.Context, localVarOptionals *GetActiveNodeServiceMapsOpts) ([]NodeServiceMaps, *http.Response, error) {
+func (a *ActiveScenarioApiService) GetActiveNodeServiceMaps(ctx context.Context, localVarOptionals *GetActiveNodeServiceMapsOpts) ([]NodeServiceMaps, *http.Response, error) {
var (
localVarHttpMethod = strings.ToUpper("Get")
localVarPostBody interface{}
@@ -235,13 +235,13 @@ func (a *ScenarioExecutionApiService) GetActiveNodeServiceMaps(ctx context.Conte
}
/*
-ScenarioExecutionApiService Get the deployed scenario
+ActiveScenarioApiService Get the deployed scenario
Get the scenario currently deployed on the platform
* @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
@return Scenario
*/
-func (a *ScenarioExecutionApiService) GetActiveScenario(ctx context.Context) (Scenario, *http.Response, error) {
+func (a *ActiveScenarioApiService) GetActiveScenario(ctx context.Context) (Scenario, *http.Response, error) {
var (
localVarHttpMethod = strings.ToUpper("Get")
localVarPostBody interface{}
@@ -322,85 +322,13 @@ func (a *ScenarioExecutionApiService) GetActiveScenario(ctx context.Context) (Sc
}
/*
-ScenarioExecutionApiService Send events to the deployed scenario
-Generate events towards the deployed scenario. <p><p>Events: <li>Mobility: move a node in the emulated network <li>Network Characteristic: change network characteristics dynamically <li>PoAs-In-Range: provide PoAs in range of a UE (used with Application State Transfer)
- * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
- * @param type_ Event type
- * @param event Event to send to active scenario
-
-
-*/
-func (a *ScenarioExecutionApiService) SendEvent(ctx context.Context, type_ string, event Event) (*http.Response, error) {
- var (
- localVarHttpMethod = strings.ToUpper("Post")
- localVarPostBody interface{}
- localVarFileName string
- localVarFileBytes []byte
- )
-
- // create path and map variables
- localVarPath := a.client.cfg.BasePath + "/events/{type}"
- localVarPath = strings.Replace(localVarPath, "{"+"type"+"}", fmt.Sprintf("%v", type_), -1)
-
- localVarHeaderParams := make(map[string]string)
- localVarQueryParams := url.Values{}
- localVarFormParams := url.Values{}
-
- // to determine the Content-Type header
- localVarHttpContentTypes := []string{"application/json"}
-
- // set Content-Type header
- localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
- if localVarHttpContentType != "" {
- localVarHeaderParams["Content-Type"] = localVarHttpContentType
- }
-
- // to determine the Accept header
- localVarHttpHeaderAccepts := []string{"application/json"}
-
- // set Accept header
- localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
- if localVarHttpHeaderAccept != "" {
- localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
- }
- // body params
- localVarPostBody = &event
- r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
- if err != nil {
- return nil, err
- }
-
- localVarHttpResponse, err := a.client.callAPI(r)
- if err != nil || localVarHttpResponse == nil {
- return localVarHttpResponse, err
- }
-
- localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
- localVarHttpResponse.Body.Close()
- if err != nil {
- return localVarHttpResponse, err
- }
-
- if localVarHttpResponse.StatusCode >= 300 {
- newErr := GenericSwaggerError{
- body: localVarBody,
- error: localVarHttpResponse.Status,
- }
-
- return localVarHttpResponse, newErr
- }
-
- return localVarHttpResponse, nil
-}
-
-/*
-ScenarioExecutionApiService Terminate the deployed scenario
+ActiveScenarioApiService Terminate the deployed scenario
Terminate the scenario currently deployed on the platform
* @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
*/
-func (a *ScenarioExecutionApiService) TerminateScenario(ctx context.Context) (*http.Response, error) {
+func (a *ActiveScenarioApiService) TerminateScenario(ctx context.Context) (*http.Response, error) {
var (
localVarHttpMethod = strings.ToUpper("Delete")
localVarPostBody interface{}
diff --git a/go-packages/meep-ctrl-engine-client/api_event_replay.go b/go-packages/meep-sandbox-ctrl-client/api_event_replay.go
similarity index 97%
rename from go-packages/meep-ctrl-engine-client/api_event_replay.go
rename to go-packages/meep-sandbox-ctrl-client/api_event_replay.go
index 0ef409faeab1ba8873fe8dab69d4e5f92d5126ce..3ea81cfa3bf1e1e948da5e8660bfca495094287d 100644
--- a/go-packages/meep-ctrl-engine-client/api_event_replay.go
+++ b/go-packages/meep-sandbox-ctrl-client/api_event_replay.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -113,7 +113,7 @@ func (a *EventReplayApiService) CreateReplayFile(ctx context.Context, name strin
}
/*
-EventReplayApiService Generate a replay file from scenario execution events
+EventReplayApiService Generate a replay file from Active Scenario events
Generate a replay file using events from the latest execution of a scenario
* @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
* @param name Replay file name
diff --git a/go-packages/meep-sandbox-ctrl-client/api_events.go b/go-packages/meep-sandbox-ctrl-client/api_events.go
new file mode 100644
index 0000000000000000000000000000000000000000..1dffa9e67313583fb572ef364ba941f5f040be48
--- /dev/null
+++ b/go-packages/meep-sandbox-ctrl-client/api_events.go
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Sandbox Controller REST API
+ *
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+import (
+ "context"
+ "fmt"
+ "io/ioutil"
+ "net/http"
+ "net/url"
+ "strings"
+)
+
+// Linger please
+var (
+ _ context.Context
+)
+
+type EventsApiService service
+
+/*
+EventsApiService Send events to the deployed scenario
+Generate events towards the deployed scenario. Events: <li>MOBILITY: move a node in the emulated network <li>NETWORK-CHARACTERISTICS-UPDATE: change network characteristics dynamically <li>POAS-IN-RANGE: provide PoAs in range of a UE (used with ApplicationState Transfer) <li>SCENARIO-UPDATE: Add/Remove/Modify node in active scenario
+ * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+ * @param type_ Event type
+ * @param event Event to send to active scenario
+
+
+*/
+func (a *EventsApiService) SendEvent(ctx context.Context, type_ string, event Event) (*http.Response, error) {
+ var (
+ localVarHttpMethod = strings.ToUpper("Post")
+ localVarPostBody interface{}
+ localVarFileName string
+ localVarFileBytes []byte
+ )
+
+ // create path and map variables
+ localVarPath := a.client.cfg.BasePath + "/events/{type}"
+ localVarPath = strings.Replace(localVarPath, "{"+"type"+"}", fmt.Sprintf("%v", type_), -1)
+
+ localVarHeaderParams := make(map[string]string)
+ localVarQueryParams := url.Values{}
+ localVarFormParams := url.Values{}
+
+ // to determine the Content-Type header
+ localVarHttpContentTypes := []string{"application/json"}
+
+ // set Content-Type header
+ localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
+ if localVarHttpContentType != "" {
+ localVarHeaderParams["Content-Type"] = localVarHttpContentType
+ }
+
+ // to determine the Accept header
+ localVarHttpHeaderAccepts := []string{"application/json"}
+
+ // set Accept header
+ localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
+ if localVarHttpHeaderAccept != "" {
+ localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
+ }
+ // body params
+ localVarPostBody = &event
+ r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
+ if err != nil {
+ return nil, err
+ }
+
+ localVarHttpResponse, err := a.client.callAPI(r)
+ if err != nil || localVarHttpResponse == nil {
+ return localVarHttpResponse, err
+ }
+
+ localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
+ localVarHttpResponse.Body.Close()
+ if err != nil {
+ return localVarHttpResponse, err
+ }
+
+ if localVarHttpResponse.StatusCode >= 300 {
+ newErr := GenericSwaggerError{
+ body: localVarBody,
+ error: localVarHttpResponse.Status,
+ }
+
+ return localVarHttpResponse, newErr
+ }
+
+ return localVarHttpResponse, nil
+}
diff --git a/go-packages/meep-ctrl-engine-client/client.go b/go-packages/meep-sandbox-ctrl-client/client.go
similarity index 92%
rename from go-packages/meep-ctrl-engine-client/client.go
rename to go-packages/meep-sandbox-ctrl-client/client.go
index 27deef49a6f52d2a33b12633891f3cbbb25f1570..1da8e42106f53bc599664be3b10af8b083d362dc 100644
--- a/go-packages/meep-ctrl-engine-client/client.go
+++ b/go-packages/meep-sandbox-ctrl-client/client.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -52,7 +52,7 @@ var (
xmlCheck = regexp.MustCompile("(?i:[application|text]/xml)")
)
-// APIClient manages communication with the AdvantEDGE Platform Controller REST API API v1.0.0
+// APIClient manages communication with the AdvantEDGE Sandbox Controller REST API API v1.0.0
// In most cases there should be only one, shared, APIClient.
type APIClient struct {
cfg *Configuration
@@ -60,13 +60,11 @@ type APIClient struct {
// API Services
- EventReplayApi *EventReplayApiService
-
- PodStatesApi *PodStatesApiService
+ ActiveScenarioApi *ActiveScenarioApiService
- ScenarioConfigurationApi *ScenarioConfigurationApiService
+ EventReplayApi *EventReplayApiService
- ScenarioExecutionApi *ScenarioExecutionApiService
+ EventsApi *EventsApiService
}
type service struct {
@@ -85,10 +83,9 @@ func NewAPIClient(cfg *Configuration) *APIClient {
c.common.client = c
// API Services
+ c.ActiveScenarioApi = (*ActiveScenarioApiService)(&c.common)
c.EventReplayApi = (*EventReplayApiService)(&c.common)
- c.PodStatesApi = (*PodStatesApiService)(&c.common)
- c.ScenarioConfigurationApi = (*ScenarioConfigurationApiService)(&c.common)
- c.ScenarioExecutionApi = (*ScenarioExecutionApiService)(&c.common)
+ c.EventsApi = (*EventsApiService)(&c.common)
return c
}
diff --git a/go-packages/meep-sandbox-ctrl-client/configuration.go b/go-packages/meep-sandbox-ctrl-client/configuration.go
new file mode 100644
index 0000000000000000000000000000000000000000..19df47eabe20c067be253035d35f6e46678b641c
--- /dev/null
+++ b/go-packages/meep-sandbox-ctrl-client/configuration.go
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Sandbox Controller REST API
+ *
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+import (
+ "net/http"
+)
+
+// contextKeys are used to identify the type of value in the context.
+// Since these are string, it is possible to get a short description of the
+// context key for logging and debugging using key.String().
+
+type contextKey string
+
+func (c contextKey) String() string {
+ return "auth " + string(c)
+}
+
+var (
+ // ContextOAuth2 takes a oauth2.TokenSource as authentication for the request.
+ ContextOAuth2 = contextKey("token")
+
+ // ContextBasicAuth takes BasicAuth as authentication for the request.
+ ContextBasicAuth = contextKey("basic")
+
+ // ContextAccessToken takes a string oauth2 access token as authentication for the request.
+ ContextAccessToken = contextKey("accesstoken")
+
+ // ContextAPIKey takes an APIKey as authentication for the request
+ ContextAPIKey = contextKey("apikey")
+)
+
+// BasicAuth provides basic http authentication to a request passed via context using ContextBasicAuth
+type BasicAuth struct {
+ UserName string `json:"userName,omitempty"`
+ Password string `json:"password,omitempty"`
+}
+
+// APIKey provides API key based authentication to a request passed via context using ContextAPIKey
+type APIKey struct {
+ Key string
+ Prefix string
+}
+
+type Configuration struct {
+ BasePath string `json:"basePath,omitempty"`
+ Host string `json:"host,omitempty"`
+ Scheme string `json:"scheme,omitempty"`
+ DefaultHeader map[string]string `json:"defaultHeader,omitempty"`
+ UserAgent string `json:"userAgent,omitempty"`
+ HTTPClient *http.Client
+}
+
+func NewConfiguration() *Configuration {
+ cfg := &Configuration{
+ BasePath: "https://localhost/sandbox-ctrl/v1",
+ DefaultHeader: make(map[string]string),
+ UserAgent: "Swagger-Codegen/1.0.0/go",
+ }
+ return cfg
+}
+
+func (c *Configuration) AddDefaultHeader(key string, value string) {
+ c.DefaultHeader[key] = value
+}
diff --git a/go-packages/meep-ctrl-engine-model/docs/ActivationInfo.md b/go-packages/meep-sandbox-ctrl-client/docs/ActivationInfo.md
similarity index 100%
rename from go-packages/meep-ctrl-engine-model/docs/ActivationInfo.md
rename to go-packages/meep-sandbox-ctrl-client/docs/ActivationInfo.md
diff --git a/go-packages/meep-ctrl-engine-client/docs/ScenarioExecutionApi.md b/go-packages/meep-sandbox-ctrl-client/docs/ActiveScenarioApi.md
similarity index 69%
rename from go-packages/meep-ctrl-engine-client/docs/ScenarioExecutionApi.md
rename to go-packages/meep-sandbox-ctrl-client/docs/ActiveScenarioApi.md
index 5da7732288fbc19f8185a4c1228a5c1bcd3937da..5200d1a0f2a777bd9d18f94d9a49ffbb075d0912 100644
--- a/go-packages/meep-ctrl-engine-client/docs/ScenarioExecutionApi.md
+++ b/go-packages/meep-sandbox-ctrl-client/docs/ActiveScenarioApi.md
@@ -1,14 +1,13 @@
-# \ScenarioExecutionApi
+# \ActiveScenarioApi
-All URIs are relative to *http://localhost/v1*
+All URIs are relative to *https://localhost/sandbox-ctrl/v1*
Method | HTTP request | Description
------------- | ------------- | -------------
-[**ActivateScenario**](ScenarioExecutionApi.md#ActivateScenario) | **Post** /active/{name} | Deploy a scenario
-[**GetActiveNodeServiceMaps**](ScenarioExecutionApi.md#GetActiveNodeServiceMaps) | **Get** /active/serviceMaps | Get deployed scenario's port mapping
-[**GetActiveScenario**](ScenarioExecutionApi.md#GetActiveScenario) | **Get** /active | Get the deployed scenario
-[**SendEvent**](ScenarioExecutionApi.md#SendEvent) | **Post** /events/{type} | Send events to the deployed scenario
-[**TerminateScenario**](ScenarioExecutionApi.md#TerminateScenario) | **Delete** /active | Terminate the deployed scenario
+[**ActivateScenario**](ActiveScenarioApi.md#ActivateScenario) | **Post** /active/{name} | Deploy a scenario
+[**GetActiveNodeServiceMaps**](ActiveScenarioApi.md#GetActiveNodeServiceMaps) | **Get** /active/serviceMaps | Get deployed scenario's port mapping
+[**GetActiveScenario**](ActiveScenarioApi.md#GetActiveScenario) | **Get** /active | Get the deployed scenario
+[**TerminateScenario**](ActiveScenarioApi.md#TerminateScenario) | **Delete** /active | Terminate the deployed scenario
# **ActivateScenario**
@@ -109,35 +108,6 @@ No authorization required
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
-# **SendEvent**
-> SendEvent(ctx, type_, event)
-Send events to the deployed scenario
-
-Generate events towards the deployed scenario.
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-sandbox-ctrl-client/model_cellular_domain_config.go b/go-packages/meep-sandbox-ctrl-client/model_cellular_domain_config.go
new file mode 100644
index 0000000000000000000000000000000000000000..4ae791535440d8a0c288478b39e3342472ec986e
--- /dev/null
+++ b/go-packages/meep-sandbox-ctrl-client/model_cellular_domain_config.go
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Sandbox Controller REST API
+ *
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// Cellular domain configuration information
+type CellularDomainConfig struct {
+ // Mobile Network Code part of PLMN identity as defined in ETSI TS 136 413
+ Mnc string `json:"mnc,omitempty"`
+ // Mobile Country Code part of PLMN identity as defined in ETSI TS 136 413
+ Mcc string `json:"mcc,omitempty"`
+ // The E-UTRAN Cell Identity as defined in ETSI TS 136 413 if no cellId is defined for the cell or if not applicable
+ DefaultCellId string `json:"defaultCellId,omitempty"`
+}
diff --git a/go-packages/meep-sandbox-ctrl-client/model_cellular_poa_config.go b/go-packages/meep-sandbox-ctrl-client/model_cellular_poa_config.go
new file mode 100644
index 0000000000000000000000000000000000000000..edb8706f9a8fe6bd1d6ba8fc4b7efcc5e29ceb2e
--- /dev/null
+++ b/go-packages/meep-sandbox-ctrl-client/model_cellular_poa_config.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Sandbox Controller REST API
+ *
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// Cellular POA configuration information
+type CellularPoaConfig struct {
+ // The E-UTRAN Cell Identity as defined in ETSI TS 136 413 including the ID of the eNB serving the cell
+ CellId string `json:"cellId,omitempty"`
+}
diff --git a/go-packages/meep-ctrl-engine-client/model_deployment.go b/go-packages/meep-sandbox-ctrl-client/model_deployment.go
similarity index 60%
rename from go-packages/meep-ctrl-engine-client/model_deployment.go
rename to go-packages/meep-sandbox-ctrl-client/model_deployment.go
index 9ef94f784591f4f1e482a7cbd0b6dc29e391fd69..ef329c9091e3ee4b2c0358c5cf912b1a6db8e5e2 100644
--- a/go-packages/meep-ctrl-engine-client/model_deployment.go
+++ b/go-packages/meep-sandbox-ctrl-client/model_deployment.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -26,13 +26,14 @@ package client
// Network deployment object
type Deployment struct {
- // Latency in ms between domains
+ NetChar *NetworkCharacteristics `json:"netChar,omitempty"`
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar latency
InterDomainLatency int32 `json:"interDomainLatency,omitempty"`
- // Latency variation in ms between domains
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar latencyVariation
InterDomainLatencyVariation int32 `json:"interDomainLatencyVariation,omitempty"`
- // The limit of the traffic supported between domains
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar throughputUl and throughputDl
InterDomainThroughput int32 `json:"interDomainThroughput,omitempty"`
- // Packet lost (in terms of percentage) between domains
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar packetLoss
InterDomainPacketLoss float64 `json:"interDomainPacketLoss,omitempty"`
// Key/Value Pair Map (string, string)
Meta map[string]string `json:"meta,omitempty"`
diff --git a/go-packages/meep-ctrl-engine-client/model_domain.go b/go-packages/meep-sandbox-ctrl-client/model_domain.go
similarity index 53%
rename from go-packages/meep-ctrl-engine-client/model_domain.go
rename to go-packages/meep-sandbox-ctrl-client/model_domain.go
index 7c43bb61da22439d95ae64a3ff04d3e1e52061ff..31633f6578dbb18f515e03aa757797eedc284683 100644
--- a/go-packages/meep-ctrl-engine-client/model_domain.go
+++ b/go-packages/meep-sandbox-ctrl-client/model_domain.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -31,18 +31,20 @@ type Domain struct {
// Domain name
Name string `json:"name,omitempty"`
// Domain type
- Type_ string `json:"type,omitempty"`
- // Latency in ms between zones within domain
+ Type_ string `json:"type,omitempty"`
+ NetChar *NetworkCharacteristics `json:"netChar,omitempty"`
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar latency
InterZoneLatency int32 `json:"interZoneLatency,omitempty"`
- // Latency variation in ms between zones within domain
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar latencyVariation
InterZoneLatencyVariation int32 `json:"interZoneLatencyVariation,omitempty"`
- // The limit of the traffic supported between zones within the domain
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar throughputUl and throughputDl
InterZoneThroughput int32 `json:"interZoneThroughput,omitempty"`
- // Packet lost (in terms of percentage) between zones within the domain
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar packetLoss
InterZonePacketLoss float64 `json:"interZonePacketLoss,omitempty"`
// Key/Value Pair Map (string, string)
Meta map[string]string `json:"meta,omitempty"`
// Key/Value Pair Map (string, string)
- UserMeta map[string]string `json:"userMeta,omitempty"`
- Zones []Zone `json:"zones,omitempty"`
+ UserMeta map[string]string `json:"userMeta,omitempty"`
+ CellularDomainConfig *CellularDomainConfig `json:"cellularDomainConfig,omitempty"`
+ Zones []Zone `json:"zones,omitempty"`
}
diff --git a/go-packages/meep-ctrl-engine-client/model_egress_service.go b/go-packages/meep-sandbox-ctrl-client/model_egress_service.go
similarity index 67%
rename from go-packages/meep-ctrl-engine-client/model_egress_service.go
rename to go-packages/meep-sandbox-ctrl-client/model_egress_service.go
index 6615f844ba6e20dcf157f6db706d26c7e9aedcfd..77b54cce1b3e5c640550aaafaff1300d87066f1b 100644
--- a/go-packages/meep-ctrl-engine-client/model_egress_service.go
+++ b/go-packages/meep-sandbox-ctrl-client/model_egress_service.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-ctrl-engine-client/model_event.go b/go-packages/meep-sandbox-ctrl-client/model_event.go
similarity index 65%
rename from go-packages/meep-ctrl-engine-client/model_event.go
rename to go-packages/meep-sandbox-ctrl-client/model_event.go
index ef2dfed4d8e4d57589f8c6af82598d786d4b4c85..f64d2b651b4a48ef89c22a394bf7d6ee4f2c389f 100644
--- a/go-packages/meep-ctrl-engine-client/model_event.go
+++ b/go-packages/meep-sandbox-ctrl-client/model_event.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -30,8 +30,8 @@ type Event struct {
Name string `json:"name,omitempty"`
// Event type
Type_ string `json:"type,omitempty"`
- EventNetworkCharacteristicsUpdate *EventNetworkCharacteristicsUpdate `json:"eventNetworkCharacteristicsUpdate,omitempty"`
EventMobility *EventMobility `json:"eventMobility,omitempty"`
+ EventNetworkCharacteristicsUpdate *EventNetworkCharacteristicsUpdate `json:"eventNetworkCharacteristicsUpdate,omitempty"`
EventPoasInRange *EventPoasInRange `json:"eventPoasInRange,omitempty"`
- EventOther *EventOther `json:"eventOther,omitempty"`
+ EventScenarioUpdate *EventScenarioUpdate `json:"eventScenarioUpdate,omitempty"`
}
diff --git a/go-packages/meep-ctrl-engine-client/model_event_mobility.go b/go-packages/meep-sandbox-ctrl-client/model_event_mobility.go
similarity index 62%
rename from go-packages/meep-ctrl-engine-client/model_event_mobility.go
rename to go-packages/meep-sandbox-ctrl-client/model_event_mobility.go
index 706c1c1a37e2c8920bd33a567f44f30044631fb8..26e533df02e3b6b5022ad804cb9298c34d5094c6 100644
--- a/go-packages/meep-ctrl-engine-client/model_event_mobility.go
+++ b/go-packages/meep-sandbox-ctrl-client/model_event_mobility.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-ctrl-engine-client/model_event_network_characteristics_update.go b/go-packages/meep-sandbox-ctrl-client/model_event_network_characteristics_update.go
similarity index 51%
rename from go-packages/meep-ctrl-engine-client/model_event_network_characteristics_update.go
rename to go-packages/meep-sandbox-ctrl-client/model_event_network_characteristics_update.go
index 5588ba8315704f4ba7604f0fb2fe2aab41e3c3eb..ffabbb92b41363117e16807942c68ff92cd821b5 100644
--- a/go-packages/meep-ctrl-engine-client/model_event_network_characteristics_update.go
+++ b/go-packages/meep-sandbox-ctrl-client/model_event_network_characteristics_update.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -29,13 +29,6 @@ type EventNetworkCharacteristicsUpdate struct {
// Name of the network element to be updated
ElementName string `json:"elementName,omitempty"`
// Type of the network element to be updated
- ElementType string `json:"elementType,omitempty"`
- // Latency in ms
- Latency int32 `json:"latency,omitempty"`
- // Latency variation in ms
- LatencyVariation int32 `json:"latencyVariation,omitempty"`
- // Throughput limit
- Throughput int32 `json:"throughput,omitempty"`
- // Packet loss percentage
- PacketLoss float64 `json:"packetLoss,omitempty"`
+ ElementType string `json:"elementType,omitempty"`
+ NetChar *NetworkCharacteristics `json:"netChar,omitempty"`
}
diff --git a/go-packages/meep-ctrl-engine-client/model_event_poas_in_range.go b/go-packages/meep-sandbox-ctrl-client/model_event_poas_in_range.go
similarity index 61%
rename from go-packages/meep-ctrl-engine-client/model_event_poas_in_range.go
rename to go-packages/meep-sandbox-ctrl-client/model_event_poas_in_range.go
index 180b912aaf02e5e594ce92ac411d9f99a24e7e8b..caba2f309bcf90d484530146c77b68e33f17de78 100644
--- a/go-packages/meep-ctrl-engine-client/model_event_poas_in_range.go
+++ b/go-packages/meep-sandbox-ctrl-client/model_event_poas_in_range.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-sandbox-ctrl-client/model_event_scenario_update.go b/go-packages/meep-sandbox-ctrl-client/model_event_scenario_update.go
new file mode 100644
index 0000000000000000000000000000000000000000..029715e4f400e1008500e597dbacd8f1d2928760
--- /dev/null
+++ b/go-packages/meep-sandbox-ctrl-client/model_event_scenario_update.go
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Sandbox Controller REST API
+ *
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// Scenario Update Event object.
Specifies a scenario update action to perform on the provided node.
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-sandbox-ctrl-client/model_geo_data.go b/go-packages/meep-sandbox-ctrl-client/model_geo_data.go
new file mode 100644
index 0000000000000000000000000000000000000000..b4e2479b761eda5c74d207aafab1efe664477373
--- /dev/null
+++ b/go-packages/meep-sandbox-ctrl-client/model_geo_data.go
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Sandbox Controller REST API
+ *
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// Geographic data
+type GeoData struct {
+ Location *Point `json:"location,omitempty"`
+ // Optional - Radius (in meters) around the location
+ Radius float32 `json:"radius,omitempty"`
+ Path *LineString `json:"path,omitempty"`
+ // End-of-Path mode:
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-ctrl-engine-client/model_ingress_service.go b/go-packages/meep-sandbox-ctrl-client/model_ingress_service.go
similarity index 67%
rename from go-packages/meep-ctrl-engine-client/model_ingress_service.go
rename to go-packages/meep-sandbox-ctrl-client/model_ingress_service.go
index fd00fecee0123e993f9e09c34240dc7c45f6a37f..c8e3d35b4074b3006bbca95cf838909c6dcc5892 100644
--- a/go-packages/meep-ctrl-engine-client/model_ingress_service.go
+++ b/go-packages/meep-sandbox-ctrl-client/model_ingress_service.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-sandbox-ctrl-client/model_line_string.go b/go-packages/meep-sandbox-ctrl-client/model_line_string.go
new file mode 100644
index 0000000000000000000000000000000000000000..5bc1392ffe883ff4f642c69214214d0c7b670a19
--- /dev/null
+++ b/go-packages/meep-sandbox-ctrl-client/model_line_string.go
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Sandbox Controller REST API
+ *
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// An array of two or more positions in coordinate space (GeoJSON); a position is an array of two numbers
+type LineString struct {
+ // Must be LineString
+ Type_ string `json:"type"`
+ // For a LineString, coordinates is an array of two or more positions; a position is an array of two decimal numbers (longitude and latitude precisely in that order)
+ Coordinates [][]float32 `json:"coordinates,omitempty"`
+}
diff --git a/go-packages/meep-sandbox-ctrl-client/model_network_characteristics.go b/go-packages/meep-sandbox-ctrl-client/model_network_characteristics.go
new file mode 100644
index 0000000000000000000000000000000000000000..1cef4dc21cef337d2d2951cd48aba703a77486d6
--- /dev/null
+++ b/go-packages/meep-sandbox-ctrl-client/model_network_characteristics.go
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Sandbox Controller REST API
+ *
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// Network characteristics object
+type NetworkCharacteristics struct {
+ // Latency in ms
+ Latency int32 `json:"latency,omitempty"`
+ // Latency variation in ms
+ LatencyVariation int32 `json:"latencyVariation,omitempty"`
+ // Latency distribution. Can only be set in the Scenario Deployment network characteristics, ignored otherwise. Latency distribution is set for the whole network and applied to every end-to-end traffic flows. Default value is 'Normal' distribution.
+ LatencyDistribution string `json:"latencyDistribution,omitempty"`
+ // **DEPRECATED** As of release 1.5.0, replaced by throughputUl and throughputDl
+ Throughput int32 `json:"throughput,omitempty"`
+ // Downlink throughput limit in Mbps
+ ThroughputDl int32 `json:"throughputDl,omitempty"`
+ // Uplink throughput limit in Mbps
+ ThroughputUl int32 `json:"throughputUl,omitempty"`
+ // Packet loss percentage
+ PacketLoss float64 `json:"packetLoss,omitempty"`
+}
diff --git a/go-packages/meep-ctrl-engine-client/model_network_location.go b/go-packages/meep-sandbox-ctrl-client/model_network_location.go
similarity index 58%
rename from go-packages/meep-ctrl-engine-client/model_network_location.go
rename to go-packages/meep-sandbox-ctrl-client/model_network_location.go
index d15fdf3e4c4fbccf7beb387b63e1984f10d2f58b..afa8f2ec04870b5c73edb1156d92b6d8f1c9b9a8 100644
--- a/go-packages/meep-ctrl-engine-client/model_network_location.go
+++ b/go-packages/meep-sandbox-ctrl-client/model_network_location.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -31,18 +31,21 @@ type NetworkLocation struct {
// Network location name
Name string `json:"name,omitempty"`
// Network location type
- Type_ string `json:"type,omitempty"`
- // Latency in ms for all terminal links within network location
+ Type_ string `json:"type,omitempty"`
+ NetChar *NetworkCharacteristics `json:"netChar,omitempty"`
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar latency
TerminalLinkLatency int32 `json:"terminalLinkLatency,omitempty"`
- // Latency variation in ms for all terminal links within network location
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar latencyVariation
TerminalLinkLatencyVariation int32 `json:"terminalLinkLatencyVariation,omitempty"`
- // The limit of the traffic supported for all terminal links within the network location
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar throughputUl and throughputDl
TerminalLinkThroughput int32 `json:"terminalLinkThroughput,omitempty"`
- // Packet lost (in terms of percentage) for all terminal links within the network location
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar packetLoss
TerminalLinkPacketLoss float64 `json:"terminalLinkPacketLoss,omitempty"`
// Key/Value Pair Map (string, string)
Meta map[string]string `json:"meta,omitempty"`
// Key/Value Pair Map (string, string)
UserMeta map[string]string `json:"userMeta,omitempty"`
+ CellularPoaConfig *CellularPoaConfig `json:"cellularPoaConfig,omitempty"`
+ GeoData *GeoData `json:"geoData,omitempty"`
PhysicalLocations []PhysicalLocation `json:"physicalLocations,omitempty"`
}
diff --git a/go-packages/meep-ctrl-engine-client/model_scenario_list.go b/go-packages/meep-sandbox-ctrl-client/model_node_data_union.go
similarity index 51%
rename from go-packages/meep-ctrl-engine-client/model_scenario_list.go
rename to go-packages/meep-sandbox-ctrl-client/model_node_data_union.go
index 75bf2c3b2c5cff0a0031bccd2528b1a4270434df..decdb52ae98ac847b6796e3c46d285e52e41c093 100644
--- a/go-packages/meep-ctrl-engine-client/model_scenario_list.go
+++ b/go-packages/meep-sandbox-ctrl-client/model_node_data_union.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -24,7 +24,7 @@
package client
-// Scenario list
-type ScenarioList struct {
- Scenarios []Scenario `json:"scenarios,omitempty"`
+// Union of node data objects NOTE: Only one of the following objects must be filled
+type NodeDataUnion struct {
+ PhysicalLocation *PhysicalLocation `json:"physicalLocation,omitempty"`
}
diff --git a/go-packages/meep-ctrl-engine-client/model_node_service_maps.go b/go-packages/meep-sandbox-ctrl-client/model_node_service_maps.go
similarity index 65%
rename from go-packages/meep-ctrl-engine-client/model_node_service_maps.go
rename to go-packages/meep-sandbox-ctrl-client/model_node_service_maps.go
index f0d5293cd91dbb34e09adedb39ac8049f922edba..1326d4513302193416322bc4257b2ac16d63f456 100644
--- a/go-packages/meep-ctrl-engine-client/model_node_service_maps.go
+++ b/go-packages/meep-sandbox-ctrl-client/model_node_service_maps.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-ctrl-engine-client/model_physical_location.go b/go-packages/meep-sandbox-ctrl-client/model_physical_location.go
similarity index 58%
rename from go-packages/meep-ctrl-engine-client/model_physical_location.go
rename to go-packages/meep-sandbox-ctrl-client/model_physical_location.go
index 53cde6c092e0d7a509f24baccf8e3adcc4bfc827..e9137baf9d767bed184b2c42752731cf37e0e050 100644
--- a/go-packages/meep-ctrl-engine-client/model_physical_location.go
+++ b/go-packages/meep-sandbox-ctrl-client/model_physical_location.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -34,18 +34,20 @@ type PhysicalLocation struct {
Type_ string `json:"type,omitempty"`
// true: Physical location is external to MEEP false: Physical location is internal to MEEP
IsExternal bool `json:"isExternal,omitempty"`
+ GeoData *GeoData `json:"geoData,omitempty"`
NetworkLocationsInRange []string `json:"networkLocationsInRange,omitempty"`
// Key/Value Pair Map (string, string)
Meta map[string]string `json:"meta,omitempty"`
// Key/Value Pair Map (string, string)
- UserMeta map[string]string `json:"userMeta,omitempty"`
- Processes []Process `json:"processes,omitempty"`
- // Latency in ms between the physical location and the network (wired interface, air interface)
+ UserMeta map[string]string `json:"userMeta,omitempty"`
+ Processes []Process `json:"processes,omitempty"`
+ NetChar *NetworkCharacteristics `json:"netChar,omitempty"`
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar latency
LinkLatency int32 `json:"linkLatency,omitempty"`
- // Latency variation in ms between the physical location and the network (wired interface, air interface)
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar latencyVariation
LinkLatencyVariation int32 `json:"linkLatencyVariation,omitempty"`
- // The limit of the traffic supported between the physical location and the network (wired interface, air interface)
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar throughputUl and throughputDl
LinkThroughput int32 `json:"linkThroughput,omitempty"`
- // Packet lost (in terms of percentage) between the physical location and the network (wired interface, air interface)
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar packetLoss
LinkPacketLoss float64 `json:"linkPacketLoss,omitempty"`
}
diff --git a/go-packages/meep-sandbox-ctrl-client/model_point.go b/go-packages/meep-sandbox-ctrl-client/model_point.go
new file mode 100644
index 0000000000000000000000000000000000000000..c514fc0a457d0cebf8c484a6ebb8bac480169d43
--- /dev/null
+++ b/go-packages/meep-sandbox-ctrl-client/model_point.go
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Sandbox Controller REST API
+ *
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// A single position in coordinate space (GeoJSON); a position is an array of two numbers
+type Point struct {
+ // Must be Point
+ Type_ string `json:"type"`
+ // For a Point, coordinates MUST be an array of two decimal numbers; longitude and latitude precisely in that order
+ Coordinates []float32 `json:"coordinates,omitempty"`
+}
diff --git a/go-packages/meep-ctrl-engine-client/model_process.go b/go-packages/meep-sandbox-ctrl-client/model_process.go
similarity index 73%
rename from go-packages/meep-ctrl-engine-client/model_process.go
rename to go-packages/meep-sandbox-ctrl-client/model_process.go
index f7aae86bc3bab080751c4b33b0509733c4f824fa..e742a3c41cc7ec782f47b48f978fbec2225e2ab7 100644
--- a/go-packages/meep-ctrl-engine-client/model_process.go
+++ b/go-packages/meep-sandbox-ctrl-client/model_process.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
@@ -56,14 +56,15 @@ type Process struct {
// Key/Value Pair Map (string, string)
Meta map[string]string `json:"meta,omitempty"`
// Key/Value Pair Map (string, string)
- UserMeta map[string]string `json:"userMeta,omitempty"`
- // Latency in ms caused by the application
+ UserMeta map[string]string `json:"userMeta,omitempty"`
+ NetChar *NetworkCharacteristics `json:"netChar,omitempty"`
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar latency
AppLatency int32 `json:"appLatency,omitempty"`
- // Latency variation in ms caused by the application
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar latencyVariation
AppLatencyVariation int32 `json:"appLatencyVariation,omitempty"`
- // The limit of the traffic supported by the application
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar throughputUl and throughputDl
AppThroughput int32 `json:"appThroughput,omitempty"`
- // Packet lost (in terms of percentage) caused by the application
+ // **DEPRECATED** As of release 1.5.0, replaced by netChar packetLoss
AppPacketLoss float64 `json:"appPacketLoss,omitempty"`
// Identifier used for process placement in AdvantEDGE cluster
PlacementId string `json:"placementId,omitempty"`
diff --git a/go-packages/meep-ctrl-engine-client/model_replay.go b/go-packages/meep-sandbox-ctrl-client/model_replay.go
similarity index 62%
rename from go-packages/meep-ctrl-engine-client/model_replay.go
rename to go-packages/meep-sandbox-ctrl-client/model_replay.go
index 236ea679c041d3296202c601350c730eb7f01650..01e9ab06429605c0cb12b76c0f39fbef84198670 100644
--- a/go-packages/meep-ctrl-engine-client/model_replay.go
+++ b/go-packages/meep-sandbox-ctrl-client/model_replay.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-ctrl-engine-client/model_replay_event.go b/go-packages/meep-sandbox-ctrl-client/model_replay_event.go
similarity index 63%
rename from go-packages/meep-ctrl-engine-client/model_replay_event.go
rename to go-packages/meep-sandbox-ctrl-client/model_replay_event.go
index c2236960ad3c08b3b7413f84ef16e540ed77aa1b..574a2338a7edf3208f37c3c5fdefecb8f7206a6b 100644
--- a/go-packages/meep-ctrl-engine-client/model_replay_event.go
+++ b/go-packages/meep-sandbox-ctrl-client/model_replay_event.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-ctrl-engine-client/model_replay_file_list.go b/go-packages/meep-sandbox-ctrl-client/model_replay_file_list.go
similarity index 59%
rename from go-packages/meep-ctrl-engine-client/model_replay_file_list.go
rename to go-packages/meep-sandbox-ctrl-client/model_replay_file_list.go
index 11cd25ad31244c52a6488160f2db0e811a077b44..1245edecd19f218b1b37acc1d1303342648fa7e5 100644
--- a/go-packages/meep-ctrl-engine-client/model_replay_file_list.go
+++ b/go-packages/meep-sandbox-ctrl-client/model_replay_file_list.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-ctrl-engine-client/model_replay_info.go b/go-packages/meep-sandbox-ctrl-client/model_replay_info.go
similarity index 62%
rename from go-packages/meep-ctrl-engine-client/model_replay_info.go
rename to go-packages/meep-sandbox-ctrl-client/model_replay_info.go
index 0a29b2f89dec5c437dba1a33a183b89677c69275..b2e79957c4c97ef48a00582c2da784c745bc158c 100644
--- a/go-packages/meep-ctrl-engine-client/model_replay_info.go
+++ b/go-packages/meep-sandbox-ctrl-client/model_replay_info.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-ctrl-engine-client/model_replay_status.go b/go-packages/meep-sandbox-ctrl-client/model_replay_status.go
similarity index 70%
rename from go-packages/meep-ctrl-engine-client/model_replay_status.go
rename to go-packages/meep-sandbox-ctrl-client/model_replay_status.go
index 32fbe29452c2f062cfddc21cd77a563ce21efa5f..f514aeb7d6bd123dccbc21c8b81d3fc19a8d9992 100644
--- a/go-packages/meep-ctrl-engine-client/model_replay_status.go
+++ b/go-packages/meep-sandbox-ctrl-client/model_replay_status.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-ctrl-engine-client/model_scenario.go b/go-packages/meep-sandbox-ctrl-client/model_scenario.go
similarity index 67%
rename from go-packages/meep-ctrl-engine-client/model_scenario.go
rename to go-packages/meep-sandbox-ctrl-client/model_scenario.go
index 5f90dc511e858a81810df026b3fedd19838df433..bd30854e383e19517cf83796a38beeaf2a7dffa3 100644
--- a/go-packages/meep-ctrl-engine-client/model_scenario.go
+++ b/go-packages/meep-sandbox-ctrl-client/model_scenario.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-ctrl-engine-client/model_scenario_config.go b/go-packages/meep-sandbox-ctrl-client/model_scenario_config.go
similarity index 62%
rename from go-packages/meep-ctrl-engine-client/model_scenario_config.go
rename to go-packages/meep-sandbox-ctrl-client/model_scenario_config.go
index 3a0e2b9c3b1659a2f515ed53d242aca4729d7c8b..d23bb1701e5c93ab05664cd64f22c9802f02311f 100644
--- a/go-packages/meep-ctrl-engine-client/model_scenario_config.go
+++ b/go-packages/meep-sandbox-ctrl-client/model_scenario_config.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-sandbox-ctrl-client/model_scenario_node.go b/go-packages/meep-sandbox-ctrl-client/model_scenario_node.go
new file mode 100644
index 0000000000000000000000000000000000000000..a981a5b2a3fb8c9db06b0fcee5023a9fbdcecc83
--- /dev/null
+++ b/go-packages/meep-sandbox-ctrl-client/model_scenario_node.go
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Sandbox Controller REST API
+ *
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+// Scenario node object
+type ScenarioNode struct {
+ // Node type
+ Type_ string `json:"type,omitempty"`
+ NodeDataUnion *NodeDataUnion `json:"nodeDataUnion,omitempty"`
+ // Parent node name
+ Parent string `json:"parent,omitempty"`
+ // List of child node names
+ Children []string `json:"children,omitempty"`
+}
diff --git a/go-packages/meep-ctrl-engine-client/model_service_config.go b/go-packages/meep-sandbox-ctrl-client/model_service_config.go
similarity index 63%
rename from go-packages/meep-ctrl-engine-client/model_service_config.go
rename to go-packages/meep-sandbox-ctrl-client/model_service_config.go
index b6890dd78eb7fbd75c70398141083b1760485b3e..8b482e57585cba8fc43cdc1e8cb949855eeaa88c 100644
--- a/go-packages/meep-ctrl-engine-client/model_service_config.go
+++ b/go-packages/meep-sandbox-ctrl-client/model_service_config.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-ctrl-engine-client/model_service_port.go b/go-packages/meep-sandbox-ctrl-client/model_service_port.go
similarity index 67%
rename from go-packages/meep-ctrl-engine-client/model_service_port.go
rename to go-packages/meep-sandbox-ctrl-client/model_service_port.go
index 2f61438621fe1347d9603ec68ed58e7d04600d00..657c81a95997fbe60e4f865264172e670ef90f8c 100644
--- a/go-packages/meep-ctrl-engine-client/model_service_port.go
+++ b/go-packages/meep-sandbox-ctrl-client/model_service_port.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-ctrl-engine-client/model_zone.go b/go-packages/meep-sandbox-ctrl-client/model_zone.go
similarity index 83%
rename from go-packages/meep-ctrl-engine-client/model_zone.go
rename to go-packages/meep-sandbox-ctrl-client/model_zone.go
index c985b7a6cf5dd8c323f1716bf2cb0e3aa18bb968..b394dd5b9c40e2c4c923070a83c2243c9957b243 100644
--- a/go-packages/meep-ctrl-engine-client/model_zone.go
+++ b/go-packages/meep-sandbox-ctrl-client/model_zone.go
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 InterDigital Communications, Inc
+ * Copyright (c) 2020 InterDigital Communications, Inc
*
* Licensed under the Apache License, Version 2.0 (the \"License\");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * AdvantEDGE Platform Controller REST API
+ * AdvantEDGE Sandbox Controller REST API
*
- * This API is the main platform API and mainly used by the AdvantEDGE frontend to interact with scenarios
[meep-ctrl-engine](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-ctrl-engine)
Platform main interface used by controller software that want to interact with the AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address:30000/api_
`30000`
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
*
* API version: 1.0.0
* Contact: AdvantEDGE@InterDigital.com
diff --git a/go-packages/meep-sandbox-ctrl-client/response.go b/go-packages/meep-sandbox-ctrl-client/response.go
new file mode 100644
index 0000000000000000000000000000000000000000..aab66b7c3dd60a915831a18e24e2416c8e24a714
--- /dev/null
+++ b/go-packages/meep-sandbox-ctrl-client/response.go
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the \"License\");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an \"AS IS\" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * AdvantEDGE Sandbox Controller REST API
+ *
+ * This API is the main Sandbox Controller API for scenario deployment & event injection
[meep-sandbox-ctrl](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-sandbox-ctrl)
Platform runtime interface to manage active scenarios and inject events in AdvantEDGE platform
API details available at _your-AdvantEDGE-ip-address/api_
+ *
+ * API version: 1.0.0
+ * Contact: AdvantEDGE@InterDigital.com
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package client
+
+import (
+ "net/http"
+)
+
+type APIResponse struct {
+ *http.Response `json:"-"`
+ Message string `json:"message,omitempty"`
+ // Operation is the name of the swagger operation.
+ Operation string `json:"operation,omitempty"`
+ // RequestURL is the request URL. This value is always available, even if the
+ // embedded *http.Response is nil.
+ RequestURL string `json:"url,omitempty"`
+ // Method is the HTTP method used for the request. This value is always
+ // available, even if the embedded *http.Response is nil.
+ Method string `json:"method,omitempty"`
+ // Payload holds the contents of the response body (which may be nil or empty).
+ // This is provided here as the raw response.Body() reader will have already
+ // been drained.
+ Payload []byte `json:"-"`
+}
+
+func NewAPIResponse(r *http.Response) *APIResponse {
+
+ response := &APIResponse{Response: r}
+ return response
+}
+
+func NewAPIResponseWithError(errorMessage string) *APIResponse {
+
+ response := &APIResponse{Message: errorMessage}
+ return response
+}
diff --git a/go-packages/meep-sandbox-store/go.mod b/go-packages/meep-sandbox-store/go.mod
new file mode 100644
index 0000000000000000000000000000000000000000..6c438a2056200bff7872cb8534ea2378c028d79f
--- /dev/null
+++ b/go-packages/meep-sandbox-store/go.mod
@@ -0,0 +1,15 @@
+module github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-sandbox-store
+
+go 1.12
+
+require (
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis v0.0.0
+)
+
+replace (
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr => ../../go-packages/meep-data-key-mgr
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger => ../../go-packages/meep-logger
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis => ../../go-packages/meep-redis
+)
diff --git a/go-packages/meep-sandbox-store/go.sum b/go-packages/meep-sandbox-store/go.sum
new file mode 100644
index 0000000000000000000000000000000000000000..dd58e92dad341189b6f189dfbbaf4cc6919bc436
--- /dev/null
+++ b/go-packages/meep-sandbox-store/go.sum
@@ -0,0 +1,28 @@
+github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db/go.mod h1:RU+6d0CNIRSp6yo1mXLIIrnFa/3LHhvcDVLVJyovptM=
+github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351 h1:1u1XrfCBnY+GijnyU6O1k4odp5TnqZQTsp5v7+n/E4Y=
+github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351/go.mod h1:HxwfbuElTuGf+/uKZfjJrCnv0BmmpkPJDI7gBwj1KkM=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/go-redis/redis v6.15.2+incompatible h1:9SpNVG76gr6InJGxoZ6IuuxaCOQwDAhzyXg+Bs+0Sb4=
+github.com/go-redis/redis v6.15.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k=
+github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
+github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e h1:o3PsSEY8E4eXWkXrIP9YJALUkVZqzHJT5DOasTyn8Vs=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/go-packages/meep-sandbox-store/sandbox-store.go b/go-packages/meep-sandbox-store/sandbox-store.go
new file mode 100644
index 0000000000000000000000000000000000000000..93d7c75fe122ea48996b3df36b3abced8dfe8ab5
--- /dev/null
+++ b/go-packages/meep-sandbox-store/sandbox-store.go
@@ -0,0 +1,151 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package sandboxstore
+
+import (
+ "errors"
+
+ dkm "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr"
+ log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
+ redis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis"
+)
+
+const redisTable = 0
+
+// Root key
+var keyRoot = dkm.GetKeyRootGlobal() + "sandbox-store:"
+
+// DB Fields
+const fieldSandboxName = "sbox-name"
+const fieldScenarioName = "scenario-name"
+
+type Sandbox struct {
+ Name string
+ ScenarioName string
+}
+
+type SandboxStore struct {
+ rc *redis.Connector
+}
+
+// NewSandboxStore - Creates and initialize a Sandbox Store instance
+func NewSandboxStore(redisAddr string) (ss *SandboxStore, err error) {
+ // Create new Sandbox Store instance
+ ss = new(SandboxStore)
+
+ // Connect to Redis DB
+ ss.rc, err = redis.NewConnector(redisAddr, redisTable)
+ if err != nil {
+ log.Error("Failed connection to Sandbox Store Redis DB. Error: ", err)
+ return nil, err
+ }
+ log.Info("Connected to Sandbox Store Redis DB")
+
+ log.Info("Created Sandbox Store")
+ return ss, nil
+}
+
+// Set - Create or update entry in DB
+func (ss *SandboxStore) Set(sbox *Sandbox) error {
+ // Validate sandbox
+ if sbox == nil {
+ return errors.New("nil sandbox")
+ }
+ if sbox.Name == "" {
+ return errors.New("Invalid sandbox name")
+ }
+
+ // Prepare data
+ fields := make(map[string]interface{})
+ fields[fieldSandboxName] = sbox.Name
+ fields[fieldScenarioName] = sbox.ScenarioName
+
+ // Update entry in DB
+ key := keyRoot + sbox.Name
+ err := ss.rc.SetEntry(key, fields)
+ if err != nil {
+ log.Error("Failed to set entry with error: ", err.Error())
+ return err
+ }
+ return nil
+}
+
+// Get - Return sandbox with provided name
+func (ss *SandboxStore) Get(sboxName string) (*Sandbox, error) {
+ key := keyRoot + sboxName
+
+ // Make sure entry exists
+ if !ss.rc.EntryExists(key) {
+ err := errors.New("Entry not found")
+ log.Error(err.Error())
+ return nil, err
+ }
+
+ // Find entry
+ fields, err := ss.rc.GetEntry(key)
+ if err != nil {
+ log.Error("Failed to get entry with error: ", err.Error())
+ return nil, err
+ }
+
+ // Prepare sandbox
+ sbox := new(Sandbox)
+ sbox.Name = fields[fieldSandboxName]
+ sbox.ScenarioName = fields[fieldScenarioName]
+ return sbox, nil
+}
+
+// GetAll - Return all sandboxes
+func (ss *SandboxStore) GetAll() (map[string]*Sandbox, error) {
+ sboxMap := make(map[string]*Sandbox)
+ keyMatchStr := keyRoot + "*"
+
+ // Get all sandbox entry details
+ err := ss.rc.ForEachEntry(keyMatchStr, getSandbox, &sboxMap)
+ if err != nil {
+ log.Error("Failed to get all entries with error: ", err.Error())
+ return nil, err
+ }
+ return sboxMap, nil
+}
+
+// Del - Remove sandbox with provided name
+func (ss *SandboxStore) Del(sboxName string) {
+ key := keyRoot + sboxName
+ err := ss.rc.DelEntry(key)
+ if err != nil {
+ log.Error("Failed to delete entry for ", sboxName, " with err: ", err.Error())
+ }
+}
+
+// Flush - Remove all sandbox store entries
+func (ss *SandboxStore) Flush() {
+ ss.rc.DBFlush(keyRoot)
+}
+
+func getSandbox(key string, fields map[string]string, userData interface{}) error {
+ sboxMap := *(userData.(*map[string]*Sandbox))
+
+ // Prepare sandbox
+ sbox := new(Sandbox)
+ sbox.Name = fields[fieldSandboxName]
+ sbox.ScenarioName = fields[fieldScenarioName]
+
+ // Add sandbox to
+ sboxMap[sbox.Name] = sbox
+ return nil
+}
diff --git a/go-packages/meep-sandbox-store/sandbox-store_test.go b/go-packages/meep-sandbox-store/sandbox-store_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..a41bcf9f79c663143b672514740d90656f273b51
--- /dev/null
+++ b/go-packages/meep-sandbox-store/sandbox-store_test.go
@@ -0,0 +1,240 @@
+/*
+ * Copyright (c) 2020 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package sandboxstore
+
+import (
+ "fmt"
+ "testing"
+
+ log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
+)
+
+const redisAddr string = "localhost:30380"
+
+const sbox1Name = "sbox1Name"
+const sbox1ScenarioName = "sbox1ScenarioName"
+const sbox2Name = "sbox2Name"
+const sbox2ScenarioName = "sbox2ScenarioName"
+const sbox3Name = "sbox3Name"
+const sbox3ScenarioName = "sbox3ScenarioName"
+
+func TestSandboxStore(t *testing.T) {
+ fmt.Println("--- ", t.Name())
+ log.MeepTextLogInit(t.Name())
+
+ fmt.Println("Create invalid store")
+ ss, err := NewSandboxStore("ExpectedFailure-InvalidStoreAddr")
+ if err == nil {
+ t.Fatalf("Should report error on invalid db addr")
+ }
+ if ss != nil {
+ t.Fatalf("Should have a nil store")
+ }
+
+ fmt.Println("Create valid store")
+ ss, err = NewSandboxStore(redisAddr)
+ if err != nil {
+ t.Fatalf("Unable to create store")
+ }
+
+ fmt.Println("Flush store")
+ ss.Flush()
+
+ fmt.Println("Make sure store is empty")
+ sboxMap, err := ss.GetAll()
+ if err != nil {
+ t.Fatalf("Failed to get all store entries")
+ }
+ if len(sboxMap) != 0 {
+ t.Fatalf("Store not empty")
+ }
+
+ fmt.Println("Add store entries")
+ sbox1 := Sandbox{Name: sbox1Name, ScenarioName: sbox1ScenarioName}
+ err = ss.Set(&sbox1)
+ if err != nil {
+ t.Fatalf("Failed to set new store entry")
+ }
+ sbox2 := Sandbox{Name: sbox2Name, ScenarioName: sbox2ScenarioName}
+ err = ss.Set(&sbox2)
+ if err != nil {
+ t.Fatalf("Failed to set new store entry")
+ }
+ sbox3 := Sandbox{Name: sbox3Name, ScenarioName: sbox3ScenarioName}
+ err = ss.Set(&sbox3)
+ if err != nil {
+ t.Fatalf("Failed to set new store entry")
+ }
+
+ fmt.Println("Get invalid store entry")
+ sbox, err := ss.Get("invalid-name")
+ if err == nil {
+ t.Fatalf("Get should have failed")
+ }
+ if !validateSandbox(sbox, nil) {
+ t.Fatalf("Invalid store entry")
+ }
+
+ fmt.Println("Get store entries")
+ sbox, err = ss.Get(sbox1.Name)
+ if err != nil {
+ t.Fatalf("Failed to get store entry")
+ }
+ if !validateSandbox(sbox, &sbox1) {
+ t.Fatalf("Invalid store entry")
+ }
+ sbox, err = ss.Get(sbox2.Name)
+ if err != nil {
+ t.Fatalf("Failed to get store entry")
+ }
+ if !validateSandbox(sbox, &sbox2) {
+ t.Fatalf("Invalid store entry")
+ }
+ sbox, err = ss.Get(sbox3.Name)
+ if err != nil {
+ t.Fatalf("Failed to get store entry")
+ }
+ if !validateSandbox(sbox, &sbox3) {
+ t.Fatalf("Invalid store entry")
+ }
+
+ fmt.Println("Get all store entries")
+ sboxMap, err = ss.GetAll()
+ if err != nil {
+ t.Fatalf("Failed to get store entry")
+ }
+ if len(sboxMap) != 3 {
+ t.Fatalf("Invalid sandbox count")
+ }
+ if !validateSandbox(sboxMap[sbox1.Name], &sbox1) {
+ t.Fatalf("Invalid store entry")
+ }
+ if !validateSandbox(sboxMap[sbox2.Name], &sbox2) {
+ t.Fatalf("Invalid store entry")
+ }
+ if !validateSandbox(sboxMap[sbox3.Name], &sbox3) {
+ t.Fatalf("Invalid store entry")
+ }
+
+ fmt.Println("Update store entries")
+ sbox1 = Sandbox{Name: sbox1Name, ScenarioName: "newScenario"}
+ err = ss.Set(&sbox1)
+ if err != nil {
+ t.Fatalf("Failed to set new store entry")
+ }
+ sbox2 = Sandbox{Name: sbox2Name, ScenarioName: ""}
+ err = ss.Set(&sbox2)
+ if err != nil {
+ t.Fatalf("Failed to set new store entry")
+ }
+ sbox3 = Sandbox{Name: sbox3Name, ScenarioName: sbox3ScenarioName}
+ err = ss.Set(&sbox3)
+ if err != nil {
+ t.Fatalf("Failed to set new store entry")
+ }
+
+ fmt.Println("Get store entries")
+ sbox, err = ss.Get(sbox1.Name)
+ if err != nil {
+ t.Fatalf("Failed to get store entry")
+ }
+ if !validateSandbox(sbox, &sbox1) {
+ t.Fatalf("Invalid store entry")
+ }
+ sbox, err = ss.Get(sbox2.Name)
+ if err != nil {
+ t.Fatalf("Failed to get store entry")
+ }
+ if !validateSandbox(sbox, &sbox2) {
+ t.Fatalf("Invalid store entry")
+ }
+ sbox, err = ss.Get(sbox3.Name)
+ if err != nil {
+ t.Fatalf("Failed to get store entry")
+ }
+ if !validateSandbox(sbox, &sbox3) {
+ t.Fatalf("Invalid store entry")
+ }
+
+ fmt.Println("Get all store entries")
+ sboxMap, err = ss.GetAll()
+ if err != nil {
+ t.Fatalf("Failed to get store entry")
+ }
+ if len(sboxMap) != 3 {
+ t.Fatalf("Invalid sandbox count")
+ }
+ if !validateSandbox(sboxMap[sbox1.Name], &sbox1) {
+ t.Fatalf("Invalid store entry")
+ }
+ if !validateSandbox(sboxMap[sbox2.Name], &sbox2) {
+ t.Fatalf("Invalid store entry")
+ }
+ if !validateSandbox(sboxMap[sbox3.Name], &sbox3) {
+ t.Fatalf("Invalid store entry")
+ }
+
+ fmt.Println("Delete store entries")
+ ss.Del("invalid-name")
+ sboxMap, err = ss.GetAll()
+ if err != nil {
+ t.Fatalf("Failed to get store entry")
+ }
+ if len(sboxMap) != 3 {
+ t.Fatalf("Invalid sandbox count")
+ }
+
+ ss.Del(sbox2.Name)
+ sboxMap, err = ss.GetAll()
+ if err != nil {
+ t.Fatalf("Failed to get store entry")
+ }
+ if len(sboxMap) != 2 {
+ t.Fatalf("Invalid sandbox count")
+ }
+ if !validateSandbox(sboxMap[sbox1.Name], &sbox1) {
+ t.Fatalf("Invalid store entry")
+ }
+ if !validateSandbox(sboxMap[sbox2.Name], nil) {
+ t.Fatalf("Invalid store entry")
+ }
+ if !validateSandbox(sboxMap[sbox3.Name], &sbox3) {
+ t.Fatalf("Invalid store entry")
+ }
+
+ fmt.Println("Flush store entries")
+ ss.Flush()
+ sboxMap, err = ss.GetAll()
+ if err != nil {
+ t.Fatalf("Failed to get store entry")
+ }
+ if len(sboxMap) != 0 {
+ t.Fatalf("Invalid sandbox count")
+ }
+
+ // t.Fatalf("DONE")
+}
+
+func validateSandbox(sbox *Sandbox, sboxExpected *Sandbox) bool {
+ if sboxExpected == nil {
+ return sbox == nil
+ } else {
+ return sbox != nil &&
+ sbox.Name == sboxExpected.Name &&
+ sbox.ScenarioName == sboxExpected.ScenarioName
+ }
+}
diff --git a/go-packages/meep-watchdog/go.mod b/go-packages/meep-watchdog/go.mod
index 88512fc9932a59933536e6652051353afacef92a..4532d5ca1682cad97a775adbefb7130879cbbc3d 100644
--- a/go-packages/meep-watchdog/go.mod
+++ b/go-packages/meep-watchdog/go.mod
@@ -4,9 +4,12 @@ go 1.12
require (
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger v0.0.0
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq v0.0.0
github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis v0.0.0
)
-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-logger => ../../go-packages/meep-logger
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq => ../../go-packages/meep-mq
+ github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis => ../../go-packages/meep-redis
+)
diff --git a/go-packages/meep-watchdog/go.sum b/go-packages/meep-watchdog/go.sum
index d350fc3902a39de92df78d58983f8f6bbe4bbe9c..dd58e92dad341189b6f189dfbbaf4cc6919bc436 100644
--- a/go-packages/meep-watchdog/go.sum
+++ b/go-packages/meep-watchdog/go.sum
@@ -1,45 +1,28 @@
-github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db h1:Zkf5kwhxdW0xV7WM/crqIcOP5LCFGnAmumWSFAewJ74=
github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db/go.mod h1:RU+6d0CNIRSp6yo1mXLIIrnFa/3LHhvcDVLVJyovptM=
github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351 h1:1u1XrfCBnY+GijnyU6O1k4odp5TnqZQTsp5v7+n/E4Y=
github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351/go.mod h1:HxwfbuElTuGf+/uKZfjJrCnv0BmmpkPJDI7gBwj1KkM=
-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/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/go-redis/redis v6.15.2+incompatible h1:9SpNVG76gr6InJGxoZ6IuuxaCOQwDAhzyXg+Bs+0Sb4=
github.com/go-redis/redis v6.15.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
-github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
-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/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo=
github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME=
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-golang.org/x/net v0.0.0-20180906233101-161cd47e91fd h1:nTDtHvHSdCn1m6ITfMRqtOd/9+7a3s8RBNOZ3eYZzJA=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e h1:o3PsSEY8E4eXWkXrIP9YJALUkVZqzHJT5DOasTyn8Vs=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
-gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/go-packages/meep-watchdog/pingee.go b/go-packages/meep-watchdog/pingee.go
deleted file mode 100644
index 2135ea3d7eafcfa9737515bd95e0d805083e513b..0000000000000000000000000000000000000000
--- a/go-packages/meep-watchdog/pingee.go
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 2019 InterDigital Communications, Inc
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package watchdog
-
-import (
- "errors"
- "strings"
-
- log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
- redis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis"
-)
-
-// Pingee - Implements a Redis Pingee`
-type Pingee struct {
- name string
- isStarted bool
- pingChannel string
- pongChannel string
- rc *redis.Connector
-}
-
-// NewPingee - Create, Initialize and connect a pingee
-func NewPingee(dbAddr string, name string) (p *Pingee, err error) {
- if name == "" {
- err = errors.New("Missing pingee name")
- log.Error(err)
- return nil, err
- }
-
- p = new(Pingee)
- p.name = name
- p.isStarted = false
- p.pingChannel = p.name + ":ping"
- p.pongChannel = p.name + ":pong"
-
- // Connect to Redis DB
- p.rc, err = redis.NewConnector(dbAddr, 0)
- if err != nil {
- log.Error("Pingee ", p.name, " failed connection to Redis")
- log.Error(err)
- return nil, err
- }
- log.Debug("Pingee created ", p.name)
- return p, nil
-}
-
-// Start - Listen & reply to ping requests
-// - use on pingee side
-func (p *Pingee) Start() (err error) {
- err = p.rc.Subscribe(p.pingChannel)
- if err != nil {
- log.Error("Pingee ", p.name, " failed to subscribe to ", p.pingChannel)
- log.Error(err)
- return err
- }
- // Listen for subscribed pings. Provide event handler method.
- go func() {
- _ = p.rc.Listen(p.pingHandler)
- }()
- p.isStarted = true
- return nil
-}
-
-// Stop - Unsubscribe and stop listening to ping channel
-func (p *Pingee) Stop() (err error) {
- if p.isStarted {
- p.isStarted = false
- p.rc.StopListen()
- _ = p.rc.Unsubscribe(p.pingChannel)
- log.Debug("Pignee stopped ", p.name)
- }
- return nil
-}
-
-func (p *Pingee) pingHandler(channel string, payload string) {
- pingMsg := strings.TrimPrefix(payload, pingPrefix)
- pongMsg := pongPrefix + pingMsg
- _ = p.rc.Publish(p.pongChannel, pongMsg)
-}
diff --git a/go-packages/meep-watchdog/pingee_test.go b/go-packages/meep-watchdog/pingee_test.go
deleted file mode 100644
index 653b2664ce5bfefa83c423ce5ebecb15f9494d0d..0000000000000000000000000000000000000000
--- a/go-packages/meep-watchdog/pingee_test.go
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2019 InterDigital Communications, Inc
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package watchdog
-
-import (
- "fmt"
- "testing"
-
- log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
-)
-
-const pingeeRedisAddr string = "localhost:30380"
-const pingeeName string = "pingee-tester"
-
-func TestNewPingee(t *testing.T) {
- fmt.Println("--- ", t.Name())
- log.MeepTextLogInit(t.Name())
- // Keep this one first...
- fmt.Println("Invalid Redis DB address")
- _, err := NewPingee("ExpectedFailure-InvalidDbLocation", pingeeName)
- if err == nil {
- t.Errorf("Should report error on invalid Redis db")
- }
-
- fmt.Println("Create normal")
- _, err = NewPingee(pingeeRedisAddr, pingeeName)
- if err != nil {
- t.Errorf("Unable to create pingee")
- }
-
- fmt.Println("Create no name")
- _, err = NewPingee(pingeeRedisAddr, "")
- if err == nil {
- t.Errorf("Should not allow creating pingee without a name")
- }
-}
diff --git a/go-packages/meep-watchdog/pinger.go b/go-packages/meep-watchdog/pinger.go
index b779ebccb02adb6057e69ebfb1abdf412194a757..0ebe64c4f103ce86c62b3ddfe8c36d4e49bfa00b 100644
--- a/go-packages/meep-watchdog/pinger.go
+++ b/go-packages/meep-watchdog/pinger.go
@@ -22,57 +22,58 @@ import (
"time"
log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
- redis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis"
+ mq "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq"
)
// Pinger - Implements a Redis Pinger
type Pinger struct {
- name string
- isStarted bool
- pingChannel string
- pongChannel string
- // pingMsg string
- pongMsg string
- rc *redis.Connector
+ name string
+ namespace string
+ isStarted bool
+ pongMsg string
+ mqGlobal *mq.MsgQueue
+ handlerId int
}
// NewPinger - Create, Initialize and connect a pinger
-func NewPinger(dbAddr string, name string) (p *Pinger, err error) {
+func NewPinger(name string, namespace string, dbAddr string) (p *Pinger, err error) {
if name == "" {
err = errors.New("Missing pinger name")
log.Error(err)
return nil, err
}
+ if namespace == "" {
+ err = errors.New("Missing pinger namespace")
+ log.Error(err)
+ return nil, err
+ }
p = new(Pinger)
p.name = name
+ p.namespace = namespace
p.isStarted = false
- p.pingChannel = p.name + ":ping"
- p.pongChannel = p.name + ":pong"
- // Connect to Redis DB
- p.rc, err = redis.NewConnector(dbAddr, 0)
+ // Create message queue
+ p.mqGlobal, err = mq.NewMsgQueue(mq.GetGlobalName(), p.name, p.namespace, dbAddr)
if err != nil {
- log.Error("Pinger ", p.name, " failedconnection to Redis:")
- log.Error(err)
+ log.Error("Failed to create Message Queue with error: ", err)
return nil, err
}
- log.Debug("Pinger created ", p.name)
+
+ log.Debug("Pinger created: ", p.name)
return p, nil
}
-// Start - Subscribe and Listen to pong channel
+// Start - Subscribe and Listen for pong responses
func (p *Pinger) Start() (err error) {
- err = p.rc.Subscribe(p.pongChannel)
+
+ // Register Message Queue handler
+ handler := mq.MsgHandler{Handler: p.msgHandler, UserData: nil}
+ p.handlerId, err = p.mqGlobal.RegisterHandler(handler)
if err != nil {
- log.Error("Pinger ", p.name, " failed to subscribe to ", p.pongChannel)
- log.Error(err)
+ log.Error("Failed to register message handler: ", err.Error())
return err
}
- // Listen for subscribed pings. Provide event handler method.
- go func() {
- _ = p.rc.Listen(p.pongHandler)
- }()
p.isStarted = true
return nil
@@ -82,32 +83,53 @@ func (p *Pinger) Start() (err error) {
func (p *Pinger) Stop() (err error) {
if p.isStarted {
p.isStarted = false
- p.rc.StopListen()
- _ = p.rc.Unsubscribe(p.pongChannel)
- log.Debug("Pigner stopped ", p.name)
+ p.mqGlobal.UnregisterHandler(p.handlerId)
+ log.Debug("Pinger stopped: ", p.name)
}
return nil
}
-func (p *Pinger) pongHandler(channel string, payload string) {
- p.pongMsg = strings.TrimPrefix(payload, pongPrefix)
+// Message Queue handler
+func (p *Pinger) msgHandler(msg *mq.Msg, userData interface{}) {
+ switch msg.Message {
+ case mq.MsgPing:
+ log.Trace("RX MSG: ", mq.PrintMsg(msg))
+ pingMsg := strings.TrimPrefix(msg.Payload["data"], pingPrefix)
+
+ // Pong
+ pongMsg := p.mqGlobal.CreateMsg(mq.MsgPong, msg.SrcName, msg.SrcNamespace)
+ pongMsg.Payload["data"] = pongPrefix + pingMsg
+ log.Trace("TX MSG: ", mq.PrintMsg(msg))
+ err := p.mqGlobal.SendMsg(pongMsg)
+ if err != nil {
+ log.Error("Failed to send message. Error: ", err.Error())
+ }
+ case mq.MsgPong:
+ log.Trace("RX MSG: ", mq.PrintMsg(msg))
+ p.pongMsg = strings.TrimPrefix(msg.Payload["data"], pongPrefix)
+ default:
+ log.Trace("Ignoring unsupported message: ", mq.PrintMsg(msg))
+ }
}
// Ping - Ping a channel
-func (p *Pinger) Ping(txStr string) (alive bool) {
+func (p *Pinger) Ping(name string, namespace string, txStr string) (alive bool) {
alive = false
if !p.isStarted {
- log.Debug("Pinger ", p.name, " cannot cannot ping when stopped")
+ log.Debug("Pinger ", p.name, " cannot ping when stopped")
return false
}
// Ping
- err := p.rc.Publish(p.pingChannel, pingPrefix+txStr)
+ msg := p.mqGlobal.CreateMsg(mq.MsgPing, name, namespace)
+ msg.Payload["data"] = pingPrefix + txStr
+ log.Trace("TX MSG: ", mq.PrintMsg(msg))
+ err := p.mqGlobal.SendMsg(msg)
if err != nil {
- log.Error("Pinger ", p.name, " failed to publish to ", p.pingChannel)
- log.Error(err)
+ log.Error("Failed to send message. Error: ", err.Error())
return alive
}
+
// Wait for pong
rxStr := ""
p.pongMsg = ""
diff --git a/go-packages/meep-watchdog/pinger_test.go b/go-packages/meep-watchdog/pinger_test.go
index 3f9eb97a92f11f6052fecc34eb62f249d699be82..63fcba62ebc4cb7f4e95c4a09aa9b2906636ced3 100644
--- a/go-packages/meep-watchdog/pinger_test.go
+++ b/go-packages/meep-watchdog/pinger_test.go
@@ -19,35 +19,41 @@ package watchdog
import (
"fmt"
"testing"
- "time"
log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
)
-const pingerRedisAddr string = "localhost:30380"
-const pingerName string = "pinger-tester"
+const redisAddr string = "localhost:30380"
+const name string = "pinger"
+const namespace string = "pinger-ns"
+const peerName string = "peer"
+const peerNamespace string = "peer-ns"
func TestNewPinger(t *testing.T) {
fmt.Println("--- ", t.Name())
log.MeepTextLogInit(t.Name())
- // Keep this one first...
- fmt.Println("Invalid Redis DB address")
- _, err := NewPinger("ExpectedFailure-InvalidDbLocation", pingerName)
+ fmt.Println("Invalid Pinger")
+ _, err := NewPinger("", namespace, redisAddr)
if err == nil {
- t.Errorf("Should report error on invalid Redis db")
+ t.Fatalf("Should report error on invalid Redis db")
+ }
+ _, err = NewPinger(name, "", redisAddr)
+ if err == nil {
+ t.Fatalf("Should report error on invalid Redis db")
+ }
+ _, err = NewPinger(name, namespace, "ExpectedFailure-InvalidDbLocation")
+ if err == nil {
+ t.Fatalf("Should report error on invalid Redis db")
}
fmt.Println("Create normal")
- _, err = NewPinger(pingerRedisAddr, pingerName)
+ pinger, err := NewPinger(name, namespace, redisAddr)
if err != nil {
- t.Errorf("Unable to create pinger")
+ t.Fatalf("Unable to create pinger")
}
-
- fmt.Println("Create no name")
- _, err = NewPinger(pingerRedisAddr, "")
- if err == nil {
- t.Errorf("Should not allow creating pinger without a name")
+ if pinger == nil {
+ t.Fatalf("Pinger == nil")
}
}
@@ -56,50 +62,50 @@ func TestPingPong(t *testing.T) {
fmt.Println("--- ", t.Name())
fmt.Println("Create pinger")
- pinger, err := NewPinger(pingerRedisAddr, pingerName)
+ pinger, err := NewPinger(name, namespace, redisAddr)
if err != nil {
- t.Errorf("Unable to create pinger")
+ t.Fatalf("Unable to create pinger")
}
fmt.Println("Create pingee")
- pingee, err := NewPingee(pingerRedisAddr, pingerName)
+ pingee, err := NewPinger(peerName, peerNamespace, redisAddr)
if err != nil {
- t.Errorf("Unable to create pingee")
+ t.Fatalf("Unable to create pingee")
}
fmt.Println("Pingee start")
err = pingee.Start()
if err != nil {
- t.Errorf("Unable to start (pingee)")
+ t.Fatalf("Unable to start (pingee)")
}
- time.Sleep(time.Second)
+ // time.Sleep(time.Second)
fmt.Println("Pigner Ping while stopped")
- alive := pinger.Ping(msg)
+ alive := pinger.Ping(peerName, peerNamespace, msg)
if alive {
- t.Errorf("Ping must fail if pinger stopped")
+ t.Fatalf("Ping must fail if pinger stopped")
}
- fmt.Println("Pigner start")
+ fmt.Println("Pinger start")
err = pinger.Start()
if err != nil {
- t.Errorf("Unable to start (pinger)")
+ t.Fatalf("Unable to start (pinger)")
}
- time.Sleep(time.Second)
- fmt.Println("Pigner ping")
- alive = pinger.Ping(msg)
+ // time.Sleep(time.Second)
+ fmt.Println("Pinger ping")
+ alive = pinger.Ping(peerName, peerNamespace, msg)
if !alive {
- t.Errorf("Ping failed")
+ t.Fatalf("Ping failed")
}
fmt.Println("Stop pinger & pingee")
err = pingee.Stop()
if err != nil {
- t.Errorf("Unable to stop (pingee)")
+ t.Fatalf("Unable to stop (pingee)")
}
err = pinger.Stop()
if err != nil {
- t.Errorf("Unable to stop (pinger)")
+ t.Fatalf("Unable to stop (pinger)")
}
fmt.Println("Test Complete")
}
diff --git a/go-packages/meep-watchdog/watchdog.go b/go-packages/meep-watchdog/watchdog.go
index e067b8a3269d0f79c3cd5dfb275a6264a8cd630a..01fb1ae735fad719e0c690182000d581a981fa64 100644
--- a/go-packages/meep-watchdog/watchdog.go
+++ b/go-packages/meep-watchdog/watchdog.go
@@ -25,18 +25,21 @@ import (
// Watchdog - Implements a Redis Watchdog
type Watchdog struct {
- name string
- isAlive bool
- isStarted bool
- pinger *Pinger
- pingRate time.Duration
- pongTimeout time.Duration
- pongTime time.Time
- ticker *time.Ticker
+ name string
+ namespace string
+ peerName string
+ peerNamespace string
+ isAlive bool
+ isStarted bool
+ pinger *Pinger
+ pingRate time.Duration
+ pongTimeout time.Duration
+ pongTime time.Time
+ ticker *time.Ticker
}
// NewWatchdog - Create, Initialize and connect a watchdog
-func NewWatchdog(dbAddr string, name string) (w *Watchdog, err error) {
+func NewWatchdog(name string, namespace string, peerName string, peerNamespace string, dbAddr string) (w *Watchdog, err error) {
if name == "" {
err = errors.New("Missing watchdog name")
log.Error(err)
@@ -45,9 +48,12 @@ func NewWatchdog(dbAddr string, name string) (w *Watchdog, err error) {
w = new(Watchdog)
w.name = name
+ w.namespace = namespace
+ w.peerName = peerName
+ w.peerNamespace = peerNamespace
w.isStarted = false
- w.pinger, err = NewPinger(dbAddr, name)
+ w.pinger, err = NewPinger(w.name, namespace, dbAddr)
if err != nil {
log.Error("Error creating watchdog: ", err)
return nil, err
@@ -80,7 +86,7 @@ func (w *Watchdog) Start(rate time.Duration, timeout time.Duration) (err error)
func (w *Watchdog) watchdogTask() {
log.Debug("Watchdog task started: ", w.name)
for range w.ticker.C {
- isAlive := w.pinger.Ping(time.Now().String())
+ isAlive := w.pinger.Ping(w.peerName, w.peerNamespace, time.Now().String())
if isAlive {
w.pongTime = time.Now()
}
diff --git a/go-packages/meep-watchdog/watchdog_test.go b/go-packages/meep-watchdog/watchdog_test.go
index 8defd685e11de6327148679b0798c12447c6e34f..dbbd0b59ef56384696d2c9bec4747d1fcb2c9453 100644
--- a/go-packages/meep-watchdog/watchdog_test.go
+++ b/go-packages/meep-watchdog/watchdog_test.go
@@ -25,86 +25,89 @@ import (
)
const wdRedisAddr string = "localhost:30380"
-const wdName string = "watchdog-tester"
+const wdName string = "watchdog"
+const wdNamespace string = "watchdog-ns"
+const wdPeerName string = "peer"
+const wdPeerNamespace string = "peer-ns"
func TestWatchdogSuccess(t *testing.T) {
fmt.Println("--- ", t.Name())
log.MeepTextLogInit(t.Name())
fmt.Println("Create watchdog")
- wd, err := NewWatchdog(wdRedisAddr, wdName)
+ wd, err := NewWatchdog(wdName, wdNamespace, wdPeerName, wdPeerNamespace, wdRedisAddr)
if err != nil {
- t.Errorf("Unable to create watchdog")
+ t.Fatalf("Unable to create watchdog")
}
fmt.Println("Create pingee")
- pingee, err := NewPingee(wdRedisAddr, wdName)
+ pingee, err := NewPinger(wdPeerName, wdPeerNamespace, wdRedisAddr)
if err != nil {
- t.Errorf("Unable to create pingee")
+ t.Fatalf("Unable to create pingee")
}
fmt.Println("Pingee start")
err = pingee.Start()
if err != nil {
- t.Errorf("Unable to listen (pingee)")
+ t.Fatalf("Unable to listen (pingee)")
}
- time.Sleep(250 * time.Millisecond)
+ // time.Sleep(250 * time.Millisecond)
tstart := time.Now()
fmt.Println("Watchdog start")
err = wd.Start(250*time.Millisecond, time.Second)
if err != nil {
- t.Errorf("Unable to start watchdog")
+ t.Fatalf("Unable to start watchdog")
}
alive := wd.IsAlive()
fmt.Println("Check liveness - alive=", alive, " time=", time.Since(tstart))
if !alive {
- t.Errorf("Failed liveness test #1")
+ t.Fatalf("Failed liveness test #1")
}
fmt.Println("Wait 250ms")
time.Sleep(250 * time.Millisecond)
alive = wd.IsAlive()
fmt.Println("Check liveness - alive=", alive, " time=", time.Since(tstart))
if !alive {
- t.Errorf("Failed liveness test #2")
+ t.Fatalf("Failed liveness test #2")
}
fmt.Println("Wait 1 sec")
time.Sleep(time.Second)
alive = wd.IsAlive()
fmt.Println("Check liveness - alive=", alive, " time=", time.Since(tstart))
if !alive {
- t.Errorf("Failed liveness test #3")
+ t.Fatalf("Failed liveness test #3")
}
fmt.Println("Pignee stop")
err = pingee.Stop()
if err != nil {
- t.Errorf("Unable to stop pingee")
+ t.Fatalf("Unable to stop pingee")
}
fmt.Println("Wait 1.25sec (cause a timeout)")
time.Sleep(1250 * time.Millisecond)
alive = wd.IsAlive()
fmt.Println("Check liveness - alive=", alive, " time=", time.Since(tstart))
if alive {
- t.Errorf("Failed liveness test #5")
+ t.Fatalf("Failed liveness test #5")
}
fmt.Println("Pingee start")
err = pingee.Start()
if err != nil {
- t.Errorf("Unable to start pingee")
+ t.Fatalf("Unable to start pingee")
}
- fmt.Println("Wait 250ms")
- time.Sleep(250 * time.Millisecond)
+ fmt.Println("Wait 1 sec")
+ time.Sleep(time.Second)
alive = wd.IsAlive()
fmt.Println("Check liveness - alive=", alive, " time=", time.Since(tstart))
if !alive {
- t.Errorf("Failed liveness test #6")
+ t.Fatalf("Failed liveness test #6")
}
fmt.Println("Stop watchdog & pingee")
err = pingee.Stop()
if err != nil {
- t.Errorf("Unable to stop pingee")
+ t.Fatalf("Unable to stop pingee")
}
wd.Stop()
fmt.Println("Test Complete")
diff --git a/js-apps/meep-frontend/package-lock.json b/js-apps/meep-frontend/package-lock.json
index 6b1374ee871c93c627b8b6a80074d126fc3c418d..cd3da52ab8f538c3b786bf470711bbc51a2138b6 100644
--- a/js-apps/meep-frontend/package-lock.json
+++ b/js-apps/meep-frontend/package-lock.json
@@ -927,6 +927,17 @@
"minimist": "^1.2.0"
}
},
+ "@geoman-io/leaflet-geoman-free": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@geoman-io/leaflet-geoman-free/-/leaflet-geoman-free-2.5.0.tgz",
+ "integrity": "sha512-Zq/gOGPpsRurTrW3d3qiXlvEPHZfU/PZ7jr02jtweaN0kXyHo/WqkihMS9h5yUySjJBXdUC9Xuuo4/ZzHqEH4g==",
+ "requires": {
+ "@turf/difference": "^6.0.2",
+ "@turf/intersect": "^6.1.3",
+ "@turf/kinks": "6.x",
+ "lodash": "^4.17.15"
+ }
+ },
"@jest/console": {
"version": "24.9.0",
"resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz",
@@ -1136,6 +1147,76 @@
"@types/yargs": "^13.0.0"
}
},
+ "@mapbox/geojson-rewind": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.0.tgz",
+ "integrity": "sha512-73l/qJQgj/T/zO1JXVfuVvvKDgikD/7D/rHAD28S9BG1OTstgmftrmqfCx4U+zQAmtsB6HcDA3a7ymdnJZAQgg==",
+ "requires": {
+ "concat-stream": "~2.0.0",
+ "minimist": "^1.2.5"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz",
+ "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.0.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+ }
+ }
+ },
+ "@mapbox/geojson-types": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz",
+ "integrity": "sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw=="
+ },
+ "@mapbox/jsonlint-lines-primitives": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz",
+ "integrity": "sha1-zlblOfg1UrWNENZy6k1vya3HsjQ="
+ },
+ "@mapbox/mapbox-gl-supported": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz",
+ "integrity": "sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg=="
+ },
+ "@mapbox/point-geometry": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz",
+ "integrity": "sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI="
+ },
+ "@mapbox/tiny-sdf": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-1.1.1.tgz",
+ "integrity": "sha512-Ihn1nZcGIswJ5XGbgFAvVumOgWpvIjBX9jiRlIl46uQG9vJOF51ViBYHF95rEZupuyQbEmhLaDPLQlU7fUTsBg=="
+ },
+ "@mapbox/unitbezier": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz",
+ "integrity": "sha1-FWUb1VOme4WB+zmIEMmK2Go0Uk4="
+ },
+ "@mapbox/vector-tile": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz",
+ "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==",
+ "requires": {
+ "@mapbox/point-geometry": "~0.1.0"
+ }
+ },
+ "@mapbox/whoots-js": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz",
+ "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q=="
+ },
"@material-ui/core": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/@material-ui/core/-/core-1.5.1.tgz",
@@ -3703,6 +3784,66 @@
}
}
},
+ "@turf/area": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@turf/area/-/area-6.0.1.tgz",
+ "integrity": "sha512-Zv+3N1ep9P5JvR0YOYagLANyapGWQBh8atdeR3bKpWcigVXFsEKNUw03U/5xnh+cKzm7yozHD6MFJkqQv55y0g==",
+ "requires": {
+ "@turf/helpers": "6.x",
+ "@turf/meta": "6.x"
+ }
+ },
+ "@turf/difference": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/@turf/difference/-/difference-6.0.2.tgz",
+ "integrity": "sha512-WtXkvFgOyHqsG3xtYG/m5Su+gkvyCUTbdW0XOuc3Ha2u9UeeBSGwEzTc2y9THDLDhHqR+DlTl1MMEBihXcy3fg==",
+ "requires": {
+ "@turf/area": "6.x",
+ "@turf/helpers": "6.x",
+ "@turf/invariant": "6.x",
+ "@turf/meta": "6.x",
+ "martinez-polygon-clipping": "^0.4.3"
+ }
+ },
+ "@turf/helpers": {
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.1.4.tgz",
+ "integrity": "sha512-vJvrdOZy1ngC7r3MDA7zIGSoIgyrkWcGnNIEaqn/APmw+bVLF2gAW7HIsdTxd12s5wQMqEpqIQrmrbRRZ0xC7g=="
+ },
+ "@turf/intersect": {
+ "version": "6.1.3",
+ "resolved": "https://registry.npmjs.org/@turf/intersect/-/intersect-6.1.3.tgz",
+ "integrity": "sha512-SeAJG/zPRRTeyK2OifkPoyLq60q8tv8prpPIH3R8ZhyF4MdLOnMv5MURaQ6kQd+3UTDrL+pYm6rqbPvln1zqIw==",
+ "requires": {
+ "@turf/helpers": "6.x",
+ "@turf/invariant": "6.x",
+ "martinez-polygon-clipping": "^0.4.3"
+ }
+ },
+ "@turf/invariant": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-6.1.2.tgz",
+ "integrity": "sha512-WU08Ph8j0J2jVGlQCKChXoCtI50BB3yEH21V++V0T4cR1T27HKCxkehV2sYMwTierfMBgjwSwDIsxnR4/2mWXg==",
+ "requires": {
+ "@turf/helpers": "6.x"
+ }
+ },
+ "@turf/kinks": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/@turf/kinks/-/kinks-6.0.0.tgz",
+ "integrity": "sha512-X2xk3+Sr9aeu51t1vBa7Iwowvjxcbl5fePLIo/dDOU4j5WeFoqGCto+DdEHQcC3y8HVUin4i8GaHVaM9sVTphg==",
+ "requires": {
+ "@turf/helpers": "6.x"
+ }
+ },
+ "@turf/meta": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-6.0.2.tgz",
+ "integrity": "sha512-VA7HJkx7qF1l3+GNGkDVn2oXy4+QoLP6LktXAaZKjuT1JI0YESat7quUkbCMy4zP9lAUuvS4YMslLyTtr919FA==",
+ "requires": {
+ "@turf/helpers": "6.x"
+ }
+ },
"@types/babel__core": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz",
@@ -4302,8 +4443,7 @@
"array-filter": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz",
- "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=",
- "dev": true
+ "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM="
},
"array-find-index": {
"version": "1.0.2",
@@ -4485,6 +4625,14 @@
}
}
},
+ "available-typed-arrays": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz",
+ "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==",
+ "requires": {
+ "array-filter": "^1.0.0"
+ }
+ },
"aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
@@ -4991,8 +5139,7 @@
"buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
- "dev": true
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
},
"buffer-xor": {
"version": "1.0.3",
@@ -5436,6 +5583,11 @@
"shallow-clone": "^1.0.0"
}
},
+ "clsx": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz",
+ "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA=="
+ },
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@@ -5935,6 +6087,11 @@
"integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==",
"dev": true
},
+ "csscolorparser": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz",
+ "integrity": "sha1-s085HupNqPPpgjHizNjfnAQfFxs="
+ },
"cssesc": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz",
@@ -6381,10 +6538,102 @@
"dev": true
},
"deep-equal": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
- "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
- "dev": true
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.3.tgz",
+ "integrity": "sha512-Spqdl4H+ky45I9ByyJtXteOm9CaIrPmnIPmOhrkKGNYWeDgCvJ8jNYVCTjChxW4FqGuZnLHADc8EKRMX6+CgvA==",
+ "requires": {
+ "es-abstract": "^1.17.5",
+ "es-get-iterator": "^1.1.0",
+ "is-arguments": "^1.0.4",
+ "is-date-object": "^1.0.2",
+ "is-regex": "^1.0.5",
+ "isarray": "^2.0.5",
+ "object-is": "^1.1.2",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "regexp.prototype.flags": "^1.3.0",
+ "side-channel": "^1.0.2",
+ "which-boxed-primitive": "^1.0.1",
+ "which-collection": "^1.0.1",
+ "which-typed-array": "^1.1.2"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
+ },
+ "is-callable": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
+ "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
+ },
+ "is-date-object": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
+ "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g=="
+ },
+ "is-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
+ "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
+ },
+ "object-is": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz",
+ "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
+ "string.prototype.trimleft": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
+ "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimstart": "^1.0.0"
+ }
+ },
+ "string.prototype.trimright": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
+ "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimend": "^1.0.0"
+ }
+ }
+ }
},
"deep-extend": {
"version": "0.6.0",
@@ -6407,7 +6656,6 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
"integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
- "dev": true,
"requires": {
"object-keys": "^1.0.12"
}
@@ -6658,6 +6906,11 @@
}
}
},
+ "earcut": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.2.tgz",
+ "integrity": "sha512-eZoZPPJcUHnfRZ0PjLvx2qBordSiO8ofC3vt+qACLM95u+4DovnbYNpQtJh0DNsWj8RnxrQytD4WA8gj5cRIaQ=="
+ },
"ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
@@ -6935,11 +7188,92 @@
"string.prototype.trimright": "^2.1.0"
}
},
+ "es-get-iterator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz",
+ "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==",
+ "requires": {
+ "es-abstract": "^1.17.4",
+ "has-symbols": "^1.0.1",
+ "is-arguments": "^1.0.4",
+ "is-map": "^2.0.1",
+ "is-set": "^2.0.1",
+ "is-string": "^1.0.5",
+ "isarray": "^2.0.5"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
+ },
+ "is-callable": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
+ "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
+ },
+ "is-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
+ "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "is-string": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
+ "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ=="
+ },
+ "isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
+ },
+ "string.prototype.trimleft": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
+ "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimstart": "^1.0.0"
+ }
+ },
+ "string.prototype.trimright": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
+ "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimend": "^1.0.0"
+ }
+ }
+ }
+ },
"es-to-primitive": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
"integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "dev": true,
"requires": {
"is-callable": "^1.1.4",
"is-date-object": "^1.0.1",
@@ -7502,6 +7836,11 @@
"for-in": "^1.0.1"
}
},
+ "foreach": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
+ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k="
+ },
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
@@ -8176,8 +8515,7 @@
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
"function.prototype.name": {
"version": "1.1.1",
@@ -8244,6 +8582,11 @@
"globule": "^1.0.0"
}
},
+ "geojson-vt": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz",
+ "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg=="
+ },
"get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
@@ -8286,6 +8629,11 @@
"assert-plus": "^1.0.0"
}
},
+ "gl-matrix": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.3.0.tgz",
+ "integrity": "sha512-COb7LDz+SXaHtl/h4LeaFcNdJdAQSDeVqjiIihSXNrkWObZLhDI4hIkZC11Aeqp7bcE72clzB0BnDXr2SmslRA=="
+ },
"glob": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
@@ -8414,6 +8762,11 @@
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
"dev": true
},
+ "grid-index": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.1.0.tgz",
+ "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA=="
+ },
"growly": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
@@ -8465,7 +8818,6 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dev": true,
"requires": {
"function-bind": "^1.1.1"
}
@@ -8488,8 +8840,7 @@
"has-symbols": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
- "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
- "dev": true
+ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q="
},
"has-unicode": {
"version": "2.0.1",
@@ -8715,6 +9066,14 @@
"requires": {
"deep-equal": "~1.0.1",
"http-errors": "~1.7.2"
+ },
+ "dependencies": {
+ "deep-equal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
+ "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
+ "dev": true
+ }
}
},
"http-errors": {
@@ -8802,8 +9161,7 @@
"ieee754": {
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
- "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
- "dev": true
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
},
"iferr": {
"version": "0.1.5",
@@ -8940,12 +9298,22 @@
}
}
},
+ "is-arguments": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
+ "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA=="
+ },
"is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
"dev": true
},
+ "is-bigint": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.0.tgz",
+ "integrity": "sha512-t5mGUXC/xRheCK431ylNiSkGGpBp8bHENBcENTkDT6ppwPzEVxNGZRvgvmOEfbWkFhA7D2GEuE2mmQTr78sl2g=="
+ },
"is-binary-path": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
@@ -8958,8 +9326,7 @@
"is-boolean-object": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz",
- "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=",
- "dev": true
+ "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M="
},
"is-buffer": {
"version": "2.0.4",
@@ -8969,8 +9336,7 @@
"is-callable": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
- "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
- "dev": true
+ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA=="
},
"is-ci": {
"version": "2.0.0",
@@ -9010,8 +9376,7 @@
"is-date-object": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
- "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
- "dev": true
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY="
},
"is-descriptor": {
"version": "0.1.6",
@@ -9106,6 +9471,11 @@
"is-path-inside": "^1.0.0"
}
},
+ "is-map": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz",
+ "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw=="
+ },
"is-npm": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
@@ -9141,8 +9511,7 @@
"is-number-object": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz",
- "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=",
- "dev": true
+ "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k="
},
"is-obj": {
"version": "1.0.1",
@@ -9194,6 +9563,11 @@
"integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==",
"dev": true
},
+ "is-set": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz",
+ "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA=="
+ },
"is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
@@ -9202,8 +9576,7 @@
"is-string": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz",
- "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=",
- "dev": true
+ "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ="
},
"is-subset": {
"version": "0.1.1",
@@ -9224,11 +9597,79 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
"integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
- "dev": true,
"requires": {
"has-symbols": "^1.0.0"
}
},
+ "is-typed-array": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.3.tgz",
+ "integrity": "sha512-BSYUBOK/HJibQ30wWkWold5txYwMUXQct9YHAQJr8fSwvZoiglcqB0pd7vEN23+Tsi9IUEjztdOSzl4qLVYGTQ==",
+ "requires": {
+ "available-typed-arrays": "^1.0.0",
+ "es-abstract": "^1.17.4",
+ "foreach": "^2.0.5",
+ "has-symbols": "^1.0.1"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
+ },
+ "is-callable": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
+ "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
+ },
+ "is-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
+ "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "string.prototype.trimleft": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
+ "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimstart": "^1.0.0"
+ }
+ },
+ "string.prototype.trimright": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
+ "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimend": "^1.0.0"
+ }
+ }
+ }
+ },
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
@@ -9241,6 +9682,16 @@
"integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
"dev": true
},
+ "is-weakmap": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
+ "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA=="
+ },
+ "is-weakset": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.1.tgz",
+ "integrity": "sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw=="
+ },
"is-windows": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
@@ -10041,6 +10492,11 @@
"css-vendor": "^0.3.8"
}
},
+ "kdbush": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz",
+ "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew=="
+ },
"keycharm": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/keycharm/-/keycharm-0.2.0.tgz",
@@ -10168,6 +10624,11 @@
"invert-kv": "^1.0.0"
}
},
+ "leaflet": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.6.0.tgz",
+ "integrity": "sha512-CPkhyqWUKZKFJ6K8umN5/D2wrJ2+/8UIpXppY7QDnUZW5bZL5+SEI2J7GBpwh4LIupOKqbNSQXgqmrEJopHVNQ=="
+ },
"left-pad": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz",
@@ -10415,6 +10876,64 @@
"object-visit": "^1.0.0"
}
},
+ "mapbox-gl": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-1.10.1.tgz",
+ "integrity": "sha512-0aHt+lFUpYfvh0kMIqXqNXqoYMuhuAsMlw87TbhWrw78Tx2zfuPI0Lx31/YPUgJ+Ire0tzQ4JnuBL7acDNXmMg==",
+ "requires": {
+ "@mapbox/geojson-rewind": "^0.5.0",
+ "@mapbox/geojson-types": "^1.0.2",
+ "@mapbox/jsonlint-lines-primitives": "^2.0.2",
+ "@mapbox/mapbox-gl-supported": "^1.5.0",
+ "@mapbox/point-geometry": "^0.1.0",
+ "@mapbox/tiny-sdf": "^1.1.1",
+ "@mapbox/unitbezier": "^0.0.0",
+ "@mapbox/vector-tile": "^1.3.1",
+ "@mapbox/whoots-js": "^3.1.0",
+ "csscolorparser": "~1.0.3",
+ "earcut": "^2.2.2",
+ "geojson-vt": "^3.2.1",
+ "gl-matrix": "^3.2.1",
+ "grid-index": "^1.1.0",
+ "minimist": "^1.2.5",
+ "murmurhash-js": "^1.0.0",
+ "pbf": "^3.2.1",
+ "potpack": "^1.0.1",
+ "quickselect": "^2.0.0",
+ "rw": "^1.3.3",
+ "supercluster": "^7.0.0",
+ "tinyqueue": "^2.0.3",
+ "vt-pbf": "^3.1.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+ }
+ }
+ },
+ "mapbox-gl-leaflet": {
+ "version": "0.0.12",
+ "resolved": "https://registry.npmjs.org/mapbox-gl-leaflet/-/mapbox-gl-leaflet-0.0.12.tgz",
+ "integrity": "sha512-bfGl+CdAYc51ua8s9OOq5J0EcAnHuxS0OoQP5EWsVmSUGFvKkgOD+Od2sFmDOl+zBUjdBEvqLaf9t/tf2BtrWw=="
+ },
+ "martinez-polygon-clipping": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/martinez-polygon-clipping/-/martinez-polygon-clipping-0.4.3.tgz",
+ "integrity": "sha512-3ZNS0ksKhWTLsmCUkNf+/UimndZ5U2cVOS0I+IjiwF+M23E77TmeOZSmbRJbfCoQUog/vcQ42s3DXrhgOhgPqw==",
+ "requires": {
+ "splaytree": "^0.1.4",
+ "tinyqueue": "^1.2.0"
+ },
+ "dependencies": {
+ "tinyqueue": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-1.2.3.tgz",
+ "integrity": "sha512-Qz9RgWuO9l8lT+Y9xvbzhPT2efIUIFd69N7eF7tJ9lnQl0iLj1M7peK7IoUGZL9DJHw9XftqLreccfxcQgYLxA=="
+ }
+ }
+ },
"material-components-web": {
"version": "0.38.1",
"resolved": "https://registry.npmjs.org/material-components-web/-/material-components-web-0.38.1.tgz",
@@ -10859,6 +11378,11 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
+ "murmurhash-js": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz",
+ "integrity": "sha1-sGJ44h/Gw3+lMTcysEEry2rhX1E="
+ },
"mutation-observer": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/mutation-observer/-/mutation-observer-1.0.3.tgz",
@@ -11346,8 +11870,7 @@
"object-inspect": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
- "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
- "dev": true
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw=="
},
"object-is": {
"version": "1.0.1",
@@ -11358,8 +11881,7 @@
"object-keys": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "dev": true
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
},
"object-visit": {
"version": "1.0.1",
@@ -11374,7 +11896,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
"integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
- "dev": true,
"requires": {
"define-properties": "^1.1.2",
"function-bind": "^1.1.1",
@@ -11760,6 +12281,15 @@
"pify": "^3.0.0"
}
},
+ "pbf": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz",
+ "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==",
+ "requires": {
+ "ieee754": "^1.1.12",
+ "resolve-protobuf-schema": "^2.1.0"
+ }
+ },
"pbkdf2": {
"version": "3.0.17",
"resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
@@ -12301,6 +12831,11 @@
"uniqs": "^2.0.0"
}
},
+ "potpack": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.1.tgz",
+ "integrity": "sha512-15vItUAbViaYrmaB/Pbw7z6qX2xENbFSTA7Ii4tgbPtasxm5v6ryKhKtL91tpWovDJzTiZqdwzhcFBCwiMVdVw=="
+ },
"prelude-ls": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
@@ -12413,6 +12948,11 @@
"hammerjs": "^2.0.8"
}
},
+ "protocol-buffers-schema": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.4.0.tgz",
+ "integrity": "sha512-G/2kcamPF2S49W5yaMGdIpkG6+5wZF0fzBteLKgEHjbNzqjZQ85aAs1iJGto31EJaSTkNvHs5IXuHSaTLWBAiA=="
+ },
"prr": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
@@ -12524,6 +13064,11 @@
"integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
"dev": true
},
+ "quickselect": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz",
+ "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw=="
+ },
"raf": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
@@ -12749,6 +13294,43 @@
"react-lifecycles-compat": "^3.0.4"
}
},
+ "react-virtualized": {
+ "version": "9.21.2",
+ "resolved": "https://registry.npmjs.org/react-virtualized/-/react-virtualized-9.21.2.tgz",
+ "integrity": "sha512-oX7I7KYiUM7lVXQzmhtF4Xg/4UA5duSA+/ZcAvdWlTLFCoFYq1SbauJT5gZK9cZS/wdYR6TPGpX/dqzvTqQeBA==",
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "clsx": "^1.0.1",
+ "dom-helpers": "^5.0.0",
+ "loose-envify": "^1.3.0",
+ "prop-types": "^15.6.0",
+ "react-lifecycles-compat": "^3.0.4"
+ },
+ "dependencies": {
+ "@babel/runtime": {
+ "version": "7.10.2",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.2.tgz",
+ "integrity": "sha512-6sF3uQw2ivImfVIl62RZ7MXhO2tap69WeWK57vAaimT6AZbE4FbqjdEJIN1UqoD6wI6B+1n9UiagafH1sxjOtg==",
+ "requires": {
+ "regenerator-runtime": "^0.13.4"
+ }
+ },
+ "dom-helpers": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.1.4.tgz",
+ "integrity": "sha512-TjMyeVUvNEnOnhzs6uAn9Ya47GmMo3qq7m+Lr/3ON0Rs5kHvb8I+SQYjLUSYn7qhEm0QjW0yrBkvz9yOrwwz1A==",
+ "requires": {
+ "@babel/runtime": "^7.8.7",
+ "csstype": "^2.6.7"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.13.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
+ "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
+ }
+ }
+ },
"read-pkg": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
@@ -12774,7 +13356,6 @@
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
"integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
- "dev": true,
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
@@ -12972,6 +13553,73 @@
"safe-regex": "^1.1.0"
}
},
+ "regexp.prototype.flags": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz",
+ "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
+ },
+ "is-callable": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
+ "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
+ },
+ "is-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
+ "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "string.prototype.trimleft": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
+ "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimstart": "^1.0.0"
+ }
+ },
+ "string.prototype.trimright": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
+ "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimend": "^1.0.0"
+ }
+ }
+ }
+ },
"regexpu-core": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz",
@@ -13252,6 +13900,14 @@
}
}
},
+ "resolve-protobuf-schema": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz",
+ "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==",
+ "requires": {
+ "protocol-buffers-schema": "^3.3.1"
+ }
+ },
"resolve-url": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
@@ -14285,6 +14941,73 @@
"integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
"dev": true
},
+ "side-channel": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz",
+ "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==",
+ "requires": {
+ "es-abstract": "^1.17.0-next.1",
+ "object-inspect": "^1.7.0"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
+ },
+ "is-callable": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
+ "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
+ },
+ "is-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
+ "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "string.prototype.trimleft": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
+ "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimstart": "^1.0.0"
+ }
+ },
+ "string.prototype.trimright": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
+ "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimend": "^1.0.0"
+ }
+ }
+ }
+ },
"signal-exit": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
@@ -14515,6 +15238,11 @@
"integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
"dev": true
},
+ "splaytree": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-0.1.4.tgz",
+ "integrity": "sha512-D50hKrjZgBzqD3FT2Ek53f2dcDLAQT8SSGrzj3vidNH5ISRgceeGVJ2dQIthKOuayqFXfFjXheHNo4bbt9LhRQ=="
+ },
"split-string": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
@@ -14792,6 +15520,73 @@
"function-bind": "^1.1.1"
}
},
+ "string.prototype.trimend": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
+ "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
+ },
+ "is-callable": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
+ "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
+ },
+ "is-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
+ "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "string.prototype.trimleft": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
+ "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimstart": "^1.0.0"
+ }
+ },
+ "string.prototype.trimright": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
+ "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimend": "^1.0.0"
+ }
+ }
+ }
+ },
"string.prototype.trimleft": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz",
@@ -14812,11 +15607,77 @@
"function-bind": "^1.1.1"
}
},
+ "string.prototype.trimstart": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
+ "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
+ },
+ "is-callable": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
+ "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
+ },
+ "is-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
+ "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "string.prototype.trimleft": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
+ "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimstart": "^1.0.0"
+ }
+ },
+ "string.prototype.trimright": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
+ "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimend": "^1.0.0"
+ }
+ }
+ }
+ },
"string_decoder": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
"requires": {
"safe-buffer": "~5.2.0"
},
@@ -14824,8 +15685,7 @@
"safe-buffer": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
- "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
- "dev": true
+ "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
}
}
},
@@ -14875,6 +15735,14 @@
"schema-utils": "^0.4.5"
}
},
+ "supercluster": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.0.tgz",
+ "integrity": "sha512-LDasImUAFMhTqhK+cUXfy9C2KTUqJ3gucLjmNLNFmKWOnDUBxLFLH9oKuXOTCLveecmxh8fbk8kgh6Q0gsfe2w==",
+ "requires": {
+ "kdbush": "^3.0.0"
+ }
+ },
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -15140,6 +16008,11 @@
"setimmediate": "^1.0.4"
}
},
+ "tinyqueue": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz",
+ "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA=="
+ },
"tmpl": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
@@ -15313,8 +16186,7 @@
"typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
- "dev": true
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
},
"ua-parser-js": {
"version": "0.7.20",
@@ -15591,8 +16463,7 @@
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"util.promisify": {
"version": "1.0.0",
@@ -15673,6 +16544,16 @@
"integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
"dev": true
},
+ "vt-pbf": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.1.tgz",
+ "integrity": "sha512-pHjWdrIoxurpmTcbfBWXaPwSmtPAHS105253P1qyEfSTV2HJddqjM+kIHquaT/L6lVJIk9ltTGc0IxR/G47hYA==",
+ "requires": {
+ "@mapbox/point-geometry": "0.1.0",
+ "@mapbox/vector-tile": "^1.3.1",
+ "pbf": "^3.0.5"
+ }
+ },
"w3c-hr-time": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz",
@@ -16157,12 +17038,106 @@
"isexe": "^2.0.0"
}
},
+ "which-boxed-primitive": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.1.tgz",
+ "integrity": "sha512-7BT4TwISdDGBgaemWU0N0OU7FeAEJ9Oo2P1PHRm/FCWoEi2VLWC9b6xvxAA3C/NMpxg3HXVgi0sMmGbNUbNepQ==",
+ "requires": {
+ "is-bigint": "^1.0.0",
+ "is-boolean-object": "^1.0.0",
+ "is-number-object": "^1.0.3",
+ "is-string": "^1.0.4",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "which-collection": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz",
+ "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==",
+ "requires": {
+ "is-map": "^2.0.1",
+ "is-set": "^2.0.1",
+ "is-weakmap": "^2.0.1",
+ "is-weakset": "^2.0.1"
+ }
+ },
"which-module": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
"integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
"dev": true
},
+ "which-typed-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.2.tgz",
+ "integrity": "sha512-KT6okrd1tE6JdZAy3o2VhMoYPh3+J6EMZLyrxBQsZflI1QCZIxMrIYLkosd8Twf+YfknVIHmYQPgJt238p8dnQ==",
+ "requires": {
+ "available-typed-arrays": "^1.0.2",
+ "es-abstract": "^1.17.5",
+ "foreach": "^2.0.5",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.1",
+ "is-typed-array": "^1.1.3"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
+ },
+ "is-callable": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
+ "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
+ },
+ "is-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
+ "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "string.prototype.trimleft": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
+ "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimstart": "^1.0.0"
+ }
+ },
+ "string.prototype.trimright": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
+ "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimend": "^1.0.0"
+ }
+ }
+ }
+ },
"wide-align": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
diff --git a/js-apps/meep-frontend/package.json b/js-apps/meep-frontend/package.json
index d6a69634988ec51e8daa5314aa5da5fb97c7517d..b725602834daa117cf2d6be5600e0801ec860cac 100644
--- a/js-apps/meep-frontend/package.json
+++ b/js-apps/meep-frontend/package.json
@@ -38,6 +38,7 @@
"webpack-serve": "^0.3.1"
},
"dependencies": {
+ "@geoman-io/leaflet-geoman-free": "2.5.0",
"@material-ui/core": "^1.5.1",
"@material-ui/icons": "^1.1.1",
"axios": "^0.18.0",
@@ -45,8 +46,12 @@
"d3": "^5.9.7",
"d3-force": "^2.0.1",
"d3-hierarchy": "^1.1.8",
+ "deep-equal": "2.0.3",
"jquery": "3.3.1",
+ "leaflet": "1.6.0",
"lodash": "^4.17.11",
+ "mapbox-gl": "1.10.1",
+ "mapbox-gl-leaflet": "0.0.12",
"material-components-web": "0.38.1",
"material-design-icons": "3.0.1",
"prop-types": "15.6.2",
@@ -58,6 +63,7 @@
"react-redux": "^5.1.1",
"react-split-pane": "^0.1.87",
"react-tooltip": "^3.10.0",
+ "react-virtualized": "^9.21.2",
"redux": "^4.0.1",
"redux-thunk": "^2.3.0",
"reselect": "^4.0.0",
diff --git a/js-apps/meep-frontend/src/js/components/dialogs/id-delete-sandbox-dialog.js b/js-apps/meep-frontend/src/js/components/dialogs/id-delete-sandbox-dialog.js
new file mode 100644
index 0000000000000000000000000000000000000000..96031df9a47422e7020a8398730ed3f049b98aed
--- /dev/null
+++ b/js-apps/meep-frontend/src/js/components/dialogs/id-delete-sandbox-dialog.js
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2019 InterDigital Communications, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React, { Component } from 'react';
+
+import IDDialog from './id-dialog';
+import { MEEP_DLG_DELETE_SANDBOX } from '../../meep-constants';
+
+class IDDeleteSandboxDialog extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {};
+ }
+
+ render() {
+ return (
+