Metrics and logs - MongoDB Submission (#43)

Adds MongoDB-backed submission for survey statistics/metrics and introduces MongoDB ObjectID-based participant/task identifiers to support upserts and linking metrics to a participant.

It introduces breaking changes to the exsisting json stat and metric files. Delete the old ones

Changes:

Add internal/storage/MongoStorage and wire pm survey submit / pm start to submit local .pm/*.json files to MongoDB.
Extend stats/metrics models to include MongoDB _id / participant_id fields and add participant ID propagation into task metrics.
Update app initialization to generate ObjectIDs for new participants and expose GetParticipantID() via StatsService.
This commit is contained in:
Robin Olsen
2026-03-10 06:09:31 -07:00
committed by GitHub
parent 549415135c
commit 72a2e8acf5
17 changed files with 426 additions and 197 deletions

View File

@@ -2,20 +2,31 @@ package main
import (
"context"
"log"
"os"
"github.com/LazyBachelor/LazyPM/cmd/pm/tasks"
"github.com/LazyBachelor/LazyPM/internal/app"
"github.com/LazyBachelor/LazyPM/internal/commands/issues"
"github.com/LazyBachelor/LazyPM/internal/commands/survey"
"github.com/LazyBachelor/LazyPM/internal/models"
"github.com/LazyBachelor/LazyPM/pkg/repl"
"github.com/LazyBachelor/LazyPM/pkg/task"
"github.com/LazyBachelor/LazyPM/pkg/tui"
"github.com/LazyBachelor/LazyPM/pkg/web"
"github.com/joho/godotenv"
"github.com/spf13/cobra"
)
func init() {
err := godotenv.Load(".env")
if err != nil {
log.Println("Error loading .env file")
}
models.BaseConfig = models.BaseConfig.LoadFromEnv()
task.RegisterInterface("tui", tui.New())
task.RegisterInterface("web", web.New())
task.RegisterInterface("repl", repl.New())
@@ -169,6 +180,8 @@ func commandNeedsApp(cmd *cobra.Command) bool {
func ensureAppInitialized(ctx context.Context) error {
if App != nil {
survey.SetApp(App)
issues.SetApp(App)
return nil
}