--- /dev/null
+package discoverymgr
+
+import (
+ "context"
+ "log"
+ "time"
+
+ "github.com/grandcat/zeroconf"
+)
+
+//GetDeviceList retune device list
+func GetDeviceList() ([]DeviceReturnInfo, error) {
+ data, err := discoverDevice()
+ if err != nil {
+ return nil, err
+ }
+ var ret []DeviceReturnInfo
+ for key, value := range data {
+ ret = append(ret, DeviceReturnInfo{
+ DeviceIP: key,
+ ServiceNames: value})
+ }
+
+ return ret, nil
+}
+
+//GetDeviceListWithService retune device list
+func GetDeviceListWithService(target string) ([]string, error) {
+ data, err := discoverDevice()
+ if err != nil {
+ return nil, err
+ }
+ var ret []string
+ for key, value := range data {
+ //서비스명으로검색
+ for _, val := range value {
+ if val == target {
+ ret = append(ret, key)
+ }
+ }
+ }
+ //return nothing인 경우?
+
+ return ret, nil
+}
+
+func discoverDevice() (map[string][]string, error) {
+ domain := "local"
+
+ resolver, err := zeroconf.NewResolver(nil)
+ if err != nil {
+ return nil, err
+ }
+
+ var data = make(map[string][]string) //data[deviceIP][[]ServiceNames]
+ entries := make(chan *zeroconf.ServiceEntry)
+ go func(results <-chan *zeroconf.ServiceEntry) {
+ for entry := range results {
+ deviceIP := entry.AddrIPv4[0].String()
+ log.Println("[Discoverymgr] Discoverd Device::" + deviceIP)
+ ServiceNames := make([]string, len(entry.Text))
+
+ ServiceNames = entry.Text
+
+ data[deviceIP] = ServiceNames
+ }
+ }(entries)
+
+ ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond*time.Duration(100))
+ defer cancel()
+ err = resolver.Browse(ctx, serviceType, domain, entries)
+ if err != nil {
+ return nil, err
+ }
+ <-ctx.Done()
+
+ return data, nil
+}
package discoverymgr
import (
- "context"
- "errors"
"fmt"
"log"
- "time"
"github.com/grandcat/zeroconf"
)
var gServer *zeroconf.Server
-//SetServiceNames set txt of mdns message
-func SetServiceNames(ServiceNames []string) error {
-
- var TXTSize int
- for _, str := range ServiceNames {
- TXTSize += len(str)
- }
- if TXTSize > maxTXTSize {
- return errors.New("TXT Size is Too much for mDNS TXT - 400B")
- }
- gServer.SetText(ServiceNames)
-
- return nil
-}
-
func registerDevice(ServiceNames []string, ret chan error) {
server, err := zeroconf.Register(serviceName, serviceType, domain, servicePort, ServiceNames, nil)
if err != nil {
}
}
-//DeviceList retune device list
-func DeviceList() ([]DeviceReturnInfo, error) {
- domain := "local"
-
- resolver, err := zeroconf.NewResolver(nil)
- if err != nil {
- return nil, err
- }
-
- var data = make(map[string][]string) //data[deviceIP][[]ServiceNames]
- entries := make(chan *zeroconf.ServiceEntry)
- go func(results <-chan *zeroconf.ServiceEntry) {
- for entry := range results {
- deviceIP := entry.AddrIPv4[0].String()
- fmt.Println("[Discoverymgr] Discoverd Device::" + deviceIP)
- ServiceNames := make([]string, len(entry.Text))
-
- ServiceNames = entry.Text
-
- data[deviceIP] = ServiceNames
- }
- }(entries)
-
- ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond*time.Duration(10))
- defer cancel()
- err = resolver.Browse(ctx, serviceType, domain, entries)
- if err != nil {
- return nil, err
- }
- <-ctx.Done()
-
- var ret []DeviceReturnInfo
- for key, value := range data {
- ret = append(ret, DeviceReturnInfo{
- DeviceIP: key,
- ServiceNames: value})
- }
-
- return ret, nil
-}
-
//InitDiscovery deploy Orchestration service
func InitDiscovery() error {
registerCh := make(chan error)
- //@ToDo []sting Will be retrieved from configuremgr
- //setServiceNames(ServiceNames)
- ServiceNames := []string{"Distributed Web Engine", "Television", "Soundbox"}
- go registerDevice(ServiceNames, registerCh)
+ go registerDevice(nil, registerCh)
err := <-registerCh
if err != nil {
log.Println("[Fail] " + err.Error())
}
+
+ ResetServiceName()
+
return err
}
--- /dev/null
+package discoverymgr
+
+import (
+ confdescription "configuremgr/description"
+ "errors"
+)
+
+var serverTXT []string
+
+//ResetServiceName will reset txt of mdns message
+func ResetServiceName() error {
+ serverTXT = nil
+ return SetServiceNames(serverTXT)
+}
+
+//AddNewServiceName add servicename to orchestration server
+func AddNewServiceName(doc *confdescription.Doc) error {
+
+ newService := doc.ServiceInfo.ServiceName
+ if gServer == nil {
+ return errors.New("Orchestration is not Exist")
+ }
+ for _, str := range serverTXT {
+ if str == newService {
+ return errors.New("ServiceName Duplicated")
+ }
+ }
+ serverTXT = append(serverTXT, newService)
+
+ return SetServiceNames(serverTXT)
+}
+
+//SetServiceNames set txt of mdns message
+func SetServiceNames(ServiceNames []string) error {
+
+ var TXTSize int
+ for _, str := range ServiceNames {
+ TXTSize += len(str)
+ }
+ if TXTSize > maxTXTSize {
+ return errors.New("TXT Size is Too much for mDNS TXT - 400B")
+ }
+ gServer.SetText(ServiceNames)
+
+ return nil
+}
package discoverymgr
import (
+ confdescription "configuremgr/description"
"net"
"os"
"testing"
}
return ipv4
}
-func TestSetServiceNames(t *testing.T) {
+func TestGetDeviceListWithService(t *testing.T) {
err := InitDiscovery()
if err != nil {
t.Fail()
}
- ServiceNames := []string{"Test1", "Test2"}
- err = SetServiceNames(ServiceNames)
+ doc := new(confdescription.Doc)
+ doc.ServiceInfo.ServiceName = "test1"
+ err = AddNewServiceName(doc)
if err != nil {
t.Fail()
}
- ret, err := DeviceList()
+ ret, err := GetDeviceListWithService(doc.ServiceInfo.ServiceName)
if err != nil {
t.Fail()
}
ipv4 := getIP()
- isExist := -1
- for i, v := range ret {
- if v.DeviceIP == ipv4 {
- isExist = i
+ for _, v := range ret {
+ if v == ipv4 {
+ return
}
}
-
- if isExist == -1 {
- t.Fail()
- }
-
- if ret[isExist].ServiceNames[0] != ServiceNames[0] ||
- ret[isExist].ServiceNames[1] != ServiceNames[1] {
- t.Fail()
- }
+ t.Fail()
}
-func TestInitDiscovery(t *testing.T) {
+func TestGetDeviceList(t *testing.T) {
err := InitDiscovery()
if err != nil {
t.Fail()
}
- ret, err := DeviceList()
+ ret, err := GetDeviceList()
if err != nil {
t.Fail()
}
// APIV1DiscoverymgrDevicesGet function
func APIV1DiscoverymgrDevicesGet(w http.ResponseWriter, r *http.Request) {
log.Printf("[%s] APIV1DiscoverymgrDevicesGet", logPrefix)
- ret, err := discoverymgr.DeviceList()
+ ret, err := discoverymgr.GetDeviceList()
if err != nil {
writeJSONResponse(w, nil, http.StatusBadRequest)
return
}
}
-// APIV1DiscoverymgrDevicesPost function
-func APIV1DiscoverymgrDevicesPost(w http.ResponseWriter, r *http.Request) {
- log.Printf("[%s] APIV1DiscoverymgrDevicesPost", logPrefix)
- decoder := json.NewDecoder(r.Body)
- var serviceNames map[string][]string
- err := decoder.Decode(&serviceNames)
- if err != nil {
- writeJSONResponse(w, nil, http.StatusBadRequest)
- return
- }
-
- if _, isExist := serviceNames["ServiceNames"]; !isExist {
- writeJSONResponse(w, nil, http.StatusBadRequest)
- return
- }
-
- err = discoverymgr.SetServiceNames(serviceNames["ServiceNames"])
- if err == nil {
- writeJSONResponse(w, nil, http.StatusOK)
- } else {
- writeJSONResponse(w, nil, http.StatusBadRequest)
- }
-}
-
// APIV1ServicemgrServicesDelete function
func APIV1ServicemgrServicesDelete(w http.ResponseWriter, r *http.Request) {
log.Printf("[%s] APIV1ServicemgrServicesDelete", logPrefix)
ConstDeviceResourceUsageMemoryGet = "/api/v1/device/resource/usage/memory"
ConstDeviceResourceUsageNetworkGet = "/api/v1/device/resource/usage/network"
- // @TODO discovery mgr URI
- ConstDiscoverymgrDevicesGet = "/api/v1/discoverymgr/devices"
- ConstDiscoverymgrDevicesPost = "/api/v1/discoverymgr/devices"
+ // discovery mgr URI
+ ConstDiscoverymgrDevicesGet = "/api/v1/discoverymgr/devices"
// Service mgr URI
ConstServicemgrServices = "/api/v1/servicemgr/services"
testGet(t, targetURI, http.StatusOK)
}
-func TestAPIV1DiscoverymgrDevicesPost(t *testing.T) {
- targetURI := ConstDiscoverymgrDevicesPost
- ServiceNames := make(map[string][]string)
- ServiceNames["ServiceNames"] = []string{"Distributed Web Engine", "Television", "Soundbox"}
-
- bdbytes, err := json.Marshal(ServiceNames)
- if err != nil {
- t.Log(err.Error())
- t.Error()
- }
- testPost(t, targetURI, bdbytes, http.StatusOK)
-}
func TestAPIV1ServicemgrServicesPost(t *testing.T) {
executeService(t)
}
--- /dev/null
+/*
+ * Edge Orchestration
+ *
+ * Edge Orchestration support to deliver distributed service process environment.
+ *
+ * API version: v1-20190318
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package v1
+
+import (
+ "fmt"
+ "net/http"
+ "strings"
+
+ "github.com/gorilla/mux"
+)
+
+// Route type
+type Route struct {
+ Name string
+ Method string
+ Pattern string
+ HandlerFunc http.HandlerFunc
+}
+
+// Routes type
+type Routes []Route
+
+// NewRouter function
+func NewRouter() *mux.Router {
+ router := mux.NewRouter().StrictSlash(true)
+ for _, route := range routes {
+ var handler http.Handler
+ handler = route.HandlerFunc
+ handler = Logger(handler, route.Name)
+
+ router.
+ Methods(route.Method).
+ Path(route.Pattern).
+ Name(route.Name).
+ Handler(handler)
+ }
+
+ return router
+}
+
+// Index function
+func Index(w http.ResponseWriter, r *http.Request) {
+ fmt.Fprintf(w, "Hello World!")
+}
+
+var routes = Routes{
+ Route{
+ "Index",
+ "GET",
+ "/",
+ Index,
+ },
+
+ Route{
+ "APIV1DeviceResourceUsageCPUGet",
+ strings.ToUpper("Get"),
+ "/api/v1/device/resource/usage/cpu",
+ APIV1DeviceResourceUsageCPUGet,
+ },
+
+ Route{
+ "APIV1DeviceResourceUsageDiskGet",
+ strings.ToUpper("Get"),
+ "/api/v1/device/resource/usage/disk",
+ APIV1DeviceResourceUsageDiskGet,
+ },
+
+ Route{
+ "APIV1DeviceResourceUsageMemoryGet",
+ strings.ToUpper("Get"),
+ "/api/v1/device/resource/usage/memory",
+ APIV1DeviceResourceUsageMemoryGet,
+ },
+
+ Route{
+ "APIV1DeviceResourceUsageNetworkGet",
+ strings.ToUpper("Get"),
+ "/api/v1/device/resource/usage/network",
+ APIV1DeviceResourceUsageNetworkGet,
+ },
+
+ Route{
+ "APIV1DiscoverymgrDevicesDeviceIDGet",
+ strings.ToUpper("Get"),
+ "/api/v1/discoverymgr/devices/{deviceid}",
+ APIV1DiscoverymgrDevicesDeviceIDGet,
+ },
+
+ Route{
+ "APIV1DiscoverymgrDevicesGet",
+ strings.ToUpper("Get"),
+ "/api/v1/discoverymgr/devices",
+ APIV1DiscoverymgrDevicesGet,
+ },
+
+ Route{
+ "APIV1ServicemgrServicesPost",
+ strings.ToUpper("Post"),
+ "/api/v1/servicemgr/services",
+ APIV1ServicemgrServicesPost,
+ },
+
+ Route{
+ "APIV1ServicemgrServicesNotificationServiceIDPost",
+ strings.ToUpper("Post"),
+ "/api/v1/servicemgr/services/notification/{serviceid}",
+ APIV1ServicemgrServicesNotificationServiceIDPost,
+ },
+}