Loading go-apps/meep-ctrl-engine/go.mod +8 −1 Original line number Diff line number Diff line Loading @@ -3,7 +3,8 @@ module github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-ctrl-engine go 1.12 require ( github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-virt-engine-client v0.0.0 github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-virt-engine-client v0.0.0 // indirect github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog v0.0.0 github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db // indirect github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351 github.com/flimzy/diff v0.1.5 // indirect Loading Loading @@ -40,3 +41,9 @@ require ( ) replace github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-virt-engine-client => ../../go-packages/meep-virt-engine-client 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 go-apps/meep-ctrl-engine/server/ctrl-engine.go +24 −67 Original line number Diff line number Diff line Loading @@ -16,13 +16,14 @@ import ( "net/http" "sort" "strings" "time" "github.com/flimzy/kivik" _ "github.com/go-kivik/couchdb" "github.com/gorilla/mux" log "github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-ctrl-engine/log" ve "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-virt-engine-client" watchdog "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog" ) const scenarioDBName = "scenarios" Loading @@ -39,9 +40,8 @@ const NOUP = "2" const NB_CORE_PODS = 9 //although virt-engine is not a pod yet... it is considered as one as is appended to the list of pods var virtEngine *ve.APIClient var db *kivik.DB var virtWatchdog *watchdog.Watchdog var clientServiceMapList []ClientServiceMap Loading Loading @@ -292,15 +292,17 @@ func CtrlEngineInit() (err error) { } log.Info("Connected to Active DB") // Create client for Virtualization Engine API veCfg := ve.NewConfiguration() veCfg.BasePath = "http://meep-virt-engine/v1" virtEngine = ve.NewAPIClient(veCfg) if virtEngine == nil { log.Debug("Cannot find the Virtualization Engine API") // Setup for virt-engine monitoring virtWatchdog, err = watchdog.NewWatchdog("", "meep-virt-engine") if err != nil { log.Error("Failed to initialize virt-engine watchdog. Error: ", err) return err } err = virtWatchdog.Start(time.Second, 3*time.Second) if err != nil { log.Error("Failed to start virt-engine watchdog. Error: ", err) return err } log.Info("Created Virt Engine client") return nil } Loading Loading @@ -492,56 +494,28 @@ func ceActivateScenario(w http.ResponseWriter, r *http.Request) { } // Retrieve scenario to activate from DB // !!!!! IMPORTANT NOTE !!!!! // Scenario stored in DB is unmarshalled into a VE Scenario object var veScenario ve.Scenario err = getScenario(false, db, scenarioName, &veScenario) err = getScenario(false, db, scenarioName, &activeScenario) if err != nil { log.Error(err.Error()) http.Error(w, err.Error(), http.StatusNotFound) return } // Populate active external client service map populateClientServiceMap(&activeScenario) // Set active scenario in DB rev, err := addScenario(db, activeScenarioName, veScenario) _, err = addScenario(db, activeScenarioName, activeScenario) if err != nil { log.Error(err.Error()) http.Error(w, err.Error(), http.StatusInternalServerError) return } log.Debug("Active scenario set with rev: ", rev) // Activate scenario in virtualization Engine //lint:ignore SA1012 context.TODO not supported here resp, err := virtEngine.ScenarioDeploymentApi.ActivateScenario(nil, veScenario) if err != nil { log.Error(err.Error()) http.Error(w, err.Error(), http.StatusNotFound) _ = removeScenario(db, activeScenarioName) return } // Retrieve active scenario stored in DB err = getScenario(false, db, activeScenarioName, &activeScenario) if err != nil { log.Error("Scenario not active") http.Error(w, "Scenario not active", http.StatusBadRequest) _ = removeScenario(db, activeScenarioName) return } // Populate active external client service map populateClientServiceMap(&activeScenario) // Return response w.Header().Set("Content-Type", "application/json; charset=UTF-8") if resp != nil { w.WriteHeader(resp.StatusCode) } else { w.WriteHeader(http.StatusOK) } } // ceGetActiveScenario retrieves the deployed scenario status func ceGetActiveScenario(w http.ResponseWriter, r *http.Request) { Loading Loading @@ -589,7 +563,7 @@ func ceGetActiveScenario(w http.ResponseWriter, r *http.Request) { // ceGetActiveClientServiceMaps retrieves the deployed scenario external client service mappings // NOTE: query parameters 'client' and 'service' may be specified to filter results func ceGetActiveClientServiceMaps(w http.ResponseWriter, r *http.Request) { log.Debug("ceGetActiveClientServiceMaps") //log.Debug("ceGetActiveClientServiceMaps") var filteredList *[]ClientServiceMap // Retrieve client ID & service name from query parameters Loading Loading @@ -690,23 +664,14 @@ func ceTerminateScenario(w http.ResponseWriter, r *http.Request) { err = RedisDBPublish(channelCtrlActive, "") if err != nil { log.Error(err.Error()) } // Terminate scenario in virtualization Engine //lint:ignore SA1012 context.TODO not supported here resp, err := virtEngine.ScenarioDeploymentApi.TerminateScenario(nil, scenario.Name) if err != nil { log.Error(err.Error()) http.Error(w, err.Error(), http.StatusNotFound) return } // Send response w.Header().Set("Content-Type", "application/json; charset=UTF-8") if resp != nil { w.WriteHeader(resp.StatusCode) } else { w.WriteHeader(http.StatusOK) } } func ceGetEventList(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json; charset=UTF-8") Loading Loading @@ -1123,16 +1088,8 @@ func ceGetStates(w http.ResponseWriter, r *http.Request) { // ***** virt-engine is not a pod yet, but we need to make sure it is started to have a functional system var podStatus PodStatus podStatus.Name = "virt-engine" //we do not care about the content of the answer, simply that there is one //lint:ignore SA1012 context.TODO not supported here _, resp, _ := virtEngine.ScenarioDeploymentApi.GetActiveScenario(nil, "dummy") if resp != nil { if resp.StatusCode == http.StatusOK { if virtWatchdog.IsAlive() { podStatus.LogicalState = "Running" } else { podStatus.LogicalState = "InternalError" } } else { podStatus.LogicalState = "NotRunning" } Loading go-apps/meep-virt-engine/go.mod +2 −2 Original line number Diff line number Diff line Loading @@ -5,8 +5,8 @@ go 1.12 require ( github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model v0.0.0 github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger v0.0.0 github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-pinger v0.0.0 github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis v0.0.0 github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog v0.0.0 github.com/gorilla/handlers v1.4.0 // indirect github.com/gorilla/mux v1.7.1 // indirect ) Loading @@ -17,4 +17,4 @@ replace github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger => ../../g replace github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis => ../../go-packages/meep-redis replace github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-pinger => ../../go-packages/meep-pinger replace github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog => ../../go-packages/meep-watchdog go-apps/meep-virt-engine/server/virt-engine.go +5 −5 Original line number Diff line number Diff line Loading @@ -16,8 +16,8 @@ import ( "github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-virt-engine/helm" model "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model" log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger" pinger "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-pinger" redis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis" watchdog "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog" ) const moduleCtrlEngine string = "ctrl-engine" Loading @@ -25,7 +25,7 @@ const typeActive string = "active" const channelCtrlActive string = moduleCtrlEngine + "-" + typeActive var activeScenarioName string = "" var ping *pinger.Pingee var watchdogClient *watchdog.Pingee var rc *redis.Connector const activeScenarioEventKey string = moduleCtrlEngine + ":" + typeActive Loading @@ -52,14 +52,14 @@ func VirtEngineInit() (err error) { log.Info("Subscribed to Redis Events") // Setup for liveness monitoring ping, err = pinger.NewPingee(redisAddr, "meep-virt-engine") watchdogClient, err = watchdog.NewPingee(redisAddr, "meep-virt-engine") if err != nil { log.Error("Failed to initialize pigner. Error: ", err) return err } err = ping.Start() err = watchdogClient.Start() if err != nil { log.Error("Failed pinger listen. Error: ", err) log.Error("Failed watchdog client listen. Error: ", err) return err } Loading Loading
go-apps/meep-ctrl-engine/go.mod +8 −1 Original line number Diff line number Diff line Loading @@ -3,7 +3,8 @@ module github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-ctrl-engine go 1.12 require ( github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-virt-engine-client v0.0.0 github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-virt-engine-client v0.0.0 // indirect github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog v0.0.0 github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db // indirect github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351 github.com/flimzy/diff v0.1.5 // indirect Loading Loading @@ -40,3 +41,9 @@ require ( ) replace github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-virt-engine-client => ../../go-packages/meep-virt-engine-client 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
go-apps/meep-ctrl-engine/server/ctrl-engine.go +24 −67 Original line number Diff line number Diff line Loading @@ -16,13 +16,14 @@ import ( "net/http" "sort" "strings" "time" "github.com/flimzy/kivik" _ "github.com/go-kivik/couchdb" "github.com/gorilla/mux" log "github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-ctrl-engine/log" ve "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-virt-engine-client" watchdog "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog" ) const scenarioDBName = "scenarios" Loading @@ -39,9 +40,8 @@ const NOUP = "2" const NB_CORE_PODS = 9 //although virt-engine is not a pod yet... it is considered as one as is appended to the list of pods var virtEngine *ve.APIClient var db *kivik.DB var virtWatchdog *watchdog.Watchdog var clientServiceMapList []ClientServiceMap Loading Loading @@ -292,15 +292,17 @@ func CtrlEngineInit() (err error) { } log.Info("Connected to Active DB") // Create client for Virtualization Engine API veCfg := ve.NewConfiguration() veCfg.BasePath = "http://meep-virt-engine/v1" virtEngine = ve.NewAPIClient(veCfg) if virtEngine == nil { log.Debug("Cannot find the Virtualization Engine API") // Setup for virt-engine monitoring virtWatchdog, err = watchdog.NewWatchdog("", "meep-virt-engine") if err != nil { log.Error("Failed to initialize virt-engine watchdog. Error: ", err) return err } err = virtWatchdog.Start(time.Second, 3*time.Second) if err != nil { log.Error("Failed to start virt-engine watchdog. Error: ", err) return err } log.Info("Created Virt Engine client") return nil } Loading Loading @@ -492,56 +494,28 @@ func ceActivateScenario(w http.ResponseWriter, r *http.Request) { } // Retrieve scenario to activate from DB // !!!!! IMPORTANT NOTE !!!!! // Scenario stored in DB is unmarshalled into a VE Scenario object var veScenario ve.Scenario err = getScenario(false, db, scenarioName, &veScenario) err = getScenario(false, db, scenarioName, &activeScenario) if err != nil { log.Error(err.Error()) http.Error(w, err.Error(), http.StatusNotFound) return } // Populate active external client service map populateClientServiceMap(&activeScenario) // Set active scenario in DB rev, err := addScenario(db, activeScenarioName, veScenario) _, err = addScenario(db, activeScenarioName, activeScenario) if err != nil { log.Error(err.Error()) http.Error(w, err.Error(), http.StatusInternalServerError) return } log.Debug("Active scenario set with rev: ", rev) // Activate scenario in virtualization Engine //lint:ignore SA1012 context.TODO not supported here resp, err := virtEngine.ScenarioDeploymentApi.ActivateScenario(nil, veScenario) if err != nil { log.Error(err.Error()) http.Error(w, err.Error(), http.StatusNotFound) _ = removeScenario(db, activeScenarioName) return } // Retrieve active scenario stored in DB err = getScenario(false, db, activeScenarioName, &activeScenario) if err != nil { log.Error("Scenario not active") http.Error(w, "Scenario not active", http.StatusBadRequest) _ = removeScenario(db, activeScenarioName) return } // Populate active external client service map populateClientServiceMap(&activeScenario) // Return response w.Header().Set("Content-Type", "application/json; charset=UTF-8") if resp != nil { w.WriteHeader(resp.StatusCode) } else { w.WriteHeader(http.StatusOK) } } // ceGetActiveScenario retrieves the deployed scenario status func ceGetActiveScenario(w http.ResponseWriter, r *http.Request) { Loading Loading @@ -589,7 +563,7 @@ func ceGetActiveScenario(w http.ResponseWriter, r *http.Request) { // ceGetActiveClientServiceMaps retrieves the deployed scenario external client service mappings // NOTE: query parameters 'client' and 'service' may be specified to filter results func ceGetActiveClientServiceMaps(w http.ResponseWriter, r *http.Request) { log.Debug("ceGetActiveClientServiceMaps") //log.Debug("ceGetActiveClientServiceMaps") var filteredList *[]ClientServiceMap // Retrieve client ID & service name from query parameters Loading Loading @@ -690,23 +664,14 @@ func ceTerminateScenario(w http.ResponseWriter, r *http.Request) { err = RedisDBPublish(channelCtrlActive, "") if err != nil { log.Error(err.Error()) } // Terminate scenario in virtualization Engine //lint:ignore SA1012 context.TODO not supported here resp, err := virtEngine.ScenarioDeploymentApi.TerminateScenario(nil, scenario.Name) if err != nil { log.Error(err.Error()) http.Error(w, err.Error(), http.StatusNotFound) return } // Send response w.Header().Set("Content-Type", "application/json; charset=UTF-8") if resp != nil { w.WriteHeader(resp.StatusCode) } else { w.WriteHeader(http.StatusOK) } } func ceGetEventList(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json; charset=UTF-8") Loading Loading @@ -1123,16 +1088,8 @@ func ceGetStates(w http.ResponseWriter, r *http.Request) { // ***** virt-engine is not a pod yet, but we need to make sure it is started to have a functional system var podStatus PodStatus podStatus.Name = "virt-engine" //we do not care about the content of the answer, simply that there is one //lint:ignore SA1012 context.TODO not supported here _, resp, _ := virtEngine.ScenarioDeploymentApi.GetActiveScenario(nil, "dummy") if resp != nil { if resp.StatusCode == http.StatusOK { if virtWatchdog.IsAlive() { podStatus.LogicalState = "Running" } else { podStatus.LogicalState = "InternalError" } } else { podStatus.LogicalState = "NotRunning" } Loading
go-apps/meep-virt-engine/go.mod +2 −2 Original line number Diff line number Diff line Loading @@ -5,8 +5,8 @@ go 1.12 require ( github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model v0.0.0 github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger v0.0.0 github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-pinger v0.0.0 github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis v0.0.0 github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog v0.0.0 github.com/gorilla/handlers v1.4.0 // indirect github.com/gorilla/mux v1.7.1 // indirect ) Loading @@ -17,4 +17,4 @@ replace github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger => ../../g replace github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis => ../../go-packages/meep-redis replace github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-pinger => ../../go-packages/meep-pinger replace github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog => ../../go-packages/meep-watchdog
go-apps/meep-virt-engine/server/virt-engine.go +5 −5 Original line number Diff line number Diff line Loading @@ -16,8 +16,8 @@ import ( "github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-virt-engine/helm" model "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model" log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger" pinger "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-pinger" redis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis" watchdog "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-watchdog" ) const moduleCtrlEngine string = "ctrl-engine" Loading @@ -25,7 +25,7 @@ const typeActive string = "active" const channelCtrlActive string = moduleCtrlEngine + "-" + typeActive var activeScenarioName string = "" var ping *pinger.Pingee var watchdogClient *watchdog.Pingee var rc *redis.Connector const activeScenarioEventKey string = moduleCtrlEngine + ":" + typeActive Loading @@ -52,14 +52,14 @@ func VirtEngineInit() (err error) { log.Info("Subscribed to Redis Events") // Setup for liveness monitoring ping, err = pinger.NewPingee(redisAddr, "meep-virt-engine") watchdogClient, err = watchdog.NewPingee(redisAddr, "meep-virt-engine") if err != nil { log.Error("Failed to initialize pigner. Error: ", err) return err } err = ping.Start() err = watchdogClient.Start() if err != nil { log.Error("Failed pinger listen. Error: ", err) log.Error("Failed watchdog client listen. Error: ", err) return err } Loading