-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
74 lines (69 loc) · 2.36 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package main
import (
"log/slog"
"os"
"time"
"github.com/luissimas/zettelkasten-exporter/internal/collector"
"github.com/luissimas/zettelkasten-exporter/internal/config"
"github.com/luissimas/zettelkasten-exporter/internal/storage"
"github.com/luissimas/zettelkasten-exporter/internal/zettelkasten"
)
func main() {
// Setup
cfg, err := config.LoadConfig()
logger := slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: cfg.LogLevel}))
slog.SetDefault(logger)
if err != nil {
slog.Error("Error loading config", slog.Any("error", err))
os.Exit(1)
}
slog.Debug("Loaded config", slog.Any("config", cfg))
var metricsStorage storage.Storage
if cfg.VictoriaMetricsURL != "" {
metricsStorage = storage.NewVictoriaMetricsStorage(cfg.VictoriaMetricsURL)
} else {
metricsStorage = storage.NewInfluxDBStorage(cfg.InfluxDBURL, cfg.InfluxDBOrg, cfg.InfluxDBBucket, cfg.InfluxDBToken)
}
collector := collector.NewCollector(cfg.IgnoreFiles, metricsStorage)
var zet zettelkasten.Zettelkasten
if cfg.ZettelkastenGitURL != "" {
zet = zettelkasten.NewGitZettelkasten(cfg.ZettelkastenGitURL, cfg.ZettelkastenGitBranch, cfg.ZettelkastenGitToken)
} else {
zet = zettelkasten.NewLocalZettelkasten(cfg.ZettelkastenDirectory)
}
// Collect historical data
if cfg.CollectHistoricalMetrics {
slog.Info("Collecting historical metrics")
start := time.Now()
err = zet.Ensure()
if err != nil {
slog.Error("Error ensuring that zettelkasten is ready", slog.Any("error", err))
os.Exit(1)
}
slog.Info("Walking zettelkasten history")
err = zet.WalkHistory(collector.CollectMetrics)
if err != nil {
slog.Error("Error walking history", slog.Any("error", err))
os.Exit(1)
}
slog.Info("Collected historical metrics", slog.Duration("duration", time.Since(start)))
}
// Periodic collection loop
for {
slog.Info("Starting metrics collection")
start := time.Now()
err = zet.Ensure()
if err != nil {
slog.Error("Error ensuring that zettelkasten is ready", slog.Any("error", err))
os.Exit(1)
}
root := zet.GetRoot()
err = collector.CollectMetrics(root, time.Now())
if err != nil {
slog.Error("Error collecting metrics", slog.Any("error", err))
os.Exit(1)
}
slog.Info("Collected metrics", slog.Duration("duration", time.Since(start)), slog.Time("next_run", time.Now().Add(cfg.CollectionInterval)))
time.Sleep(cfg.CollectionInterval)
}
}