This repository has been archived on 2025-07-20. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
analytics/ingest/worker/worker.go
AKP 0db599df32
Add log prune worker
Signed-off-by: AKP <tom@tdpain.net>
2023-04-05 15:35:11 +01:00

59 lines
1.3 KiB
Go

package worker
import (
"context"
"github.com/codemicro/analytics/ingest/db"
"github.com/codemicro/analytics/ingest/db/models"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"time"
)
const interval = time.Hour
func Start(db *db.DB) {
ticker := time.NewTicker(interval)
logger := log.Logger.With().Str("location", "worker").Logger()
run(db, logger)
go func() {
for {
<-ticker.C
run(db, logger)
}
}()
}
func run(db *db.DB, logger zerolog.Logger) {
logger.Info().Msg("running worker")
tx, err := db.DB.Begin()
if err != nil {
logger.Err(err).Msg("unable to open session")
_ = tx.Rollback()
return
}
_, err = tx.NewDelete().Model(&models.Request{}).
Where(`datetime() > datetime("time", (select value from config where id='prune_requests_after'))`).
Exec(context.Background())
if err != nil {
logger.Err(err).Msg("failed to run request delete query")
_ = tx.Rollback()
return
}
_, err = tx.NewDelete().Model(&models.Session{}).
Where(`(SELECT COUNT(*) FROM requests WHERE "session_id" = "session"."id") = 0`).
Exec(context.Background())
if err != nil {
logger.Err(err).Msg("failed to run session delete query")
_ = tx.Rollback()
return
}
if err := tx.Commit(); err != nil {
logger.Err(err).Msg("failed to commit transaction")
_ = tx.Rollback()
return
}
}