import tkinter as tk
from tkinter import ttk
import psycopg2
from tkinter import messagebox
def fetch_logs():
try:
# Verbinding maken met de PostgreSQL database op FreeBSD
conn = psycopg2.connect(
host="127.0.0.1",
database="logs",
user="x",
password="x",
connect_timeout=3
)
cur = conn.cursor()
# Haal de laatste 100 logs op voor het overzicht
cur.execute("SELECT datetime, program, msg FROM logs ORDER BY datetime DESC LIMIT 100")
rows = cur.fetchall()
# Bestaande rijen verwijderen voor de verversing
for i in tree.get_children():
tree.delete(i)
# Nieuwe data invoegen
for row in rows:
tree.insert("", "end", values=row)
cur.close()
conn.close()
except psycopg2.Error as e:
print(f"Database fout: {e}")
# Optioneel: toon een waarschuwing in de GUI als de verbinding wegvalt
# Vernieuw de data elke 5 seconden (5000ms)
root.after(5000, fetch_logs)
# --- GUI Setup ---
root = tk.Tk()
root.title("FreeBSD Syslog-ng Monitor")
root.geometry("1000x500")
# Container voor de tabel en scrollbar
main_frame = tk.Frame(root)
main_frame.pack(fill="both", expand=True, padx=10, pady=10)
# De Tabel (Treeview)
columns = ("datetime", "program", "message")
tree = ttk.Treeview(main_frame, columns=columns, show='headings', selectmode="browse")
# Kolomkoppen en breedtes instellen
tree.heading("datetime", text="Tijdstip")
tree.heading("program", text="Programma")
tree.heading("message", text="Log Bericht")
tree.column("datetime", width=200, anchor="w")
tree.column("program", width=120, anchor="w")
tree.column("message", width=600, anchor="w")
# De Scrollbar toevoegen
scrollbar = ttk.Scrollbar(main_frame, orient="vertical", command=tree.yview)
tree.configure(yscrollcommand=scrollbar.set)
# Lay-out van tabel en scrollbar (naast elkaar)
tree.pack(side="left", fill="both", expand=True)
scrollbar.pack(side="right", fill="y")
# Statusbalk onderaan
status_label = tk.Label(root, text="Live verbinding met PostgreSQL: logs", bd=1, relief="sunken", anchor="w")
status_label.pack(side="bottom", fill="x")
# Start de eerste data-ophaling
fetch_logs()
# De applicatie starten
root.mainloop()