{backup,snapshot}: Log and display in control
This commit is contained in:
parent
3b112f1b8e
commit
630da9e12f
17 changed files with 294 additions and 44 deletions
73
internal/component/instances/wisski_log.go
Normal file
73
internal/component/instances/wisski_log.go
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
package instances
|
||||
|
||||
import (
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/models"
|
||||
"github.com/FAU-CDI/wisski-distillery/pkg/environment"
|
||||
"github.com/FAU-CDI/wisski-distillery/pkg/slicesx"
|
||||
)
|
||||
|
||||
// SnapshotLogFor retrieves (and prunes) the SnapshotLog for the provided slug.
|
||||
// An empty slug returns the log of backups.
|
||||
func (instances *Instances) SnapshotLogFor(slug string) (snapshots []models.Snapshot, err error) {
|
||||
snapshots, err = instances.SnapshotLog()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return slicesx.Filter(snapshots, func(s models.Snapshot) bool {
|
||||
return s.Slug == slug
|
||||
}), nil
|
||||
}
|
||||
|
||||
// SnapshotLog retrieves (and prunes) all entries in the snapshot log.
|
||||
func (instances *Instances) SnapshotLog() ([]models.Snapshot, error) {
|
||||
// query the table!
|
||||
table, err := instances.SQL.QueryTable(false, models.SnapshotTable)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// find all the snapshots
|
||||
var snapshots []models.Snapshot
|
||||
res := table.Find(&snapshots)
|
||||
if res.Error != nil {
|
||||
return nil, res.Error
|
||||
}
|
||||
|
||||
// partition out the snapshots that have been deleted!
|
||||
parts := slicesx.Partition(snapshots, func(s models.Snapshot) bool {
|
||||
_, err := instances.Core.Environment.Stat(s.Path)
|
||||
return !environment.IsNotExist(err)
|
||||
})
|
||||
|
||||
// go and delete them!
|
||||
if len(parts[false]) > 0 {
|
||||
if err := table.Delete(parts[false]).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
// return the ones that still exist
|
||||
return parts[true], nil
|
||||
}
|
||||
|
||||
// Snapshots returns the list of snapshots of this WissKI
|
||||
func (wisski *WissKI) Snapshots() (snapshots []models.Snapshot, err error) {
|
||||
return wisski.instances.SnapshotLogFor(wisski.Slug)
|
||||
}
|
||||
|
||||
// AddSnapshotLog adds a log entry for the provided entry
|
||||
func (instances *Instances) AddSnapshotLog(snapshot models.Snapshot) error {
|
||||
// find the table
|
||||
table, err := instances.SQL.QueryTable(false, models.SnapshotTable)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// and save it!
|
||||
res := table.Create(&snapshot)
|
||||
if res.Error != nil {
|
||||
return res.Error
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/models"
|
||||
"github.com/tkw1536/goprogram/stream"
|
||||
"golang.org/x/sync/errgroup"
|
||||
)
|
||||
|
|
@ -20,6 +21,9 @@ type WissKIInfo struct {
|
|||
Running bool
|
||||
LastRebuild time.Time
|
||||
|
||||
// List of backups made
|
||||
Snapshots []models.Snapshot
|
||||
|
||||
// WissKI content information
|
||||
Prefixes []string // list of prefixes
|
||||
Pathbuilders map[string]string // all the pathbuilders
|
||||
|
|
@ -59,6 +63,10 @@ func (wisski *WissKI) Info(quick bool) (info WissKIInfo, err error) {
|
|||
info.Prefixes, _ = wisski.Prefixes()
|
||||
return nil
|
||||
})
|
||||
group.Go(func() error {
|
||||
info.Snapshots, _ = wisski.Snapshots()
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
err = group.Wait()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue