add snapshots list api

This commit is contained in:
shoopea 2025-10-26 10:32:53 +01:00
parent 05054be795
commit a1ba422429
3 changed files with 97 additions and 7 deletions

18
api.go
View File

@ -50,6 +50,24 @@ func ApiSnapshotDel(c *gin.Context) {
} }
func ApiSnapshotList(c *gin.Context) { func ApiSnapshotList(c *gin.Context) {
if app, ok := cfg.apps[c.Param("app")]; ok {
if snapshots, err := app.Snapshots(); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{
"message": "error",
"error": err,
})
} else {
c.JSON(http.StatusOK, gin.H{
"message": "done",
"snapshots": snapshots,
})
}
} else {
c.JSON(http.StatusInternalServerError, gin.H{
"message": "error",
"error": "no app found",
})
}
c.JSON(http.StatusInternalServerError, gin.H{ c.JSON(http.StatusInternalServerError, gin.H{
"message": "error", "message": "error",
"error": "not implemented", "error": "not implemented",

78
app.go
View File

@ -503,7 +503,7 @@ func (a *App) Transfer() error {
return nil return nil
} }
func (a *App) Boxes() []*Box { func (a *App) AllBoxes() []*Box {
log.WithFields(log.Fields{"app": a.name}).Debugf("starting") log.WithFields(log.Fields{"app": a.name}).Debugf("starting")
defer log.WithFields(log.Fields{"app": a.name}).Debugf("done") defer log.WithFields(log.Fields{"app": a.name}).Debugf("done")
@ -534,6 +534,33 @@ func (a *App) Boxes() []*Box {
return bx return bx
} }
func (a *App) SourceBoxes() []*Box {
log.WithFields(log.Fields{"app": a.name}).Debugf("starting")
defer log.WithFields(log.Fields{"app": a.name}).Debugf("done")
bm := make(map[string]struct{})
for _, s := range a.sources {
bm[s.Box()] = struct{}{}
}
for _, b := range a.before {
bm[b.Box()] = struct{}{}
}
for _, af := range a.after {
bm[af.Box()] = struct{}{}
}
bx := make([]*Box, 0)
for n := range bm {
bx = append(bx, cfg.box[n])
}
return bx
}
func (a *App) RunStandaloneTime(now time.Time) error { func (a *App) RunStandaloneTime(now time.Time) error {
log.WithFields(log.Fields{"app": a.name}).Debugf("starting") log.WithFields(log.Fields{"app": a.name}).Debugf("starting")
defer log.WithFields(log.Fields{"app": a.name}).Debugf("done") defer log.WithFields(log.Fields{"app": a.name}).Debugf("done")
@ -548,7 +575,7 @@ func (a *App) RunStandaloneTime(now time.Time) error {
cfgRun = true cfgRun = true
defer func() { cfgRun = false }() defer func() { cfgRun = false }()
boxes := a.Boxes() boxes := a.AllBoxes()
var wg sync.WaitGroup var wg sync.WaitGroup
@ -593,7 +620,7 @@ func (a *App) RunStandaloneSchedule(name string) error {
cfgRun = true cfgRun = true
defer func() { cfgRun = false }() defer func() { cfgRun = false }()
boxes := a.Boxes() boxes := a.AllBoxes()
var wg sync.WaitGroup var wg sync.WaitGroup
@ -614,3 +641,48 @@ func (a *App) RunStandaloneSchedule(name string) error {
return a.RunSchedule(name, time.Now()) return a.RunSchedule(name, time.Now())
} }
func (a *App) Snapshots() ([]string, error) {
log.WithFields(log.Fields{"app": a.name}).Debugf("starting")
defer log.WithFields(log.Fields{"app": a.name}).Debugf("done")
CfgLock()
defer CfgUnlock()
cfgRun = true
defer func() { cfgRun = false }()
boxes := a.SourceBoxes()
var wg sync.WaitGroup
// Open boxes
for _, b := range boxes {
wg.Add(1)
go func(box *Box) {
defer wg.Done()
if err := box.Open(); err != nil {
log.WithFields(log.Fields{"name": box.name, "call": "Open", "error": err}).Errorf("")
return
}
}(b)
defer b.Close()
}
wg.Wait()
names := make([]string, 0)
for _, src := range a.sources {
if snapshots, err := src.ValidSnapshots(); err != nil {
log.WithFields(log.Fields{"call": "ValidSnapshots", "attr": src, "error": err}).Errorf("")
return names, err
} else {
for _, snapshot := range snapshots {
names = append(names, snapshot.name)
}
}
}
return names, nil
}

View File

@ -1,7 +1,7 @@
// Code generated by version.sh (@generated) DO NOT EDIT. // Code generated by version.sh (@generated) DO NOT EDIT.
package main package main
var githash = "73f9551" var githash = "05054be"
var branch = "master" var branch = "master"
var buildstamp = "2025-10-19_19:40:05" var buildstamp = "2025-10-26_09:32:26"
var commits = "115" var commits = "116"
var version = "73f9551-b115 - 2025-10-19_19:40:05" var version = "05054be-b116 - 2025-10-26_09:32:26"