Commit 63647c3e authored by Michel Roy's avatar Michel Roy
Browse files

add watchdog + redis pub/sub for active scenario

parent d818e381
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -5,10 +5,10 @@ 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/gorilla/handlers v1.4.0
	github.com/gorilla/mux v1.7.1
	github.com/sirupsen/logrus v1.4.1
	github.com/gorilla/handlers v1.4.0 // indirect
	github.com/gorilla/mux v1.7.1 // indirect
)

replace github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model => ../../go-packages/meep-ctrl-engine-model
@@ -16,3 +16,5 @@ replace github.com/InterDigitalInc/AdvantEDGE/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-pinger => ../../go-packages/meep-pinger
+1 −1
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@ import (
	"strings"
	"testing"

	log "github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-virt-engine/log"
	log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
)

// Build:
+10.8 MiB

File added.

No diff preview for this file type.

+25 −6
Original line number Diff line number Diff line
@@ -16,19 +16,26 @@ 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"
)

const moduleCtrlEngine string = "ctrl-engine"
const typeActive string = "active"
const channelCtrlActive string = moduleCtrlEngine + "-" + typeActive

var activeScenarioName string = ""
var ping *pinger.Pingee
var rc *redis.Connector

const activeScenarioEventKey string = redis.ModuleCtrlEngine + ":" + redis.TypeActive
const activeScenarioEventKey string = moduleCtrlEngine + ":" + typeActive
const redisAddr string = "localhost:30379"

// VirtEngineInit - Initialize virtualization engine
func VirtEngineInit() (err error) {
	log.Debug("Initializing MEEP Virtualization Engine")
	// Connect to Redis DB
	err = redis.DBConnect(redisAddr)
	rc, err = redis.NewConnector(redisAddr)
	if err != nil {
		log.Error("Failed connection to Redis DB. Error: ", err)
		return err
@@ -37,20 +44,32 @@ func VirtEngineInit() (err error) {

	// Subscribe to Pub-Sub events for MEEP Controller
	// NOTE: Current implementation is RedisDB Pub-Sub
	err = redis.Subscribe(redis.ChannelCtrlActive)
	err = rc.Subscribe(channelCtrlActive)
	if err != nil {
		log.Error("Failed to subscribe to Pub/Sub events. Error: ", err)
		return err
	}
	log.Info("Subscribed to Redis Events")

	// Setup for liveness monitoring
	ping, err = pinger.NewPingee(redisAddr, "meep-virt-engine")
	if err != nil {
		log.Error("Failed to initialize pigner. Error: ", err)
		return err
	}
	err = ping.Start()
	if err != nil {
		log.Error("Failed pinger listen. Error: ", err)
		return err
	}

	return nil
}

// ListenEvents - Redis DB event listener
func ListenEvents() {
	// Listen for subscribed events. Provide event handler method.
	_ = redis.Listen(eventHandler)
	_ = rc.Listen(eventHandler)

}

@@ -59,7 +78,7 @@ func eventHandler(channel string, payload string) {
	switch channel {

	// MEEP Ctrl Engine active scenario update event
	case redis.ChannelCtrlActive:
	case channelCtrlActive:
		log.Debug("Event received on channel: ", channel)
		processActiveScenarioUpdate()

@@ -70,7 +89,7 @@ func eventHandler(channel string, payload string) {

func processActiveScenarioUpdate() {
	// Retrieve active scenario from DB
	jsonScenario, err := redis.DBJsonGetEntry(activeScenarioEventKey, ".")
	jsonScenario, err := rc.JSONGetEntry(activeScenarioEventKey, ".")
	log.Debug("Scenario Event:", jsonScenario)
	if err != nil {
		terminateScenario(activeScenarioName)