def heartbeat_exec_env(exec_env): log = Log.get('heartbeat') try: id = exec_env.meta.id lcp = exec_env.lcp lbl = f'{id} (LCP at {exec_env.hostname}:{lcp.port})' if exec_env.enabled: schema = 'https' if lcp.https else 'http' resp = post(f'{schema}://{exec_env.hostname}:{lcp.port}/status', timeout=Arg_Reader.db.hb_timeout, headers={'Authorization': create_token()}, json={'id': id}) if resp.status_code == HTTP_Status.OK: data = resp.json() id = data.pop('id', None) lcp.started = data.get('started', None) lcp.last_heartbeat = data.get('last_heartbeat', None) log.success(f'Connection established with exec-env {lbl}') else: lcp.last_heartbeat = None log.warning(f'Connection reset with exec-env {lbl}') log.notice(f'Response: {resp.content}') if not lcp.https: lcp.https = False exec_env.save() else: log.notice(f'Exec-env {lbl} not enabled') except ConnectTimeout: log.error(f'Connection timeout with exec-env {lbl}') except ConnectionError: log.error(f'Connection refused with exec-env {lbl}') except Exception as exception: log.exception(f'Exception during connection with exec-env {lbl}', exception)
def __apply(self, instance, exec_env): if self.num > 0: schema = 'https' if exec_env.lcp.https else 'http' resp_lcp = post_req( f'{schema}://{exec_env.hostname}:{exec_env.lcp.port}/config', headers={'Authorization': create_token()}, json=self.req_lcp) if resp_lcp.content: try: resp_lcp_data = resp_lcp.json() if resp_lcp.status_code >= 300 or (is_dict(resp_lcp) and resp_lcp_data.get( 'error', False)): Unprocessable_Entity_Response(resp_lcp_data) \ .add(self.resp) return False else: save_actions = self.__save( instance=instance, data=resp_lcp_data, type='action', catalogs=self.catalogs['actions'], handler=self.__save_action) save_parameters = self.__save( instance=instance, data=resp_lcp_data, type='parameter', catalogs=self.catalogs['parameters'], handler=self.__save_parameter) save_resources = self.__save( instance=instance, data=resp_lcp_data, type='resource', catalogs=self.catalogs['resources'], handler=self.__save_resource) if save_actions or save_parameters or save_resources: instance.save() self.resp.extend(wrap(resp_lcp_data)) return True except Exception as e: msg = f'Response from LCP({exec_env.meta.id}@{exec_env.hostname}:{exec_env.lcp.port}) not valid' self.log.exception(msg, e) uer = Unprocessable_Entity_Response(msg, exception=e) uer.add(self.resp) return False else: msg = f'Request to LCP({exec_env.meta.id}@{exec_env.hostname}:{exec_env.lcp.port}) not executed' Unprocessable_Entity_Response(msg).add(self.resp) return False return False
def __apply(self, instance, exec_env, caller, data): h, p = exec_env.hostname, exec_env.lcp.port schema = 'https' if exec_env.lcp.https else 'http' resp_caller = caller(f'{schema}://{h}:{p}/code', headers={'Authorization': create_token()}, json=data(self.catalog)) if resp_caller.content: try: self.resp.extend(wrap(resp_caller.json())) except Exception as e: msg = f'Response from LCP({exec_env.meta.id}@{exec_env.hostname}:{exec_env.lcp.port}) not valid' self.log.exception(msg, e) uer = Unprocessable_Entity_Response(msg, exception=e) uer.add(self.resp) else: msg = f'Request to LCP({exec_env.meta.id}@{exec_env.hostname}:{exec_env.lcp.port}) not executed' Unprocessable_Entity_Response(msg).add(self.resp)
def test_exec_env_get(client): result = client.simulate_get('/exec-env', headers={'Authorization': create_token()}) assert(result.status_code == 200)