From b4ed041b9544092072c6c443fc61bed32e8ff2b4 Mon Sep 17 00:00:00 2001 From: Tim Peters Date: Tue, 14 Jul 2026 20:04:42 +0200 Subject: [PATCH] Statistiken --- stats.sh | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100755 stats.sh diff --git a/stats.sh b/stats.sh new file mode 100755 index 0000000..a3be0f6 --- /dev/null +++ b/stats.sh @@ -0,0 +1,119 @@ +#!/bin/bash + +DB="$HOME/.local/share/mindwtr/mindwtr.db" + +if [ ! -f "$DB" ]; then + echo "Fehler: Datenbank nicht gefunden: $DB" >&2 + exit 1 +fi + +echo "=== Mindwtr-Statistik ===" +echo + +# ── 1. Aufgaben-Übersicht ── +echo "── Aufgaben (aktiv) ──────────────────" +sqlite3 "$DB" " +SELECT status, COUNT(*) AS count +FROM tasks WHERE deletedAt IS NULL +GROUP BY status +ORDER BY CASE status + WHEN 'inbox' THEN 1 WHEN 'next' THEN 2 + WHEN 'someday' THEN 3 WHEN 'done' THEN 4 +END;" | awk -F'|' '{ printf " %-12s %5s\n", $1, $2 }' + +active=$(sqlite3 "$DB" "SELECT COUNT(*) FROM tasks WHERE deletedAt IS NULL AND status != 'done';") +total=$(sqlite3 "$DB" "SELECT COUNT(*) FROM tasks WHERE deletedAt IS NULL;") +echo " ─────────────────" +printf " %-12s %5s\n" "Aktiv (o. done)" "$active" +printf " %-12s %5s\n" "Gesamt" "$total" +echo + +# ── 2. Fälligkeiten ── +echo "── Fälligkeiten ──────────────────────" +due_overdue=$(sqlite3 "$DB" " +SELECT COUNT(*) FROM tasks +WHERE deletedAt IS NULL AND status != 'done' + AND dueDate IS NOT NULL AND dueDate != '' AND dueDate < datetime('now');") +due_week=$(sqlite3 "$DB" " +SELECT COUNT(*) FROM tasks +WHERE deletedAt IS NULL AND status != 'done' + AND dueDate IS NOT NULL AND dueDate != '' + AND dueDate >= datetime('now') AND dueDate < datetime('now', '+7 days');") +due_today=$(sqlite3 "$DB" " +SELECT COUNT(*) FROM tasks +WHERE deletedAt IS NULL AND status != 'done' + AND dueDate IS NOT NULL AND dueDate != '' + AND date(dueDate) = date('now');") +printf " %-20s %5s\n" "Überfällig" "$due_overdue" +printf " %-20s %5s\n" "Diese Woche" "$due_week" +printf " %-20s %5s\n" "Heute" "$due_today" +echo + +# ── 3. Heutige Aktivität ── +echo "── Heute & diese Woche ───────────────" +created_today=$(sqlite3 "$DB" "SELECT COUNT(*) FROM tasks WHERE date(createdAt) = date('now');") +updated_today=$(sqlite3 "$DB" "SELECT COUNT(*) FROM tasks WHERE date(updatedAt) = date('now');") +done_today=$(sqlite3 "$DB" "SELECT COUNT(*) FROM tasks WHERE date(completedAt) = date('now') AND deletedAt IS NULL;") +done_week=$(sqlite3 "$DB" "SELECT COUNT(*) FROM tasks WHERE completedAt >= datetime('now', '-7 days') AND deletedAt IS NULL;") +printf " %-20s %5s\n" "Heute erstellt" "$created_today" +printf " %-20s %5s\n" "Heute aktualisiert" "$updated_today" +printf " %-20s %5s\n" "Heute erledigt" "$done_today" +printf " %-20s %5s\n" "Diese Woche erledigt" "$done_week" +echo + +# ── 4. Aufgaben-Merkmale ── +echo "── Aufgaben mit ──────────────────────" +sqlite3 "$DB" " +SELECT 'Priorität', COUNT(*) FROM tasks WHERE deletedAt IS NULL AND priority IS NOT NULL AND priority != '' +UNION ALL +SELECT 'Energielevel', COUNT(*) FROM tasks WHERE deletedAt IS NULL AND energyLevel IS NOT NULL AND energyLevel != '' +UNION ALL +SELECT 'Fälligkeitsdatum', COUNT(*) FROM tasks WHERE deletedAt IS NULL AND dueDate IS NOT NULL AND dueDate != '' +UNION ALL +SELECT 'Checkliste', COUNT(*) FROM tasks WHERE deletedAt IS NULL AND checklist IS NOT NULL AND checklist != '[]' +UNION ALL +SELECT 'Wiederkehrend', COUNT(*) FROM tasks WHERE deletedAt IS NULL AND recurrence IS NOT NULL AND recurrence != '' +UNION ALL +SELECT 'Notizen', COUNT(*) FROM tasks WHERE deletedAt IS NULL AND description IS NOT NULL AND description != '' +UNION ALL +SELECT 'Zeitschätzung', COUNT(*) FROM tasks WHERE deletedAt IS NULL AND timeEstimate IS NOT NULL AND timeEstimate != '' +UNION ALL +SELECT 'Heute fokussiert', COUNT(*) FROM tasks WHERE deletedAt IS NULL AND isFocusedToday = 1;" | awk -F'|' '{ printf " %-20s %5s\n", $1, $2 }' +echo + +# ── 5. Top-Kontexte ── +echo "── Top-Kontexte ──────────────────────" +sqlite3 "$DB" " +SELECT j.value AS context, COUNT(*) AS count +FROM tasks t, json_each(t.contexts) j +WHERE t.deletedAt IS NULL +GROUP BY j.value ORDER BY count DESC;" | awk -F'|' '{ printf " %-20s %5s\n", $1, $2 }' +echo + +# ── 6. Top-Schlagwörter ── +echo "── Top-Schlagwörter ──────────────────" +sqlite3 "$DB" " +SELECT j.value AS tag, COUNT(*) AS count +FROM tasks t, json_each(t.tags) j +WHERE t.deletedAt IS NULL +GROUP BY j.value ORDER BY count DESC LIMIT 15;" | awk -F'|' '{ printf " %-20s %5s\n", $1, $2 }' +echo + +# ── 7. Projekte ── +echo "── Projekte ──────────────────────────" +sqlite3 "$DB" " +SELECT COALESCE(p.title, '(kein Projekt)') AS project, COUNT(*) AS tasks +FROM tasks t LEFT JOIN projects p ON t.projectId = p.id +WHERE t.deletedAt IS NULL AND (p.deletedAt IS NULL OR p.id IS NULL) +GROUP BY project ORDER BY tasks DESC;" | awk -F'|' '{ printf " %-30s %5s\n", $1, $2 }' +echo + +# ── 8. Unvollständige Aufgaben ── +echo "── Unvollständige Aufgaben ───────────" +incomplete=$(sqlite3 "$DB" " +SELECT COUNT(*) FROM tasks t +WHERE deletedAt IS NULL + AND ((contexts IS NULL OR contexts = '[]') OR (tags IS NULL OR tags = '[]')) + AND status != 'done';") +echo " $incomplete Aufgaben ohne Kontext und/oder Schlagwort" +echo " (Details: ./incomplete.sh)"