Migration to AGL gerrit (update go import)
[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/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.EVTSDKInstall, "", s._sdkEventInstallCB); err != nil {
48                 s.Log.Errorf("XDS Server EventOn '%s' failed: %v", xsapiv1.EVTSDKInstall, err)
49                 return err
50         }
51
52         if _, err := svr.EventOn(xsapiv1.EVTSDKRemove, "", s._sdkEventRemoveCB); err != nil {
53                 s.Log.Errorf("XDS Server EventOn '%s' failed: %v", xsapiv1.EVTSDKRemove, err)
54                 return err
55         }
56
57         return nil
58 }
59
60 func (s *APIService) _sdkEventInstallCB(privD interface{}, data interface{}) error {
61         // assume that xsapiv1.SDKManagementMsg == xaapiv1.SDKManagementMsg
62         evt := xaapiv1.SDKManagementMsg{}
63         evtName := xaapiv1.EVTSDKInstall
64         d, err := json.Marshal(data)
65         if err != nil {
66                 s.Log.Errorf("Cannot marshal XDS Server %s: err=%v", evtName, err)
67                 return err
68         }
69         if err = json.Unmarshal(d, &evt); err != nil {
70                 s.Log.Errorf("Cannot unmarshal XDS Server %s: err=%v", evtName, err)
71                 return err
72         }
73
74         if err := s.events.Emit(evtName, evt, ""); err != nil {
75                 s.Log.Warningf("Cannot notify %s (from server): %v", evtName, err)
76                 return err
77         }
78         return nil
79 }
80
81 func (s *APIService) _sdkEventRemoveCB(privD interface{}, data interface{}) error {
82         // assume that xsapiv1.SDKManagementMsg == xaapiv1.SDKManagementMsg
83         evt := xaapiv1.SDKManagementMsg{}
84         evtName := xaapiv1.EVTSDKRemove
85         d, err := json.Marshal(data)
86         if err != nil {
87                 s.Log.Errorf("Cannot marshal XDS Server %s: err=%v", evtName, err)
88                 return err
89         }
90         if err = json.Unmarshal(d, &evt); err != nil {
91                 s.Log.Errorf("Cannot unmarshal XDS Server %s: err=%v", evtName, err)
92                 return err
93         }
94
95         if err := s.events.Emit(evtName, evt, ""); err != nil {
96                 s.Log.Warningf("Cannot notify %s (from server): %v", evtName, err)
97                 return err
98         }
99         return nil
100 }