add custom snapshot
This commit is contained in:
95
app.go
95
app.go
@@ -260,6 +260,11 @@ func (a *App) RunSchedule(schedule string, now time.Time) error {
|
||||
log.WithFields(log.Fields{"app": a.name, "schedule": schedule, "now": now}).Debugf("starting")
|
||||
defer log.WithFields(log.Fields{"app": a.name, "schedule": schedule, "now": now}).Debugf("done")
|
||||
|
||||
if err := a.SanityCheck(); err != nil {
|
||||
log.WithFields(log.Fields{"app": a.name, "now": now, "call": "SanityCheck", "error": err}).Errorf("")
|
||||
return err
|
||||
}
|
||||
|
||||
snapshotName := SnapshotName(schedule, now)
|
||||
log.WithFields(log.Fields{"app": a.name, "schedule": schedule, "now": now, "snapshot": snapshotName}).Debugf("snapshot name")
|
||||
|
||||
@@ -279,19 +284,31 @@ func (a *App) RunSchedule(schedule string, now time.Time) error {
|
||||
log.WithFields(log.Fields{"app": a.name, "schedule": schedule, "now": now, "call": "RunAfter", "attr": schedule, "error": err}).Errorf("")
|
||||
}
|
||||
|
||||
for _, src := range a.sources {
|
||||
if err := src.SetManaged(true); err != nil {
|
||||
log.WithFields(log.Fields{"app": a.name, "call": "src.SetManaged", "error": err}).Errorf("")
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if err := a.Transfer(); err != nil {
|
||||
log.WithFields(log.Fields{"app": a.name, "call": "Transfer", "error": err}).Errorf("")
|
||||
return err
|
||||
}
|
||||
|
||||
if err := a.Cleanup(now); err != nil {
|
||||
log.WithFields(log.Fields{"app": a.name, "call": "Cleanup", "error": err}).Errorf("")
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
func (a *App) Run(now time.Time) (string, error) {
|
||||
func (a *App) RunTime(now time.Time) (string, error) {
|
||||
log.WithFields(log.Fields{"app": a.name, "now": now}).Debugf("starting")
|
||||
defer log.WithFields(log.Fields{"app": a.name, "now": now}).Debugf("done")
|
||||
|
||||
if err := a.SanityCheck(); err != nil {
|
||||
log.WithFields(log.Fields{"app": a.name, "now": now, "call": "SanityCheck", "error": err}).Errorf("")
|
||||
return "", err
|
||||
}
|
||||
|
||||
schedule, err := a.NextSchedule(now)
|
||||
if err != nil {
|
||||
log.WithFields(log.Fields{"app": a.name, "call": "NextSchedule", "error": err}).Errorf("")
|
||||
@@ -299,31 +316,7 @@ func (a *App) Run(now time.Time) (string, error) {
|
||||
}
|
||||
|
||||
log.WithFields(log.Fields{"app": a.name, "now": now, "schedule": schedule}).Debugf("schedule")
|
||||
if schedule != "" {
|
||||
if err := a.RunSchedule(schedule, now); err != nil {
|
||||
log.WithFields(log.Fields{"app": a.name, "call": "NextSchedule", "error": err}).Errorf("")
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
|
||||
for _, src := range a.sources {
|
||||
if err := src.SetManaged(true); err != nil {
|
||||
log.WithFields(log.Fields{"app": a.name, "call": "src.SetManaged", "error": err}).Errorf("")
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
|
||||
if err := a.Transfer(); err != nil {
|
||||
log.WithFields(log.Fields{"app": a.name, "call": "Transfer", "error": err}).Errorf("")
|
||||
return "", err
|
||||
}
|
||||
|
||||
if err := a.Cleanup(now); err != nil {
|
||||
log.WithFields(log.Fields{"app": a.name, "call": "Cleanup", "error": err}).Errorf("")
|
||||
return "", err
|
||||
}
|
||||
|
||||
return schedule, nil
|
||||
return schedule, a.RunSchedule(schedule, now)
|
||||
}
|
||||
|
||||
func (a *App) NextSchedule(now time.Time) (string, error) {
|
||||
@@ -541,7 +534,7 @@ func (a *App) Boxes() []*Box {
|
||||
return bx
|
||||
}
|
||||
|
||||
func (a *App) RunFull() error {
|
||||
func (a *App) RunStandaloneTime(now time.Time) error {
|
||||
log.WithFields(log.Fields{"app": a.name}).Debugf("starting")
|
||||
defer log.WithFields(log.Fields{"app": a.name}).Debugf("done")
|
||||
|
||||
@@ -574,7 +567,7 @@ func (a *App) RunFull() error {
|
||||
|
||||
wg.Wait()
|
||||
|
||||
if sched, err := a.Run(time.Now()); err != nil {
|
||||
if sched, err := a.RunTime(now); err != nil {
|
||||
log.WithFields(log.Fields{"call": "Run", "error": err}).Errorf("")
|
||||
return err
|
||||
} else {
|
||||
@@ -585,3 +578,39 @@ func (a *App) RunFull() error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (a *App) RunStandaloneSchedule(name string) error {
|
||||
log.WithFields(log.Fields{"app": a.name, "name": name}).Debugf("starting")
|
||||
defer log.WithFields(log.Fields{"app": a.name, "name": name}).Debugf("done")
|
||||
|
||||
if cfgRun {
|
||||
return fmt.Errorf("backup already running")
|
||||
}
|
||||
|
||||
CfgLock()
|
||||
defer CfgUnlock()
|
||||
|
||||
cfgRun = true
|
||||
defer func() { cfgRun = false }()
|
||||
|
||||
boxes := a.Boxes()
|
||||
|
||||
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()
|
||||
|
||||
return a.RunSchedule(name, time.Now())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user