link w/ configuremgr; add service name based discovery
authordamon92 <damon92.lee@samsung.com>
Fri, 29 Mar 2019 05:26:36 +0000 (14:26 +0900)
committerdamon92 <damon92.lee@samsung.com>
Fri, 29 Mar 2019 05:26:36 +0000 (14:26 +0900)
src/discoverymgr/discovery_execution.go [new file with mode: 0644]
src/discoverymgr/discovery_init.go
src/discoverymgr/discovery_setTXT.go [new file with mode: 0644]
src/discoverymgr/discoverymgr_test.go
src/restapi/v1/restapi.go
src/restapi/v1/restapi_test.go
src/restapi/v1/routers.go [new file with mode: 0644]

diff --git a/src/discoverymgr/discovery_execution.go b/src/discoverymgr/discovery_execution.go
new file mode 100644 (file)
index 0000000..615c72b
--- /dev/null
@@ -0,0 +1,78 @@
+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
+}
index 306844c..c2433c1 100644 (file)
@@ -1,32 +1,14 @@
 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 {
@@ -46,59 +28,18 @@ func registerDevice(ServiceNames []string, ret chan error) {
        }
 }
 
-//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
 
 }
diff --git a/src/discoverymgr/discovery_setTXT.go b/src/discoverymgr/discovery_setTXT.go
new file mode 100644 (file)
index 0000000..35cf599
--- /dev/null
@@ -0,0 +1,46 @@
+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
+}
index a65f34b..18a0379 100644 (file)
@@ -1,6 +1,7 @@
 package discoverymgr
 
 import (
+       confdescription "configuremgr/description"
        "net"
        "os"
        "testing"
@@ -28,46 +29,38 @@ func getIP() string {
        }
        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()
        }
index 5a74366..6abf518 100644 (file)
@@ -66,7 +66,7 @@ func APIV1DiscoverymgrDevicesDeviceIDGet(w http.ResponseWriter, r *http.Request)
 // 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
@@ -80,30 +80,6 @@ func APIV1DiscoverymgrDevicesGet(w http.ResponseWriter, r *http.Request) {
        }
 }
 
-// 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)
index d9b5e4b..42081c3 100644 (file)
@@ -26,9 +26,8 @@ const (
        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"
@@ -227,18 +226,6 @@ func TestAPIV1DiscoverymgrDevicesGet(t *testing.T) {
        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)
 }
diff --git a/src/restapi/v1/routers.go b/src/restapi/v1/routers.go
new file mode 100644 (file)
index 0000000..5834c11
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+ * 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,
+       },
+}