Commit 4a733ace authored by Michel Roy's avatar Michel Roy
Browse files

use meep-watchdog

parent 047a6c75
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -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
@@ -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
+24 −67
Original line number Diff line number Diff line
@@ -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"
@@ -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

@@ -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
}
@@ -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) {
@@ -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
@@ -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")
@@ -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"
		}
+2 −2
Original line number Diff line number Diff line
@@ -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
)
@@ -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
+5 −5
Original line number Diff line number Diff line
@@ -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"
@@ -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
@@ -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
	}