Commit 0502a5bb authored by Yann Garcia's avatar Yann Garcia
Browse files

Add MEC 040 Federation skeletons

parent 9d98f249
Loading
Loading
Loading
Loading
+2 −0
Changes for charts/meep-federation/values-template.yaml: 2 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@ image:
    MEEP_SANDBOX_NAME: {{.SandboxName}}
    MEEP_SVC_PATH: /fed_enablement/v1
    MEEP_HOST_URL: {{.HostUrl}}
    MEEP_BROKER: mqtt://mec-platform2.etsi.org:1883
    MEEP_TOPIC: ETSI/MEC/Federation
    {{- if .IsMepService }}
    MEEP_MEP_NAME: {{.MepName}}
    {{- end }}
+1 −1
Changes for go-apps/meep-federation/api/swagger.yaml: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -12,7 +12,7 @@ externalDocs:
  description: "ETSI GS MEC 040 Federation enablement API, v3.2.1"
  url: https://www.etsi.org/deliver/etsi_gs/MEC/001_099/040/03.02.01_60/gs_MEC040v030201p.pdf
servers:
- url: https://localhost/sandboxname/sandboxname/fed_enablement/v1
- url: https://localhost/sandboxname/fed_enablement/v1
tags:
- name: systemInfo
- name: subscription
+44 −0
Changes for go-apps/meep-federation/go.mod: 44 added lines, 0 removed lines.
Original line number Diff line number Diff line
module github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-vis

go 1.12

require (
	github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-federation v0.0.0-00010101000000-000000000000
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-app-support-client 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-federation-mgr v0.0.0
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-gis-engine-client v0.0.0-20230530211153-8f6edbeaf367
	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-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/InterDigitalInc/AdvantEDGE/go-packages/meep-sandbox-ctrl-client v0.0.0
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-service-mgmt-client v0.0.0
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-subscriptions v0.0.0
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-swagger-api-mgr v0.0.0
	github.com/gorilla/handlers v1.5.1
	github.com/gorilla/mux v1.8.0
	github.com/prometheus/client_golang v1.9.0
)

replace (
	github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-federation => ../../go-apps/meep-federation
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-app-support-client => ../../go-packages/meep-app-support-client
	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-federation-mgr => ../../go-packages/meep-federation-mgr
	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-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-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-subscriptions => ../../go-packages/meep-subscriptions
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-swagger-api-mgr => ../../go-packages/meep-swagger-api-mgr
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-websocket => ../../go-packages/meep-websocket
)
+485 −0

File added.

Preview size limit exceeded, changes collapsed.

+57 −18
Changes for go-apps/meep-federation/sbi/federation-sbi.go: 57 added lines, 18 removed lines.
Original line number Diff line number Diff line
@@ -17,16 +17,11 @@
package sbi

import (
	"encoding/binary"
	"encoding/hex"
	"encoding/json"
	"errors"
	"os"
	"strconv"
	"strings"
	"sync"

	dataModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model"
	fm "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-federation-traffic-mgr"
	fm "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-federation-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"
@@ -40,13 +35,12 @@ type SbiCfg struct {
	SandboxName    string
	FedBroker      string
	FedTopic       string
	PoaList        []string
	MepName        string
	RedisAddr      string
	InfluxAddr     string
	Locality       []string
	ScenarioNameCb func(string)
	FedNotify      func(fedMessage []byte, fedType int32, msgProtocolVersion int32, stdOrganization string, longitude *float32, latitude *float32)
	FedNotify      func(msg string)
	CleanUpCb      func()
}

@@ -64,12 +58,19 @@ type FedSbi struct {
	apiMgr               *sam.SwaggerApiMgr
	activeModel          *mod.Model
	federationMgr        *fm.FederationMgr
	messageBrokerStarted bool
	updateScenarioNameCB func(string)
	fedNotify            func()
	fedNotify            func(string)
	cleanUpCB            func()
	mutex                sync.Mutex
}

type SystemInfo struct {
	SystemId       string
	SystemName     string
	SystemProvider string
}

var sbi *FedSbi

// Init - V2XI Service SBI initialization
@@ -132,11 +133,12 @@ func Init(cfg SbiCfg) (err error) {
	}

	// Connect to FED Traffic Manager
	sbi.federationMgr, err = fm.NewTrafficMgr(sbi.moduleName, sbi.sandboxName, cfg.FedBroker, cfg.FedTopic, cfg.PoaList, cfg.FedNotify)
	sbi.federationMgr, err = fm.NewFederationMgr(sbi.moduleName, sbi.sandboxName, cfg.FedBroker, cfg.FedTopic, cfg.FedNotify)
	if err != nil {
		log.Error("Failed connection to FED Traffic Manager: ", err)
		return err
	}
	sbi.messageBrokerStarted = false
	log.Info("Connected to FED Traffic Manager")

	// Initialize service
@@ -193,9 +195,13 @@ func Stop() (err error) {
		}
	}

	// Delete FED Traffic Manager
	// Delete FED  Manager
	if sbi.federationMgr != nil {
		err = sbi.federationMgr.DeleteTrafficMgr()
		if sbi.messageBrokerStarted {
			sbi.federationMgr.StopFedMessageBrokerServer()
			sbi.messageBrokerStarted = false
		}
		err = sbi.federationMgr.DeleteFederationMgr()
		if err != nil {
			log.Error(err.Error())
			return err
@@ -231,11 +237,6 @@ func processActiveScenarioTerminate() {
	// Update scenario name
	sbi.scenarioName = ""

	// Flush all Traffic Manager tables
	if sbi.federationMgr != nil {
		_ = sbi.federationMgr.DeleteTables()
	}

	sbi.cleanUpCB()
}

@@ -257,3 +258,41 @@ func processActiveScenarioUpdate() {
		log.Info("processActiveScenarioUpdate: sbi.scenarioName: ", sbi.scenarioName)
	}
}

func RegisterSystemInfo(requestData SystemInfo) (responseData SystemInfo, err error) {
	log.Info(">>> RegisterSystemInfo")

	if !sbi.messageBrokerStarted {
		err = sbi.federationMgr.StartFedMessageBrokerServer()
		if err != nil {
			log.Error("Failed to start message broker server: ", err)
			return responseData, err
		}
		sbi.messageBrokerStarted = true
	}

	s := convertSystemInfotoJson(&requestData)
	if s == "" {
		err = errors.New("Failed to convert message")
		log.Error(err)
		return responseData, err
	}
	err = sbi.federationMgr.PublishMessageOnMessageBroker(s)
	if err != nil {
		log.Error("Failed to start message broker server: ", err)
		return responseData, err
	}

	responseData = requestData

	return responseData, nil
}

func convertSystemInfotoJson(systemInfo *SystemInfo) string {
	jsonInfo, err := json.Marshal(*systemInfo)
	if err != nil {
		log.Error(err.Error())
		return ""
	}
	return string(jsonInfo)
}
Loading