57 lines
923 B
Go
57 lines
923 B
Go
package useractivity
|
|
|
|
import (
|
|
"path"
|
|
"time"
|
|
|
|
storm "github.com/asdine/storm/v3"
|
|
)
|
|
|
|
const (
|
|
cleanupInterval = 24 * time.Hour
|
|
maxLogsAge = 7
|
|
)
|
|
|
|
// Store is a store for user activities
|
|
type Store struct {
|
|
db *dbWrapper
|
|
cleanupStopSignal chan struct{}
|
|
}
|
|
|
|
// dbWrapper wraps the storm db type to make it interchangeable
|
|
type dbWrapper struct {
|
|
*storm.DB
|
|
}
|
|
|
|
const databaseFileName = "useractivity.db"
|
|
|
|
// NewUserActivityStore Creates a new store
|
|
func NewUserActivityStore(dataPath string) (*Store, error) {
|
|
databasePath := path.Join(dataPath, databaseFileName)
|
|
|
|
db, err := storm.Open(databasePath)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
store := &Store{
|
|
db: &dbWrapper{
|
|
DB: db,
|
|
},
|
|
}
|
|
|
|
err = store.startCleanupLoop()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return store, nil
|
|
}
|
|
|
|
// Close closes the DB
|
|
func (store *Store) Close() error {
|
|
store.stopCleanupLoop()
|
|
|
|
return store.db.Close()
|
|
}
|