Baixe no formato PDF, TXT ou leia online no Scribd
Fazer download em pdf ou txt
Você está na página 1de 3
import os
import datetime
# Constantes para os níveis de severidade
LEVELS = ["INFO", "AVISO", "ERRO"]
# Função para carregar o ficheiro de registo
def carregar_registo(filename): """Carrega o conteúdo do ficheiro de registo e retorna uma lista de entradas.""" entries = [] try: with open(filename, "r") as file: for line in file: data, level, message = line.strip().split(",") entry = { "data": datetime.datetime.strptime(data, "%d/%m/%Y %H:%M:%S"), "nivel": level, "mensagem": message } entries.append(entry) except FileNotFoundError: print(f"Erro: O ficheiro '{filename}' não foi encontrado.") except ValueError: print("Erro: O formato do ficheiro de registo está incorreto.") return entries
# Função para exibir todas as entradas de registo
def exibir_entradas(entries): """Exibe todas as entradas de registo em um formato legível.""" for entry in entries: print(f"{entry['data'].strftime('%d/%m/%Y %H:%M:%S')} - {entry['nivel']} - {entry['mensagem']}")
# Função para filtrar entradas por nível de severidade
def filtrar_por_nivel(entries, level): """Filtra as entradas de registo por nível de severidade.""" filtered_entries = [entry for entry in entries if entry["nivel"] == level] return filtered_entries
# Função para filtrar entradas por data
def filtrar_por_data(entries, date): """Filtra as entradas de registo por data.""" filtered_entries = [entry for entry in entries if entry["data"].date() == date] return filtered_entries
# Função para adicionar uma nova entrada de registo
def adicionar_entrada(filename, data, level, message): """Adiciona uma nova entrada de registo ao ficheiro.""" try: with open(filename, "a") as file: file.write(f"{data.strftime('%d/%m/%Y %H:%M:%S')},{level},{message}\n") except OSError: print(f"Erro: Não foi possível escrever no ficheiro '{filename}'.")
# Função para gerar o relatório
def gerar_relatorio(entries): """Gera um relatório com informações estatísticas sobre as entradas de registo.""" total_entries = len(entries) entry_counts = {level: 0 for level in LEVELS} dates_with_most_entries = {}
for entry in entries:
entry_counts[entry["nivel"]] += 1 date = entry["data"].date() if date in dates_with_most_entries: dates_with_most_entries[date] += 1 else: dates_with_most_entries[date] = 1
# Ordenar as datas com mais entradas por ordem decrescente
file.write("Relatório de Registo de Sistema\n\n") file.write(f"Total de entradas: {total_entries}\n") file.write("Entradas por nível de severidade:\n") for level, count in entry_counts.items(): file.write(f"- {level}: {count}\n") file.write("\nDatas com mais entradas:\n") for date, count in dates_with_most_entries: file.write(f"- {date.strftime('%d/%m/%Y')}: {count}\n")
print("Relatório gerado com sucesso!")
# Exemplo de uso filename = "registo.txt" entries = carregar_registo(filename)
# Exibir todas as entradas
exibir_entradas(entries)
# Filtrar por nível
filtered_entries = filtrar_por_nivel(entries, "ERRO") print("\nEntradas de nível 'ERRO':") exibir_entradas(filtered_entries)
# Filtrar por data
date = datetime.date(2023, 6, 1) filtered_entries = filtrar_por_data(entries, date) print(f"\nEntradas do dia {date.strftime('%d/%m/%Y')}:") exibir_entradas(filtered_entries) # Adicionar nova entrada new_entry = { "data": datetime.datetime.now(), "nivel": "INFO", "mensagem": "Nova entrada de registo" } adicionar_entrada(filename, new_entry["data"], new_entry["nivel"], new_entry["mensagem"]) print("\nNova entrada adicionada ao registo.")