Files
pocket-id/backend/internal/auditlogs/module.go
T
ItalyPaleAle fadb1a5552 feat: add FRANCIS_HOST to connect to a standalone Francis runtime
FRANCIS_HOST decides where the Francis actor runtime lives. When set to "embedded" (the default), Pocket ID starts the runtime inside its own process.

Any other value is the address, or a comma-separated list of addresses, of a standalone Francis runtime. Pocket ID then connects to it as a remote actor host and starts no embedded runtime.

Because when using a remote runtime, it's likewise not possible to enforce a single instance of Pocket ID is running at once, the env vars currently have the `EXPERIMENTAL_` prefix, are **undocumented**, and show a warning if used.

Notes:

- Connecting to a standalone runtime also needs FRANCIS_HOST_PSK or FRANCIS_HOST_JWT_FILE, and optionally (but recommended) FRANCIS_CA.
- When connecting to a remote runtime, exporting Pocket ID data does not include the actor state, which will need to be backed up and restored separately
2026-09-19 23:38:18 -07:00

45 lines
1.0 KiB
Go

// Package auditlogs owns the background maintenance of the audit log table.
package auditlogs
import (
"errors"
"fmt"
francishost "github.com/italypaleale/francis/host"
"gorm.io/gorm"
)
type Dependencies struct {
DB *gorm.DB
Actors francishost.Host
// RetentionDays is how long audit logs are kept before the cleanup job deletes them
RetentionDays int
// CleanupDisabled skips registering the cleanup cron job, for example in tests
CleanupDisabled bool
}
type Module struct{}
func New(deps Dependencies) (*Module, error) {
// Register the cleanup job for audit logs past the retention window
if !deps.CleanupDisabled {
if deps.Actors == nil {
return nil, errors.New("actor host is required for the audit log cleanup cron job")
}
cleanupJob, err := newCleanupJob(deps.DB, deps.RetentionDays)
if err != nil {
return nil, err
}
err = deps.Actors.RegisterBuiltInActor(cleanupJob)
if err != nil {
return nil, fmt.Errorf("error registering audit log cleanup cron actor: %w", err)
}
}
return &Module{}, nil
}