Statistiken

This commit is contained in:
Tim
2026-07-14 20:04:42 +02:00
parent 52a2754971
commit b4ed041b95
Executable
+119
View File
@@ -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)"