2022-01-17 15:25:55 +00:00
|
|
|
from datetime import datetime
|
2022-01-14 11:16:57 +00:00
|
|
|
import json
|
|
|
|
import os
|
|
|
|
import requests
|
|
|
|
|
|
|
|
class Replay:
|
|
|
|
"""
|
|
|
|
## Replay
|
|
|
|
---
|
|
|
|
Esta classe é utilizada para fazer manipulações com o Replay instalado na máquina. Ela concede acesso às diferentes funcionalidades que o mesmo apresenta na interface do Console, sem que o programador precise realizar WebScraping para acessá-lo.
|
|
|
|
|
|
|
|
Permite por exemplo a extração de configurações definidas para certos repositórios, registro de Logs, manipulação de banco de dados (SQLite), entre várias outras coisas.
|
|
|
|
"""
|
|
|
|
|
|
|
|
ep: str = ""
|
|
|
|
|
|
|
|
def __init__ (self):
|
|
|
|
self.ep = "https://localhost:8443"
|
|
|
|
|
2022-01-14 11:46:23 +00:00
|
|
|
def __request_get__ (self, data: str):
|
2022-01-14 11:16:57 +00:00
|
|
|
|
|
|
|
"""
|
|
|
|
## HTTP GET
|
|
|
|
---
|
|
|
|
Este método é responsável por realizar requisições HTTP do tipo GET.
|
|
|
|
|
|
|
|
Ele retorna o corpo de resposta da requisição, ou uma mensagem de erro, que indica qual foi a irregularidade ocorrida ao chamar a API.
|
|
|
|
"""
|
|
|
|
|
|
|
|
url = self.ep + data
|
|
|
|
print("Calling: " + url)
|
|
|
|
|
|
|
|
apikey = os.environ.get('REPLAY_APIKEY')
|
|
|
|
headers = {"X-API-KEY": apikey}
|
|
|
|
res = requests.get(url, headers=headers, verify=False)
|
|
|
|
|
|
|
|
if res.status_code >= 400:
|
|
|
|
raise Exception(f"HTTP ERROR: {str(res.status_code)} - {res.text}")
|
|
|
|
if res.headers.get("Content-Type") != None and res.headers.get("Content-Type").find("json") != -1:
|
|
|
|
return json.loads(res.text)
|
|
|
|
else:
|
|
|
|
return res.text
|
|
|
|
|
2022-01-14 11:46:23 +00:00
|
|
|
def __request_json_post__ (self, path: str, object: dict):
|
2022-01-14 11:16:57 +00:00
|
|
|
|
|
|
|
"""
|
|
|
|
## HTTP JSON POST
|
|
|
|
---
|
|
|
|
Este método é responsável por realizar requisições HTTP do tipo POST para objetos JSON.
|
|
|
|
|
|
|
|
Ele retorna o corpo de resposta da requisição, ou uma mensagem de erro, que indica qual foi a irregularidade ocorrida ao chamar a API.
|
|
|
|
"""
|
|
|
|
|
|
|
|
url = self.ep + path
|
|
|
|
print("Calling: " + url)
|
|
|
|
|
|
|
|
apikey = os.environ.get('REPLAY_APIKEY')
|
|
|
|
headers = {"X-API-KEY": apikey}
|
|
|
|
res = requests.post(url, json = object, headers = headers, verify = False)
|
|
|
|
|
|
|
|
if res.status_code >= 400:
|
|
|
|
raise Exception(f"HTTP ERROR: {str(res.status_code)} - {res.text}")
|
|
|
|
if res.headers.get("Content-Type") != None and res.headers.get("Content-Type").find("json") != -1:
|
|
|
|
return json.loads(res.text)
|
|
|
|
else:
|
|
|
|
return res.text
|
|
|
|
|
2022-01-14 11:46:23 +00:00
|
|
|
def __request_raw_post__ (self, path: str, data: str):
|
2022-01-14 11:16:57 +00:00
|
|
|
|
|
|
|
"""
|
|
|
|
## HTTP RAW POST
|
|
|
|
---
|
|
|
|
Este método é responsável por realizar requisições HTTP do tipo POST para objetos RAW.
|
|
|
|
|
|
|
|
Ele retorna o corpo de resposta da requisição, ou uma mensagem de erro, que indica qual foi a irregularidade ocorrida ao chamar a API.
|
|
|
|
"""
|
|
|
|
|
|
|
|
url = self.ep + path
|
|
|
|
print("Calling: " + url)
|
|
|
|
|
|
|
|
apikey = os.environ.get('REPLAY_APIKEY')
|
|
|
|
headers = {"X-API-KEY": apikey}
|
|
|
|
res = requests.post(url, data = data, headers = headers, verify = False)
|
|
|
|
|
|
|
|
if res.status_code >= 400:
|
|
|
|
raise Exception(f"HTTP ERROR: {str(res.status_code)} - {res.text}")
|
|
|
|
if res.headers.get("Content-Type") != None and res.headers.get("Content-Type").find("json") != -1:
|
|
|
|
return json.loads(res.text)
|
|
|
|
else:
|
|
|
|
return res.text
|
|
|
|
|
2022-01-14 11:46:23 +00:00
|
|
|
def replay_env_queue_id (self):
|
|
|
|
"""
|
|
|
|
## Replay Environment Queue ID
|
|
|
|
---
|
|
|
|
Esta função retorna o valor atribuído à variável de ambiente "REPLAY_QUEUEID", caso exista.
|
|
|
|
"""
|
|
|
|
|
|
|
|
return os.environ.get ("REPLAY_QUEUEID")
|
|
|
|
|
|
|
|
def replay_env_alias (self):
|
|
|
|
"""
|
|
|
|
## Replay Environment Alias
|
|
|
|
---
|
|
|
|
Esta função retorna o valor atribuído à variável de ambiente "REPLAY_ALIAS", caso exista.
|
|
|
|
"""
|
|
|
|
|
|
|
|
return os.environ.get ("REPLAY_ALIAS")
|
|
|
|
|
|
|
|
def replay_env_feature_dir (self):
|
|
|
|
"""
|
|
|
|
## Replay Environment Feature Directory
|
|
|
|
---
|
|
|
|
Esta função retorna o valor atribuído à variável de ambiente "REPLAY_FEATUREDIR", caso exista.
|
|
|
|
"""
|
|
|
|
|
|
|
|
return os.environ.get ("REPLAY_FEATUREDIR")
|
|
|
|
|
|
|
|
def replay_env_root (self):
|
|
|
|
"""
|
|
|
|
## Replay Environment Root
|
|
|
|
---
|
|
|
|
Esta função retorna o valor atribuído à variável de ambiente "REPLAY_ROOT", caso exista.
|
|
|
|
"""
|
|
|
|
|
|
|
|
return os.environ.get ("REPLAY_ROOT")
|
|
|
|
|
|
|
|
def replay_env_addr (self):
|
|
|
|
"""
|
|
|
|
## Replay Environment Address
|
|
|
|
---
|
|
|
|
Esta função retorna o valor atribuído à variável de ambiente "REPLAY_ADDR", caso exista.
|
|
|
|
"""
|
|
|
|
|
|
|
|
return os.environ.get ("REPLAY_ADDR")
|
|
|
|
|
|
|
|
def replay_env_home_dir (self):
|
|
|
|
"""
|
|
|
|
## Replay Environment Home Directory
|
|
|
|
---
|
|
|
|
Esta função retorna o valor atribuído à variável de ambiente "REPLAY_HOMEDIR", caso exista.
|
|
|
|
"""
|
|
|
|
|
|
|
|
return os.environ.get ("REPLAY_HOMEDIR")
|
|
|
|
|
|
|
|
def replay_env_repo (self):
|
|
|
|
"""
|
|
|
|
## Replay Environment Repository
|
|
|
|
---
|
|
|
|
Esta função retorna o valor atribuído à variável de ambiente "REPLAY_REPO", caso exista.
|
|
|
|
"""
|
|
|
|
|
|
|
|
return os.environ.get ("REPLAY_REPO")
|
|
|
|
|
|
|
|
def replay_env_ver (self):
|
|
|
|
"""
|
|
|
|
## Replay Environment Version
|
|
|
|
---
|
|
|
|
Esta função retorna o valor atribuído à variável de ambiente "REPLAY_VER", caso exista.
|
|
|
|
"""
|
|
|
|
|
|
|
|
return os.environ.get ("REPLAY_VER")
|
|
|
|
|
|
|
|
def replay_env_repo_dir (self):
|
|
|
|
"""
|
|
|
|
## Replay Environment Repository Directory
|
|
|
|
---
|
|
|
|
Esta função retorna o valor atribuído à variável de ambiente "REPLAY_REPODIR", caso exista.
|
|
|
|
"""
|
|
|
|
|
|
|
|
return os.environ.get ("REPLAY_REPODIR")
|
|
|
|
|
|
|
|
def replay_env_data_dir (self):
|
|
|
|
"""
|
|
|
|
## Replay Environment Data Directory
|
|
|
|
---
|
|
|
|
Esta função retorna o valor atribuído à variável de ambiente "REPLAY_DATADIR", caso exista.
|
|
|
|
"""
|
|
|
|
|
|
|
|
return os.environ.get ("REPLAY_DATADIR")
|
|
|
|
|
|
|
|
def replay_env_instance_alias (self):
|
|
|
|
"""
|
|
|
|
## Replay Environment Instance Alias
|
|
|
|
---
|
|
|
|
Esta função retorna o valor atribuído à variável de ambiente "REPLAY_INSTANCE_ALIAS", caso exista.
|
|
|
|
"""
|
|
|
|
|
|
|
|
return os.environ.get ("REPLAY_INSTANCE_ALIAS")
|
|
|
|
|
|
|
|
def replay_env_api_key (self):
|
|
|
|
"""
|
|
|
|
## Replay Environment API Key
|
|
|
|
---
|
|
|
|
Esta função retorna o valor atribuído à variável de ambiente "REPLAY_APIKEY", caso exista.
|
|
|
|
"""
|
|
|
|
|
|
|
|
return os.environ.get ("REPLAY_APIKEY")
|
|
|
|
|
2022-01-17 15:25:55 +00:00
|
|
|
def sql (self, command:str):
|
|
|
|
"""
|
|
|
|
## SQL Commands Executer
|
|
|
|
Este método faz um requisição SQL no Replay na aba "Banco de Dados"
|
|
|
|
|
|
|
|
---
|
|
|
|
#### Parâmetros:
|
|
|
|
- command: Comando SQL que se deseja executar.
|
|
|
|
|
|
|
|
---
|
|
|
|
#### Retorna:
|
|
|
|
-> Qualquer que seja o retorno do comando executado.
|
|
|
|
"""
|
|
|
|
|
|
|
|
sql = {
|
|
|
|
"Sql": command
|
|
|
|
}
|
|
|
|
|
|
|
|
return self.__request_json_post__("/api/v1/sql", sql)
|
|
|
|
|
|
|
|
def new_log (self):
|
|
|
|
"""
|
|
|
|
## New Log
|
|
|
|
Este método faz a instanciação de um objeto do tipo "Log" para que ele possa ser registrado no Replay.
|
|
|
|
"""
|
|
|
|
log = {
|
|
|
|
"Alias": str (self.replay_env_alias()),
|
|
|
|
"Dtlog": datetime.now().isoformat() + "Z"
|
|
|
|
}
|
|
|
|
|
|
|
|
return log
|
|
|
|
|
|
|
|
def log (self, log: dict):
|
|
|
|
"""
|
|
|
|
## Log
|
|
|
|
Esta função realiza a postagem de um Log na base de dados do replay, podendo ser visualizado pelo Console.
|
|
|
|
|
|
|
|
---
|
|
|
|
#### Parâmetros:
|
|
|
|
- log: Este parâmetro é uma instância da classe Logs que deve ser criada a partir do método "new_logs".
|
|
|
|
|
|
|
|
---
|
|
|
|
#### Retorna:
|
|
|
|
---
|
|
|
|
"""
|
|
|
|
log["Dtlogend"] = datetime.now().isoformat() + "Z"
|
|
|
|
|
|
|
|
return self.__request_json_post__ ("/api/v1/log/add", log)
|
|
|
|
|