Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
def test_exec_env_get(client):
    result = client.simulate_get('/exec-env', headers={'Authorization': create_token()})
    assert(result.status_code == 200)