def cmd_monitor_plugin_install(self, *argv, **kwargs): """ Installs a plugin [url=plugin_url] """ url = kwargs.get('url', None) content = None if not url: raise ecm.InvalidParameters(self.cmd_monitor_plugin_install.__doc__) try: content = ecm.get_url(url) except: pass if not content: raise Exception("Unable to get URL: %s" % url) try: plugin = json.loads(content) except: raise Exception("Invalid data received") id = plugin.get('id') runas = plugin.get('runas') arg_config = plugin.get('config') arg_script_b64 = plugin.get('script') script = None try: script = b64decode(arg_script_b64) except: pass config = { 'id': id, 'runas': runas, 'name': plugin.get('name'), 'interval': plugin.get('interval'), 'version': plugin.get('version'), 'config': arg_config } if id and config and script: mplugin = MPlugin(MPLUGIN_PATH) if mplugin.install(id, config, script): # Installation ok, run it script_file = os.path.abspath(os.path.join(MPLUGIN_PATH, id, id)) _run_background_file(script_file, runas) return True return False
def cmd_monitor_plugin_install(self, *argv, **kwargs): """ Installs a plugin [url=plugin_url] """ url = kwargs.get('url', None) content = None if not url: raise ecm.InvalidParameters(self.cmd_monitor_plugin_install.__doc__) try: content = ecm.get_url(url) except: pass if not content: raise Exception("Unable to get URL: %s" % url) try: plugin = json.loads(content) except: raise Exception("Invalid data received") id = plugin.get('id') runas = plugin.get('runas') arg_config = plugin.get('config') arg_script_b64 = plugin.get('script') arg_requirements = plugin.get('requirements', None) if arg_requirements: pip_install = [] system_install = [] for req in arg_requirements.keys(): if arg_requirements[req]['type'] == 'system': system_install.append(arg_requirements[req]['name']) elif arg_requirements[req]['type'] == 'pip': pip_install.append(arg_requirements[req]['name']) for item in system_install: result = ecm.install_package(item) if not result: return False if not pip_import_error: for item in pip_install: try: result = pip_install_single_package(item) if not result[0]: return False except: pass script = None try: script = b64decode(arg_script_b64) except: pass config = { 'id': id, 'runas': runas, 'name': plugin.get('name'), 'interval': plugin.get('interval'), 'version': plugin.get('version'), 'config': arg_config } if id and config and script: mplugin = MPlugin(MPLUGIN_PATH) if mplugin.install(id, config, script): # Installation ok, run it script_file = os.path.abspath(os.path.join(MPLUGIN_PATH, id, id)) _run_background_file(script_file, runas) return True return False