Use go module as dependency tool instead of glide
[src/xds/xds-agent.git] / lib / agent / apiv1-sdks.go
1 /*
2  * Copyright (C) 2017-2018 "IoT.bzh"
3  * Author Sebastien Douheret <sebastien@iot.bzh>
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *   http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18 package agent
19
20 import (
21         "encoding/json"
22         "fmt"
23
24         "gerrit.automotivelinux.org/gerrit/src/xds/xds-agent.git/lib/xaapiv1"
25         "gerrit.automotivelinux.org/gerrit/src/xds/xds-server.git/lib/xsapiv1"
26 )
27
28 // sdksPassthroughInit Declare passthrough routes for sdks
29 func (s *APIService) sdksPassthroughInit(svr *XdsServer) error {
30         svr.PassthroughGet("/sdks")
31         svr.PassthroughGet("/sdks/:id")
32         svr.PassthroughPost("/sdks")
33         svr.PassthroughPost("/sdks/abortinstall")
34         svr.PassthroughDelete("/sdks/:id")
35
36         return nil
37 }
38
39 // sdksEventsForwardInit Register events forwarder for sdks
40 func (s *APIService) sdksEventsForwardInit(svr *XdsServer) error {
41
42         if !svr.Connected {
43                 return fmt.Errorf("Cannot register events: XDS Server %v not connected", svr.ID)
44         }
45
46         // Forward SDK events from XDS-server to client
47         if _, err := svr.EventOn(xsapiv1.EVTSDKAdd, xaapiv1.EVTSDKAdd, s._sdkEventCB); err != nil {
48                 s.Log.Errorf("XDS Server EventOn '%s' failed: %v", xsapiv1.EVTSDKAdd, err)
49                 return err
50         }
51         if _, err := svr.EventOn(xsapiv1.EVTSDKRemove, xaapiv1.EVTSDKRemove, s._sdkEventCB); err != nil {
52                 s.Log.Errorf("XDS Server EventOn '%s' failed: %v", xsapiv1.EVTSDKRemove, err)
53                 return err
54         }
55         if _, err := svr.EventOn(xsapiv1.EVTSDKStateChange, xaapiv1.EVTSDKStateChange, s._sdkEventCB); err != nil {
56                 s.Log.Errorf("XDS Server EventOn '%s' failed: %v", xsapiv1.EVTSDKStateChange, err)
57                 return err
58         }
59
60         if _, err := svr.EventOn(xsapiv1.EVTSDKManagement, "", s._sdkEventManagementCB); err != nil {
61                 s.Log.Errorf("XDS Server EventOn '%s' failed: %v", xsapiv1.EVTSDKManagement, err)
62                 return err
63         }
64
65         return nil
66 }
67
68 func (s *APIService) _sdkEventCB(privD interface{}, data interface{}) error {
69         evt := xsapiv1.EventMsg{}
70         d, err := json.Marshal(data)
71         if err != nil {
72                 s.Log.Errorf("Cannot marshal XDS Server SDK event err=%v, data=%v", err, data)
73                 return err
74         }
75         if err = json.Unmarshal(d, &evt); err != nil {
76                 s.Log.Errorf("Cannot unmarshal XDS Server SDK event err=%v, d=%v", err, string(d))
77                 return err
78         }
79
80         // assume that xsapiv1.SDK == xaapiv1.SDK
81         sdk, err := evt.DecodeSDKEvent()
82         if err != nil {
83                 s.Log.Errorf("Cannot decode XDS Server SDK event: err=%v, data=%v", err, data)
84                 return err
85         }
86
87         evtName := privD.(string)
88
89         if err := s.events.Emit(evtName, sdk, ""); err != nil {
90                 s.Log.Warningf("Cannot notify %s (from server): %v", evtName, err)
91                 return err
92         }
93         return nil
94 }
95
96 func (s *APIService) _sdkEventManagementCB(privD interface{}, data interface{}) error {
97         // assume that xsapiv1.SDKManagementMsg == xaapiv1.SDKManagementMsg
98         evt := xaapiv1.SDKManagementMsg{}
99         evtName := xaapiv1.EVTSDKManagement
100         d, err := json.Marshal(data)
101         if err != nil {
102                 s.Log.Errorf("Cannot marshal XDS Server %s: err=%v", evtName, err)
103                 return err
104         }
105         if err = json.Unmarshal(d, &evt); err != nil {
106                 s.Log.Errorf("Cannot unmarshal XDS Server %s: err=%v", evtName, err)
107                 return err
108         }
109
110         if err := s.events.Emit(evtName, evt, ""); err != nil {
111                 s.Log.Warningf("Cannot notify %s (from server): %v", evtName, err)
112                 return err
113         }
114         return nil
115 }