Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Repo 9 Merge

Fazer download em pdf ou txt
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


dates_with_most_entries = sorted(dates_with_most_entries.items(), key=lambda x: x[1], reverse=True)

with open("relatorio.txt", "w") as file:


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.")

# Gerar relatório
gerar_relatorio(entries)

Você também pode gostar