[Fx] PROVIDE fx.Lifecycle <= go.uber.org/fx.New.func1() [Fx] PROVIDE fx.Shutdowner <= go.uber.org/fx.(*App).shutdowner-fm() [Fx] PROVIDE fx.DotGraph <= go.uber.org/fx.(*App).dotGraph-fm() [Fx] PROVIDE *logger.Logger <= git.eeqj.de/sneak/routewatch/internal/logger.New() [Fx] PROVIDE *config.Config <= git.eeqj.de/sneak/routewatch/internal/config.New() [Fx] PROVIDE *metrics.Tracker <= git.eeqj.de/sneak/routewatch/internal/metrics.New() [Fx] PROVIDE database.Store <= fx.Annotate(git.eeqj.de/sneak/routewatch/internal/database.New(), fx.As([[database.Store]]) [Fx] PROVIDE *streamer.Streamer <= git.eeqj.de/sneak/routewatch/internal/streamer.New() [Fx] PROVIDE *server.Server <= git.eeqj.de/sneak/routewatch/internal/server.New() [Fx] PROVIDE *routewatch.RouteWatch <= git.eeqj.de/sneak/routewatch/internal/routewatch.New() [Fx] INVOKE git.eeqj.de/sneak/routewatch/internal/routewatch.CLIEntry.func1() [Fx] BEFORE RUN provide: go.uber.org/fx.New.func1() [Fx] RUN provide: go.uber.org/fx.New.func1() in 4.583µs [Fx] BEFORE RUN provide: git.eeqj.de/sneak/routewatch/internal/config.New() [Fx] RUN provide: git.eeqj.de/sneak/routewatch/internal/config.New() in 6µs [Fx] BEFORE RUN provide: git.eeqj.de/sneak/routewatch/internal/logger.New() [Fx] RUN provide: git.eeqj.de/sneak/routewatch/internal/logger.New() in 4.583µs [Fx] BEFORE RUN provide: fx.Annotate(git.eeqj.de/sneak/routewatch/internal/database.New(), fx.As([[database.Store]]) {"time":"2025-07-28T18:06:25.516199+02:00","level":"INFO","msg":"Opening database","source":"database.go:60","func":"database.New","path":"/Users/user/Library/Application Support/berlin.sneak.app.routewatch/db.sqlite"} {"time":"2025-07-28T18:06:26.16961+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"PRAGMA wal_checkpoint(TRUNCATE)","duration":250634583} {"time":"2025-07-28T18:06:26.169794+02:00","level":"INFO","msg":"Running VACUUM to optimize database (this may take a moment)","source":"database.go:128","func":"database.(*Database).Initialize"}