Ophestra Umiker
eae3034260
Fortify state store instances was specific to aids due to outdated design decisions carried over from the ego rewrite. That no longer makes sense in the current application, so the interface now enables a single store object to manage all transient state. Signed-off-by: Ophestra Umiker <cat@ophivana.moe>
45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
package state
|
|
|
|
import (
|
|
"time"
|
|
|
|
"git.ophivana.moe/security/fortify/fst"
|
|
)
|
|
|
|
type Entries map[fst.ID]*State
|
|
|
|
type Store interface {
|
|
// Do calls f exactly once and ensures store exclusivity until f returns.
|
|
// Returns whether f is called and any errors during the locking process.
|
|
// Cursor provided to f becomes invalid as soon as f returns.
|
|
Do(aid int, f func(c Cursor)) (ok bool, err error)
|
|
|
|
// List queries the store and returns a list of aids known to the store.
|
|
// Note that some or all returned aids might not have any active apps.
|
|
List() (aids []int, err error)
|
|
|
|
// Close releases any resources held by Store.
|
|
Close() error
|
|
}
|
|
|
|
// Cursor provides access to the store
|
|
type Cursor interface {
|
|
Save(state *State) error
|
|
Destroy(id fst.ID) error
|
|
Load() (Entries, error)
|
|
Len() (int, error)
|
|
}
|
|
|
|
// State is the on-disk format for a fortified process's state information
|
|
type State struct {
|
|
// fortify instance id
|
|
ID fst.ID `json:"instance"`
|
|
// child process PID value
|
|
PID int `json:"pid"`
|
|
// sealed app configuration
|
|
Config *fst.Config `json:"config"`
|
|
|
|
// process start time
|
|
Time time.Time
|
|
}
|