monitoring-api/packages/v1/administrativo/controllers/log_controller.py

290 lines
No EOL
9.8 KiB
Python

from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.schemas.log_schema import (
LogSchema,
LogAuthenticateSchema,
LogSaveSchema,
LogUpdateSchema,
LogIdSchema,
LogFileSchema,
LogClientIdSchema
)
import json # Necessário para carregar o arquivo app.json
import math
# Carrega as configurações de paginação do app.json
with open('config/app.json', 'r') as f:
app_config = json.load(f)
PAGINATION_FIRST = app_config.get('pagination', {}).get('first', 20)
PAGINATION_SKIP = app_config.get('pagination', {}).get('skip', 0)
class LogController:
"""
Controller responsável por orquestrar as operações (CRUD e outras buscas)
para a tabela 'log'.
"""
def __init__(self):
# Action responsável por carregar as services de acordo com o estado
self.dynamic_import = DynamicImport()
# Define o pacote que deve ser carregado
self.dynamic_import.set_package("administrativo")
# Define a tabela que o pacote pertence
self.dynamic_import.set_table("log")
pass
# Efetua a busca por algum critério de autenticação/filtro
def authenticate(self, log_authenticate_schema: LogAuthenticateSchema):
# Importação de service de Authenticate
authenticate_service = self.dynamic_import.service("log_authenticate_service", "AuthenticateService")
# Instânciamento da service
self.authenticate_service = authenticate_service()
# Retorna o log ou logs localizados
return {
'message': 'Log(s) localizado(s) com sucesso',
'data': self.authenticate_service.execute(log_authenticate_schema)
}
# Carrega os dados de um log (adaptado de 'me' para logs, se aplicável)
def me(self, current_log):
# Esta função é incomum para um log, mas adaptada do original 'me' (usuário logado)
# Importação de service de me
me_service = self.dynamic_import.service("log_me_service", "MeService")
# Instânciamento da service
self.me_service = me_service()
# Retorna o log completo
return {
'message': 'Log localizado com sucesso',
'data': self.me_service.execute(current_log)
}
# Lista todos os logs com paginação
def index(self, first: int = PAGINATION_FIRST, skip: int = PAGINATION_SKIP):
# Importação da classe desejada
indexService = self.dynamic_import.service("log_index_service", "IndexService")
# Instânciamento da classe service
self.indexService = indexService()
# Lista todos os logs, recebendo a lista de dados e o total de registros
data, total_records = self.indexService.execute(first, skip)
# Cálculo dos metadados de paginação
total_pages = math.ceil(total_records / first)
current_page = (skip // first) + 1
next_page = None
# Verifica se existe uma próxima página
if current_page < total_pages:
next_page = current_page + 1
# Retorna a lista de logs e os metadados de paginação
return {
'message': 'Logs localizados com sucesso',
'data': data,
'pagination': {
'total_records': total_records,
'total_pages': total_pages,
'current_page': current_page,
'next_page': next_page,
'first': first, # Total de registros por página
'skip': skip # Registros pulados
}
}
# Busca um log específico pelo client_id
def logClient(self, log_schema: LogClientIdSchema):
#Importação da classe desejada
cliente_service = self.dynamic_import.service('log_cliente_service', 'LogClientService')
# Instânciamento da classe desejada
self.cliente_service = cliente_service()
# Busca e retorna o log desejado
return {
'message': 'Log\'s localizados com sucesso',
'data': self.cliente_service.execute(log_schema)
}
# Busca um log específico pelo ID (log_id)
def show(self, log_schema: LogSchema):
#Importação da classe desejada
show_service = self.dynamic_import.service('log_show_service', 'ShowService')
# Instânciamento da classe desejada
self.show_service = show_service()
# Busca e retorna o log desejado
return {
'message': 'Log localizado com sucesso',
'data': self.show_service.execute(log_schema)
}
# Busca um log específico pelo campo 'file' (adaptado de getEmail)
def getFile(self, log_schema: LogFileSchema):
# Importação da classe desejada
get_file_service = self.dynamic_import.service('log_get_file_service', 'GetFileService')
# Instânciamento da classe desejada
self.get_file_service = get_file_service()
# Busca e retorna o log desejado
return {
'message': 'Arquivo localizado com sucesso no log',
'data': self.get_file_service.execute(log_schema, True)
}
# Cadastra um novo log
def save(self, log_schema: LogSaveSchema):
#Importação da classe desejada
save_service = self.dynamic_import.service('log_save_service', 'LogSaveService')
# Instânciamento da classe desejada
self.save_service = save_service()
# Busca e retorna o log desejado
return {
'message': 'Log salvo com sucesso',
'data': self.save_service.execute(log_schema)
}
# Atualiza os dados de um log
def update(self, log_id: int, log_schema: LogUpdateSchema):
#Importação da classe desejada
update_service = self.dynamic_import.service('log_update_service', 'LogUpdateService')
# Instânciamento da classe desejada
self.update_service = update_service()
# Busca e retorna o log desejado
return {
'message': 'Log atualizado com sucesso',
'data': self.update_service.execute(log_id, log_schema)
}
# Exclui um log
def delete(self, log_schema: LogIdSchema):
#Importação da classe desejada
delete_service = self.dynamic_import.service('log_delete_service', 'DeleteService')
# Instânciamento da classe desejada
self.delete_service = delete_service()
# Busca e retorna o log desejado
return {
'message': 'Log removido com sucesso',
'data': self.delete_service.execute(log_schema)
}
# Localiza os dados do GED pelo ID do cliente
def getGed(self, log_schema: LogClientIdSchema):
#Importação da classe desejada
log_show_ged_service = self.dynamic_import.service('log_show_ged_service', 'ShowGedService')
# Instânciamento da classe desejada
self.log_show_ged_service = log_show_ged_service()
# Busca e retorna o log desejado
return {
'message': 'Visualização de LOG',
'data': self.log_show_ged_service.execute(log_schema)
}
# Localiza os dados do GED pelo ID do cliente
def getServer(self, log_schema: LogClientIdSchema):
#Importação da classe desejada
log_show_server_service = self.dynamic_import.service('log_show_server_service', 'ShowServerService')
# Instânciamento da classe desejada
self.log_show_server_service = log_show_server_service()
# Busca e retorna o log desejado
return {
'message': 'Visualização de LOG',
'data': self.log_show_server_service.execute(log_schema)
}
# Localiza os dados do database pelo ID do cliente
def getDatabase(self, log_schema: LogClientIdSchema):
#Importação da classe desejada
log_show_database_service = self.dynamic_import.service('log_show_database_service', 'ShowDatabaseService')
# Instânciamento da classe desejada
self.log_show_database_service = log_show_database_service()
# Busca e retorna o log desejado
return {
'message': 'Visualização de LOG',
'data': self.log_show_database_service.execute(log_schema)
}
# Localiza os dados do database pelo ID do cliente
def getBackup(self, log_schema: LogClientIdSchema):
#Importação da classe desejada
log_show_backup_service = self.dynamic_import.service('log_show_backup_service', 'ShowBackupService')
# Instânciamento da classe desejada
self.log_show_backup_service = log_show_backup_service()
# Busca e retorna o log desejado
return {
'message': 'Visualização de LOG',
'data': self.log_show_backup_service.execute(log_schema)
}
# Localiza os dados do database pelo ID do cliente
def getDisk(self, log_schema: LogClientIdSchema):
#Importação da classe desejada
log_show_disk_service = self.dynamic_import.service('log_show_disk_service', 'ShowDiskService')
# Instânciamento da classe desejada
self.log_show_disk_service = log_show_disk_service()
# Busca e retorna o log desejado
return {
'message': 'Visualização de LOG',
'data': self.log_show_disk_service.execute(log_schema)
}
# Localiza os dados do database pelo ID do cliente
def getWarning(self, log_schema: LogClientIdSchema):
#Importação da classe desejada
log_show_warning_service = self.dynamic_import.service('log_show_warning_service', 'ShowWarningService')
# Instânciamento da classe desejada
self.log_show_warning_service = log_show_warning_service()
# Busca e retorna o log desejado
return {
'message': 'Visualização de LOG',
'data': self.log_show_warning_service.execute(log_schema)
}