return
}
+ // Retrieve session info
+ sess := s.sessions.Get(c)
+ if sess == nil {
+ common.APIError(c, "Unknown sessions")
+ return
+ }
+
s.Log.Debugln("Remove SDK id ", id)
- delEntry, err := s.sdks.Remove(id)
+ delEntry, err := s.sdks.Remove(id, -1, sess)
if err != nil {
common.APIError(c, err.Error())
return
s.Log.Errorln("BUG: sdk ID differs: %v != %v", sdkID, s.sdk.ID)
}
- s.Log.Debugf("Command SDK ID %s [Cmd ID %s] exited: code %d, exitError: %v", sdkID[:16], e.CmdID, code, exitError)
+ s.Log.Infof("Command SDK ID %s [Cmd ID %s] exited: code %d, exitError: %v", sdkID[:16], e.CmdID, code, exitError)
// IO socket can be nil when disconnected
so := s.sessions.IOSocketGet(e.Sid)
}
// Remove Used to remove/uninstall a SDK
-func (s *CrossSDK) Remove() error {
+func (s *CrossSDK) Remove(timeout int, sess *ClientSession) error {
if s.sdk.Status != xsapiv1.SdkStatusInstalled {
return fmt.Errorf("this sdk is not installed")
}
+ // IO socket can be nil when disconnected
+ so := s.sessions.IOSocketGet(sess.ID)
+ if so == nil {
+ return fmt.Errorf("Cannot retrieve socket ")
+ }
+
s.sdk.Status = xsapiv1.SdkStatusUninstalling
- cmdline := s.scripts[scriptRemove] + " " + s.sdk.Path
- cmd := exec.Command(cmdline)
+ // Emit Remove event
+ if err := (*so).Emit(xsapiv1.EVTSDKStateChange, s.sdk); err != nil {
+ s.Log.Warningf("Cannot notify SDK remove: %v", err)
+ }
+
+ script := s.scripts[scriptRemove]
+ args := s.sdk.Path
+ s.Log.Infof("Uninstall SDK %s: script=%v args=%v", s.sdk.Name, script, args)
+
+ cmd := exec.Command(script, args)
stdout, err := cmd.CombinedOutput()
+
+ s.sdk.Status = xsapiv1.SdkStatusNotInstalled
+ s.Log.Debugf("SDK uninstall err %v, output:\n %v", err, string(stdout))
+
if err != nil {
+
+ // Emit Remove event
+ evData := xsapiv1.SDKManagementMsg{
+ Timestamp: time.Now().String(),
+ Sdk: s.sdk,
+ Progress: 100,
+ Exited: true,
+ Code: 1,
+ Error: err.Error(),
+ }
+ if err := (*so).Emit(xsapiv1.EVTSDKRemove, evData); err != nil {
+ s.Log.Warningf("Cannot notify SDK remove end: %v", err)
+ }
+
return fmt.Errorf("Error while uninstalling sdk: %v", err)
}
- s.Log.Debugf("SDK uninstall output:\n %v", stdout)
+
+ // Emit Remove event
+ evData := xsapiv1.SDKManagementMsg{
+ Timestamp: time.Now().String(),
+ Sdk: s.sdk,
+ Progress: 100,
+ Exited: true,
+ Code: 0,
+ Error: "",
+ }
+ if err := (*so).Emit(xsapiv1.EVTSDKRemove, evData); err != nil {
+ s.Log.Warningf("Cannot notify SDK remove end: %v", err)
+ }
return nil
}
sdksList, err := ListCrossSDK(d, s.Log)
if err != nil {
- return &s, err
+ // allow to use XDS even if error on list
+ s.Log.Errorf("Cannot retrieve SDK list: %v", err)
}
s.LogSillyf("'%s' SDKs list: %v", d, sdksList)
}
// Remove Used to uninstall a SDK
-func (s *SDKs) Remove(id string) (*xsapiv1.SDK, error) {
- s.mutex.Lock()
- defer s.mutex.Unlock()
+func (s *SDKs) Remove(id string, timeout int, sess *ClientSession) (*xsapiv1.SDK, error) {
cSdk, exist := s.Sdks[id]
if !exist {
// Launch script to remove/uninstall
// (note that remove event will be generated by monitoring thread)
- if err := cSdk.Remove(); err != nil {
+ if err := cSdk.Remove(timeout, sess); err != nil {
return &cSdk.sdk, err
}
EVTFolderStateChange = EventTypePrefix + "folder-state-change" // type EventMsg with Data type xsapiv1.FolderConfig
EVTSDKInstall = EventTypePrefix + "sdk-install" // type EventMsg with Data type xsapiv1.SDKManagementMsg
EVTSDKRemove = EventTypePrefix + "sdk-remove" // type EventMsg with Data type xsapiv1.SDKManagementMsg
+ EVTSDKStateChange = EventTypePrefix + "sdk-state-change" // type EventMsg with Data type xsapiv1.SDK
)
// EVTAllList List of all supported events
EVTFolderStateChange,
EVTSDKInstall,
EVTSDKRemove,
+ EVTSDKStateChange,
}
// DecodeFolderConfig Helper to decode Data field type FolderConfig
TMPDIR=$(mktemp -d)
SDK_FILE=${TMPDIR}/$(basename ${URL})
echo "Downloading $(basename ${SDK_FILE}) ..."
- wget "$URL" -O "${SDK_FILE}" || exit 1
+ wget --no-check-certificate "$URL" -O "${SDK_FILE}" || exit 1
fi
# Retreive default install dir to extract version
-#! /usr/bin/env node
+#! /usr/bin/env nodejs
/**************************************************************************
* Copyright 2017 IoT.bzh
};
// Get list of available SDKs
-sdksDBFile = path.join(__dirname, "sdks_latest.json")
+sdksDBFile = path.join(envMap["SDK_ROOT_DIR"], "sdks_latest.json")
try {
// Fetch SDK Json database file when not existing
if (!fs.existsSync(sdksDBFile)) {
- var data = execSync(path.join(__dirname, 'update'), opts);
+
+ var data = execSync(path.join(__dirname, 'update ' + sdksDBFile), opts);
}
// Read SDK Json database file
var data = fs.readFileSync(sdksDBFile);
exit 1
fi
-rm -rf "${1}"
+rm -rf "${1}" && echo "SDK successfully removed."
. $(dirname "$0")/_env-init.sh
-wget -q --connect-timeout=30 ${SDK_DATABASE}
+wget -q --connect-timeout=30 ${SDK_DATABASE} -O $1