Loading examples/demo4-ue/src/demo-server/backend/build.sh +3 −1 Original line number Diff line number Diff line Loading @@ -20,4 +20,6 @@ cd $BASEDIR #find . -name "*.go" -type f -exec golangci-lint run {} \; go build -o $BINDIR/demo-server . cp -Rp ./api $BINDIR cp -Rp ./api/ $BINDIR mv $BINDIR/api/swagger.yaml $BINDIR/api/MEC\ Demo\ 4\ API cp $BINDIR/api/* $BINDIR/user-api No newline at end of file examples/demo4-ue/src/demo-server/backend/go.mod +0 −4 Original line number Diff line number Diff line Loading @@ -9,11 +9,9 @@ require ( 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-metrics 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-ctrl-client v0.0.0-20211214133749-f203f7ab4f1c github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-service-mgmt-client v0.0.0-20211214133749-f203f7ab4f1c github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-swagger-api-mgr v0.0.0 github.com/google/uuid v1.1.2 github.com/gorilla/handlers v1.5.1 github.com/gorilla/mux v1.8.0 Loading @@ -27,9 +25,7 @@ replace ( 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-metrics => ../../../../../go-packages/meep-metrics 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-ctrl-client => ../../../../../go-packages/meep-sandbox-ctrl-client github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-service-mgmt-client => ../../../../../go-packages/meep-service-mgmt-client github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-swagger-api-mgr => ../../../../../go-packages/meep-swagger-api-mgr ) examples/demo4-ue/src/demo-server/backend/main.go +1 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,7 @@ func main() { if err != nil { log.Fatal("Failed to initalize Demo 4 ", err) } log.Info("main: server.Init done") // Channel sync pass channel listen for app termination server.Run(done) Loading examples/demo4-ue/src/demo-server/backend/server/demo4_service.go +78 −132 Original line number Diff line number Diff line Loading @@ -16,27 +16,22 @@ package server import ( //"bytes" "context" "encoding/json" "errors" "fmt" "net/http" //"net/url" "os" "strconv" "strings" "sync" //"time" "github.com/AdvantEDGE/examples/demo4-ue/src/demo-server/backend/util" asc "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-app-support-client" dai "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-dai-client" log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger" mq "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq" sbx "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-sandbox-ctrl-client" smc "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-service-mgmt-client" sam "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-swagger-api-mgr" uuid "github.com/google/uuid" //"github.com/gorilla/mux" ) Loading Loading @@ -67,19 +62,9 @@ var daiServiceName string var svcSubscriptionSent bool var appTerminationSent bool var serviceRegistered bool var amsSubscriptionSent bool var amsServiceCreated bool var terminated bool var terminateNotification bool var appEnablementEnabled bool // mq var mqLocal *mq.MsgQueue var handlerId int var redisAddr string = "meep-redis-master.default.svc.cluster.local:6379" // Swagger var apiMgr *sam.SwaggerApiMgr var appEnabled bool // Config fields var mecUrl string Loading @@ -87,6 +72,7 @@ var localPort string var localUrl string var environment string var callBackUrl string var nodeName string // App service & discovered service var mecServicesMap = make(map[string]string) Loading @@ -102,7 +88,7 @@ const defaultConsumedLocalOnly = true // Demo models var demoAppInfo ApplicationInstance var appActivityLogs []string var appActivityLogs []string = []string{} var subscriptions ApplicationInstanceSubscriptions var appEnablementServiceId string var amsSubscriptionId string Loading @@ -127,20 +113,17 @@ func Init(envPath string, envName string) (port string, err error) { } log.Info("Config.Mode: ", config.Mode) log.Info("Config.SandboxUrl: ", config.SandboxUrl) log.Info("Config.NodeName: ", config.NodeName) log.Info("Config.HttpsOnly: ", config.HttpsOnly) log.Info("Config.MecPlatform: ", config.MecPlatform) log.Info("Config.SandboxName: ", config.SandboxName) log.Info("Config.AppInstanceId: ", config.AppInstanceId) log.Info("Config.Localurl: ", config.Localurl) log.Info("Config.Port: ", config.Port) log.Info("Config.ExternalPort: ", config.ExternalPort) log.Info("Config.AppName: ", config.AppName) log.Info("Config.NodeName: ", config.NodeName) config.NodeName = "10.10.20.01" // FIXME Not loaded by config // Retrieve environment // Sandbox config is set by user // AdvantEDGE config is set by env. variable in scenario description // AdvantEDGE config is set by default if config.Mode == "sandbox" { environment = "sandbox" // mecUrl is url of the sandbox system Loading @@ -165,7 +148,6 @@ func Init(envPath string, envName string) (port string, err error) { localPort = config.Port localUrl = config.Localurl } else if config.Mode == "advantedge" { environment = "advantedge" localPort = config.Port Loading @@ -174,7 +156,7 @@ func Init(envPath string, envName string) (port string, err error) { log.Fatal("Missing field for mode, should be set to advantedge or sandbox") } // Retrieve mec demo4 url & port // Retrieve mec demo3 url & port if !strings.HasPrefix(localPort, ":") { localPort = ":" + localPort } Loading @@ -185,38 +167,49 @@ func Init(envPath string, envName string) (port string, err error) { localUrl = strings.TrimSuffix(localUrl, "/") } // Retrieve UE application instance // Retrieve UE application instance/node name instanceName = config.AppInstanceId mep = config.NodeName log.Info("Init: environment= ", environment, "/localPort= ", localPort, "/localUrl= ", localUrl) log.Info("Init: mep= ", mep, "/instanceName= ", instanceName) //instanceName = uuid.New().String() nodeName = config.NodeName log.Info("Init: environment= ", environment, "- localPort= ", localPort, "- localUrl= ", localUrl) log.Info("Init: nodeName= ", nodeName, " - instanceName= ", instanceName) log.Info("Init: mecUrl= ", mecUrl, "- mep= ", mep) // Prepend url & mapped port into callbackurl callBackUrl = localUrl + config.ExternalPort callBackUrl = localUrl + localPort log.Info("callBackUrl: ", callBackUrl) // Register UE application into sandbox controller // If demo4-ue starts on advantedge then get resource node name from sbx controller if environment == "advantedge" { sandBoxClientCfg := sbx.NewConfiguration() sandBoxClientCfg.BasePath = sbxCtrlUrl + "/sandbox-ctrl/v1" log.Info("Init: sandBoxClientCfg= ", sandBoxClientCfg) sandBoxClient = sbx.NewAPIClient(sandBoxClientCfg) var appInfo = sbx.ApplicationInfo{instanceName, config.AppName, mep, "USER", false} appInfo, err = setApplicationInfo(appInfo) if sandBoxClient == nil { return "", errors.New("Failed to create Sandbox Controller REST API client") } appInfo, err := getApplicationInfo(instanceName) if err != nil { log.Fatal("Failed to set UE application resource ", appInfo) return "", errors.New("Failed to retrieve mec application resource") } mep = appInfo.NodeName log.Info("Init: mep: ", mep) } // Setup application support client & service management client appSupportClientCfg := asc.NewConfiguration() srvMgmtClientCfg := smc.NewConfiguration() if environment == "advantedge" { appSupportClientCfg.BasePath = localUrl + "/" + config.SandboxUrl + "/mec_app_support/v1" srvMgmtClientCfg.BasePath = localUrl + "/" + config.SandboxUrl + "/mec_service_mgmt/v1" if config.MecPlatform != "" { appSupportClientCfg.BasePath = "http://" + mep + "-meep-app-enablement" + "/mec_app_support/v1" srvMgmtClientCfg.BasePath = "http://" + mep + "-meep-app-enablement" + "/mec_service_mgmt/v1" } else { appSupportClientCfg.BasePath = "http://meep-app-enablement/mec_app_support/v1" srvMgmtClientCfg.BasePath = "http://meep-app-enablement/mec_service_mgmt/v1" } } else { appSupportClientCfg.BasePath = mecUrl + "/mec_app_support/v1" srvMgmtClientCfg.BasePath = mecUrl + "/mec_service_mgmt/v1" } log.Info("Init: appSupportClientCfg: ", appSupportClientCfg) // Create app enablement client appSupportClient = asc.NewAPIClient(appSupportClientCfg) Loading @@ -224,32 +217,12 @@ func Init(envPath string, envName string) (port string, err error) { if appSupportClient == nil { return "", errors.New("Failed to create App Enablement App Support REST API client") } log.Info("appSupportClient: ", appSupportClient, "/appSupportClientPath: ", appSupportClientPath) // Create service management client srvMgmtClient = smc.NewAPIClient(srvMgmtClientCfg) srvMgmtClientPath = srvMgmtClientCfg.BasePath if srvMgmtClient == nil { return "", errors.New("Failed to create App Enablement Service Management REST API client") } log.Info("srvMgmtClient: ", srvMgmtClient, "/srvMgmtClientPath: ", srvMgmtClientPath) // Create message queue mqLocal, err = mq.NewMsgQueue(mq.GetLocalName(config.SandboxUrl), moduleName, config.SandboxUrl, redisAddr) if err != nil { log.Error("Failed to create Message Queue with error: ", err) return "", err } log.Info("Message Queue created") // Create Swagger API Manager os.Setenv("MEEP_HOST_URL", callBackUrl) os.Setenv("MEEP_SVC_PATH", "/"+moduleName) apiMgr, err = sam.NewSwaggerApiMgr_1(moduleName, mepName, mqLocal, callBackUrl, "/"+moduleName) if err != nil { log.Error("Failed to create Swagger API Manager. Error: ", err) return "", err } log.Info("Swagger API Manager created") // Initialize demo4 app info demoAppInfo.Config = envName Loading @@ -262,54 +235,60 @@ func Init(envPath string, envName string) (port string, err error) { return localPort, nil } func setApplicationInfo(appInfo sbx.ApplicationInfo) (appInfoRes sbx.ApplicationInfo, err error) { log.Info(">>> setApplicationInfo: ", appInfo) appInfoRes, resp, err := sandBoxClient.ApplicationsApi.ApplicationsPOST(context.TODO(), appInfo) // func setApplicationInfo(appInfo sbx.ApplicationInfo) (appInfoRes sbx.ApplicationInfo, err error) { // log.Info(">>> setApplicationInfo: ", appInfo) // appInfoRes, resp, err := sandBoxClient.ApplicationsApi.ApplicationsPOST(context.TODO(), appInfo) // if err != nil { // log.Error(err.Error()) // return appInfoRes, err // } // log.Debug("setApplicationInfo: Receive confirmation acknowlegement ", resp.Status) // return appInfoRes, nil // } func getApplicationInfo(appId string) (appInfo sbx.ApplicationInfo, err error) { log.Info(">>> getApplicationInfo: ", appId) appInfo, resp, err := sandBoxClient.ApplicationsApi.ApplicationsAppInstanceIdGET(context.TODO(), appId) if err != nil { log.Error(err.Error()) return appInfoRes, err log.Info("Failed to retrieve mec application resource ", err) return appInfo, err } log.Debug("setApplicationInfo: Receive confirmation acknowlegement ", resp.Status) log.Debug("getApplicationInfo: Receive confirmation acknowlegement ", resp.Status) log.Debug("getApplicationInfo: appInfo: ", appInfo) return appInfoRes, nil return appInfo, nil } // func getAllApplicationInfo() (appInfo []sbx.ApplicationInfo, err error) { // log.Info(">>> getAllApplicationInfo") // appInfo, resp, err := sandBoxClient.ApplicationsApi.ApplicationsGET(context.TODO(), nil) // if err != nil { // log.Info("Failed to retrieve mec application resource ", err) // return appInfo, err // } // log.Debug("getAllApplicationInfo: Receive confirmation acknowlegement ", resp.Status) // log.Debug("getAllApplicationInfo: appInfo: ", appInfo) // return appInfo, nil // } func demo4Register() (err error) { log.Info(">>> demo4Register: ", appEnablementEnabled) log.Info(">>> demo4Register: ", appEnabled) mutex.Lock() defer mutex.Unlock() // Start Swagger API Manager (provider) err = apiMgr.Start(true, false) if err != nil { log.Error("Failed to start Swagger API Manager with error: ", err.Error()) return err } log.Info("Swagger API Manager started") // Add module Swagger APIs err = apiMgr.AddApis() if err != nil { log.Error("Failed to add Swagger APIs with error: ", err.Error()) return err } log.Info("Swagger APIs successfully added") // Register Message Queue handler handler := mq.MsgHandler{Handler: msgHandler, UserData: nil} handlerId, err = mqLocal.RegisterHandler(handler) // Start app registeration if !appEnablementEnabled { if !appEnabled { // If app is restarted, clean app activity, AMS terminal devices, discovered services // If app is restarted, clean app activity, discovered services appActivityLogs = []string{} //terminalDevices = make(map[string]string) demoAppInfo.DiscoveredServices = []ApplicationInstanceDiscoveredServices{} // Send confirm ready err := sendReadyConfirmation(instanceName) err = sendReadyConfirmation(instanceName) if err != nil { // Add to activity log for error indicator appActivityLogs = append(appActivityLogs, "=== Register Demo4 MEC Application [501]") Loading Loading @@ -406,8 +385,8 @@ func demo4Register() (err error) { appActivityLogs = append(appActivityLogs, "daiClient instance created") demoAppInfo.Subscriptions = &subscriptions appEnablementEnabled = true //startTicker() appEnabled = true } return nil Loading @@ -415,27 +394,14 @@ func demo4Register() (err error) { // Channel sync consume channel listen for app termination func Run(msg chan bool) { log.Info(">>> run") log.Info(">>> run: ", appEnabled) err := demo4Register() if err != nil { log.Fatal(err.Error()) } done = msg log.Fatal("Failed to register demo4-ue: ", 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)) case mq.MsgScenarioUpdate: log.Debug("RX MSG: ", mq.PrintMsg(msg)) case mq.MsgScenarioTerminate: log.Debug("RX MSG: ", mq.PrintMsg(msg)) default: log.Trace("Ignoring unsupported message: ", mq.PrintMsg(msg)) } done = msg } // Terminate by deleting all resources allocated on MEC platform & mec app Loading @@ -443,10 +409,9 @@ func Terminate() { log.Info(">>> Terminate: ", terminated) // Only invoke graceful termination if not terminated (triggerd by mec platform) if !terminated { if appEnablementEnabled { if appEnabled { //intervalTicker.Stop() log.Info("De-register Demo4 MEC Application") appActivityLogs = append(appActivityLogs, "=== De-register Demo4 MEC Application [200]") Loading Loading @@ -508,25 +473,6 @@ func Terminate() { } if mqLocal != nil { mqLocal.UnregisterHandler(handlerId) } if apiMgr != nil { // Remove APIs err := apiMgr.RemoveApis() if err != nil { log.Error("Failed to remove APIs with err: ", err.Error()) } } } // RESP API delete application by deleting all resources func demo4Deregister(w http.ResponseWriter, r *http.Request) { Terminate() appEnablementEnabled = false w.WriteHeader(http.StatusOK) } // REST API handle service subscription callback notification Loading examples/demo4-ue/src/demo-server/backend/util/config.go +2 −3 Original line number Diff line number Diff line Loading @@ -7,15 +7,14 @@ import ( type Config struct { Mode string `mapstructure:"mode"` SandboxUrl string `mapstructure:"sandbox"` SandboxName string `mapstructure:"sandboxname"` NodeName string `mapstructure:"nodename"` HttpsOnly bool `mapstructure:"https"` MecPlatform string `mapstructure:"mecplatform"` SandboxName string `mapstructure:"sandboxname"` AppInstanceId string `mapstructure:"appid"` Localurl string `mapstructure:"localurl"` Port string `mapstructure:"port"` ExternalPort string `mapstructure:"externalport"` AppName string `mapstructure:"appname"` NodeName string `mapstructure:"nodename"` } func LoadConfig(path string, name string) (config Config, err error) { Loading Loading
examples/demo4-ue/src/demo-server/backend/build.sh +3 −1 Original line number Diff line number Diff line Loading @@ -20,4 +20,6 @@ cd $BASEDIR #find . -name "*.go" -type f -exec golangci-lint run {} \; go build -o $BINDIR/demo-server . cp -Rp ./api $BINDIR cp -Rp ./api/ $BINDIR mv $BINDIR/api/swagger.yaml $BINDIR/api/MEC\ Demo\ 4\ API cp $BINDIR/api/* $BINDIR/user-api No newline at end of file
examples/demo4-ue/src/demo-server/backend/go.mod +0 −4 Original line number Diff line number Diff line Loading @@ -9,11 +9,9 @@ require ( 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-metrics 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-ctrl-client v0.0.0-20211214133749-f203f7ab4f1c github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-service-mgmt-client v0.0.0-20211214133749-f203f7ab4f1c github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-swagger-api-mgr v0.0.0 github.com/google/uuid v1.1.2 github.com/gorilla/handlers v1.5.1 github.com/gorilla/mux v1.8.0 Loading @@ -27,9 +25,7 @@ replace ( 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-metrics => ../../../../../go-packages/meep-metrics 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-ctrl-client => ../../../../../go-packages/meep-sandbox-ctrl-client github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-service-mgmt-client => ../../../../../go-packages/meep-service-mgmt-client github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-swagger-api-mgr => ../../../../../go-packages/meep-swagger-api-mgr )
examples/demo4-ue/src/demo-server/backend/main.go +1 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,7 @@ func main() { if err != nil { log.Fatal("Failed to initalize Demo 4 ", err) } log.Info("main: server.Init done") // Channel sync pass channel listen for app termination server.Run(done) Loading
examples/demo4-ue/src/demo-server/backend/server/demo4_service.go +78 −132 Original line number Diff line number Diff line Loading @@ -16,27 +16,22 @@ package server import ( //"bytes" "context" "encoding/json" "errors" "fmt" "net/http" //"net/url" "os" "strconv" "strings" "sync" //"time" "github.com/AdvantEDGE/examples/demo4-ue/src/demo-server/backend/util" asc "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-app-support-client" dai "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-dai-client" log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger" mq "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq" sbx "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-sandbox-ctrl-client" smc "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-service-mgmt-client" sam "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-swagger-api-mgr" uuid "github.com/google/uuid" //"github.com/gorilla/mux" ) Loading Loading @@ -67,19 +62,9 @@ var daiServiceName string var svcSubscriptionSent bool var appTerminationSent bool var serviceRegistered bool var amsSubscriptionSent bool var amsServiceCreated bool var terminated bool var terminateNotification bool var appEnablementEnabled bool // mq var mqLocal *mq.MsgQueue var handlerId int var redisAddr string = "meep-redis-master.default.svc.cluster.local:6379" // Swagger var apiMgr *sam.SwaggerApiMgr var appEnabled bool // Config fields var mecUrl string Loading @@ -87,6 +72,7 @@ var localPort string var localUrl string var environment string var callBackUrl string var nodeName string // App service & discovered service var mecServicesMap = make(map[string]string) Loading @@ -102,7 +88,7 @@ const defaultConsumedLocalOnly = true // Demo models var demoAppInfo ApplicationInstance var appActivityLogs []string var appActivityLogs []string = []string{} var subscriptions ApplicationInstanceSubscriptions var appEnablementServiceId string var amsSubscriptionId string Loading @@ -127,20 +113,17 @@ func Init(envPath string, envName string) (port string, err error) { } log.Info("Config.Mode: ", config.Mode) log.Info("Config.SandboxUrl: ", config.SandboxUrl) log.Info("Config.NodeName: ", config.NodeName) log.Info("Config.HttpsOnly: ", config.HttpsOnly) log.Info("Config.MecPlatform: ", config.MecPlatform) log.Info("Config.SandboxName: ", config.SandboxName) log.Info("Config.AppInstanceId: ", config.AppInstanceId) log.Info("Config.Localurl: ", config.Localurl) log.Info("Config.Port: ", config.Port) log.Info("Config.ExternalPort: ", config.ExternalPort) log.Info("Config.AppName: ", config.AppName) log.Info("Config.NodeName: ", config.NodeName) config.NodeName = "10.10.20.01" // FIXME Not loaded by config // Retrieve environment // Sandbox config is set by user // AdvantEDGE config is set by env. variable in scenario description // AdvantEDGE config is set by default if config.Mode == "sandbox" { environment = "sandbox" // mecUrl is url of the sandbox system Loading @@ -165,7 +148,6 @@ func Init(envPath string, envName string) (port string, err error) { localPort = config.Port localUrl = config.Localurl } else if config.Mode == "advantedge" { environment = "advantedge" localPort = config.Port Loading @@ -174,7 +156,7 @@ func Init(envPath string, envName string) (port string, err error) { log.Fatal("Missing field for mode, should be set to advantedge or sandbox") } // Retrieve mec demo4 url & port // Retrieve mec demo3 url & port if !strings.HasPrefix(localPort, ":") { localPort = ":" + localPort } Loading @@ -185,38 +167,49 @@ func Init(envPath string, envName string) (port string, err error) { localUrl = strings.TrimSuffix(localUrl, "/") } // Retrieve UE application instance // Retrieve UE application instance/node name instanceName = config.AppInstanceId mep = config.NodeName log.Info("Init: environment= ", environment, "/localPort= ", localPort, "/localUrl= ", localUrl) log.Info("Init: mep= ", mep, "/instanceName= ", instanceName) //instanceName = uuid.New().String() nodeName = config.NodeName log.Info("Init: environment= ", environment, "- localPort= ", localPort, "- localUrl= ", localUrl) log.Info("Init: nodeName= ", nodeName, " - instanceName= ", instanceName) log.Info("Init: mecUrl= ", mecUrl, "- mep= ", mep) // Prepend url & mapped port into callbackurl callBackUrl = localUrl + config.ExternalPort callBackUrl = localUrl + localPort log.Info("callBackUrl: ", callBackUrl) // Register UE application into sandbox controller // If demo4-ue starts on advantedge then get resource node name from sbx controller if environment == "advantedge" { sandBoxClientCfg := sbx.NewConfiguration() sandBoxClientCfg.BasePath = sbxCtrlUrl + "/sandbox-ctrl/v1" log.Info("Init: sandBoxClientCfg= ", sandBoxClientCfg) sandBoxClient = sbx.NewAPIClient(sandBoxClientCfg) var appInfo = sbx.ApplicationInfo{instanceName, config.AppName, mep, "USER", false} appInfo, err = setApplicationInfo(appInfo) if sandBoxClient == nil { return "", errors.New("Failed to create Sandbox Controller REST API client") } appInfo, err := getApplicationInfo(instanceName) if err != nil { log.Fatal("Failed to set UE application resource ", appInfo) return "", errors.New("Failed to retrieve mec application resource") } mep = appInfo.NodeName log.Info("Init: mep: ", mep) } // Setup application support client & service management client appSupportClientCfg := asc.NewConfiguration() srvMgmtClientCfg := smc.NewConfiguration() if environment == "advantedge" { appSupportClientCfg.BasePath = localUrl + "/" + config.SandboxUrl + "/mec_app_support/v1" srvMgmtClientCfg.BasePath = localUrl + "/" + config.SandboxUrl + "/mec_service_mgmt/v1" if config.MecPlatform != "" { appSupportClientCfg.BasePath = "http://" + mep + "-meep-app-enablement" + "/mec_app_support/v1" srvMgmtClientCfg.BasePath = "http://" + mep + "-meep-app-enablement" + "/mec_service_mgmt/v1" } else { appSupportClientCfg.BasePath = "http://meep-app-enablement/mec_app_support/v1" srvMgmtClientCfg.BasePath = "http://meep-app-enablement/mec_service_mgmt/v1" } } else { appSupportClientCfg.BasePath = mecUrl + "/mec_app_support/v1" srvMgmtClientCfg.BasePath = mecUrl + "/mec_service_mgmt/v1" } log.Info("Init: appSupportClientCfg: ", appSupportClientCfg) // Create app enablement client appSupportClient = asc.NewAPIClient(appSupportClientCfg) Loading @@ -224,32 +217,12 @@ func Init(envPath string, envName string) (port string, err error) { if appSupportClient == nil { return "", errors.New("Failed to create App Enablement App Support REST API client") } log.Info("appSupportClient: ", appSupportClient, "/appSupportClientPath: ", appSupportClientPath) // Create service management client srvMgmtClient = smc.NewAPIClient(srvMgmtClientCfg) srvMgmtClientPath = srvMgmtClientCfg.BasePath if srvMgmtClient == nil { return "", errors.New("Failed to create App Enablement Service Management REST API client") } log.Info("srvMgmtClient: ", srvMgmtClient, "/srvMgmtClientPath: ", srvMgmtClientPath) // Create message queue mqLocal, err = mq.NewMsgQueue(mq.GetLocalName(config.SandboxUrl), moduleName, config.SandboxUrl, redisAddr) if err != nil { log.Error("Failed to create Message Queue with error: ", err) return "", err } log.Info("Message Queue created") // Create Swagger API Manager os.Setenv("MEEP_HOST_URL", callBackUrl) os.Setenv("MEEP_SVC_PATH", "/"+moduleName) apiMgr, err = sam.NewSwaggerApiMgr_1(moduleName, mepName, mqLocal, callBackUrl, "/"+moduleName) if err != nil { log.Error("Failed to create Swagger API Manager. Error: ", err) return "", err } log.Info("Swagger API Manager created") // Initialize demo4 app info demoAppInfo.Config = envName Loading @@ -262,54 +235,60 @@ func Init(envPath string, envName string) (port string, err error) { return localPort, nil } func setApplicationInfo(appInfo sbx.ApplicationInfo) (appInfoRes sbx.ApplicationInfo, err error) { log.Info(">>> setApplicationInfo: ", appInfo) appInfoRes, resp, err := sandBoxClient.ApplicationsApi.ApplicationsPOST(context.TODO(), appInfo) // func setApplicationInfo(appInfo sbx.ApplicationInfo) (appInfoRes sbx.ApplicationInfo, err error) { // log.Info(">>> setApplicationInfo: ", appInfo) // appInfoRes, resp, err := sandBoxClient.ApplicationsApi.ApplicationsPOST(context.TODO(), appInfo) // if err != nil { // log.Error(err.Error()) // return appInfoRes, err // } // log.Debug("setApplicationInfo: Receive confirmation acknowlegement ", resp.Status) // return appInfoRes, nil // } func getApplicationInfo(appId string) (appInfo sbx.ApplicationInfo, err error) { log.Info(">>> getApplicationInfo: ", appId) appInfo, resp, err := sandBoxClient.ApplicationsApi.ApplicationsAppInstanceIdGET(context.TODO(), appId) if err != nil { log.Error(err.Error()) return appInfoRes, err log.Info("Failed to retrieve mec application resource ", err) return appInfo, err } log.Debug("setApplicationInfo: Receive confirmation acknowlegement ", resp.Status) log.Debug("getApplicationInfo: Receive confirmation acknowlegement ", resp.Status) log.Debug("getApplicationInfo: appInfo: ", appInfo) return appInfoRes, nil return appInfo, nil } // func getAllApplicationInfo() (appInfo []sbx.ApplicationInfo, err error) { // log.Info(">>> getAllApplicationInfo") // appInfo, resp, err := sandBoxClient.ApplicationsApi.ApplicationsGET(context.TODO(), nil) // if err != nil { // log.Info("Failed to retrieve mec application resource ", err) // return appInfo, err // } // log.Debug("getAllApplicationInfo: Receive confirmation acknowlegement ", resp.Status) // log.Debug("getAllApplicationInfo: appInfo: ", appInfo) // return appInfo, nil // } func demo4Register() (err error) { log.Info(">>> demo4Register: ", appEnablementEnabled) log.Info(">>> demo4Register: ", appEnabled) mutex.Lock() defer mutex.Unlock() // Start Swagger API Manager (provider) err = apiMgr.Start(true, false) if err != nil { log.Error("Failed to start Swagger API Manager with error: ", err.Error()) return err } log.Info("Swagger API Manager started") // Add module Swagger APIs err = apiMgr.AddApis() if err != nil { log.Error("Failed to add Swagger APIs with error: ", err.Error()) return err } log.Info("Swagger APIs successfully added") // Register Message Queue handler handler := mq.MsgHandler{Handler: msgHandler, UserData: nil} handlerId, err = mqLocal.RegisterHandler(handler) // Start app registeration if !appEnablementEnabled { if !appEnabled { // If app is restarted, clean app activity, AMS terminal devices, discovered services // If app is restarted, clean app activity, discovered services appActivityLogs = []string{} //terminalDevices = make(map[string]string) demoAppInfo.DiscoveredServices = []ApplicationInstanceDiscoveredServices{} // Send confirm ready err := sendReadyConfirmation(instanceName) err = sendReadyConfirmation(instanceName) if err != nil { // Add to activity log for error indicator appActivityLogs = append(appActivityLogs, "=== Register Demo4 MEC Application [501]") Loading Loading @@ -406,8 +385,8 @@ func demo4Register() (err error) { appActivityLogs = append(appActivityLogs, "daiClient instance created") demoAppInfo.Subscriptions = &subscriptions appEnablementEnabled = true //startTicker() appEnabled = true } return nil Loading @@ -415,27 +394,14 @@ func demo4Register() (err error) { // Channel sync consume channel listen for app termination func Run(msg chan bool) { log.Info(">>> run") log.Info(">>> run: ", appEnabled) err := demo4Register() if err != nil { log.Fatal(err.Error()) } done = msg log.Fatal("Failed to register demo4-ue: ", 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)) case mq.MsgScenarioUpdate: log.Debug("RX MSG: ", mq.PrintMsg(msg)) case mq.MsgScenarioTerminate: log.Debug("RX MSG: ", mq.PrintMsg(msg)) default: log.Trace("Ignoring unsupported message: ", mq.PrintMsg(msg)) } done = msg } // Terminate by deleting all resources allocated on MEC platform & mec app Loading @@ -443,10 +409,9 @@ func Terminate() { log.Info(">>> Terminate: ", terminated) // Only invoke graceful termination if not terminated (triggerd by mec platform) if !terminated { if appEnablementEnabled { if appEnabled { //intervalTicker.Stop() log.Info("De-register Demo4 MEC Application") appActivityLogs = append(appActivityLogs, "=== De-register Demo4 MEC Application [200]") Loading Loading @@ -508,25 +473,6 @@ func Terminate() { } if mqLocal != nil { mqLocal.UnregisterHandler(handlerId) } if apiMgr != nil { // Remove APIs err := apiMgr.RemoveApis() if err != nil { log.Error("Failed to remove APIs with err: ", err.Error()) } } } // RESP API delete application by deleting all resources func demo4Deregister(w http.ResponseWriter, r *http.Request) { Terminate() appEnablementEnabled = false w.WriteHeader(http.StatusOK) } // REST API handle service subscription callback notification Loading
examples/demo4-ue/src/demo-server/backend/util/config.go +2 −3 Original line number Diff line number Diff line Loading @@ -7,15 +7,14 @@ import ( type Config struct { Mode string `mapstructure:"mode"` SandboxUrl string `mapstructure:"sandbox"` SandboxName string `mapstructure:"sandboxname"` NodeName string `mapstructure:"nodename"` HttpsOnly bool `mapstructure:"https"` MecPlatform string `mapstructure:"mecplatform"` SandboxName string `mapstructure:"sandboxname"` AppInstanceId string `mapstructure:"appid"` Localurl string `mapstructure:"localurl"` Port string `mapstructure:"port"` ExternalPort string `mapstructure:"externalport"` AppName string `mapstructure:"appname"` NodeName string `mapstructure:"nodename"` } func LoadConfig(path string, name string) (config Config, err error) { Loading