mirror of
https://github.com/kopia/kopia.git
synced 2026-03-16 13:17:27 -04:00
Maintenance: support for automatic GC Moved maintenance algorithms from 'cli' to 'repo/maintenance' package Added support for CLI commands: kopia gc - performs quick maintenance kopia gc --full- perform full maintenance Full maintenance performs snapshot gc, but it's not safe to do this automatically possibly in parallel to snapshots being taken. This will be addressed ~0.7 timeframe.
55 lines
1.3 KiB
Go
55 lines
1.3 KiB
Go
package cli
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
"github.com/kopia/kopia/repo"
|
|
"github.com/kopia/kopia/repo/maintenance"
|
|
)
|
|
|
|
var (
|
|
maintenanceInfoCommand = maintenanceCommands.Command("info", "Display maintenance information").Alias("status")
|
|
)
|
|
|
|
func runMaintenanceInfoCommand(ctx context.Context, rep *repo.DirectRepository) error {
|
|
p, err := maintenance.GetParams(ctx, rep)
|
|
if err != nil {
|
|
return errors.Wrap(err, "unable to get maintenance params")
|
|
}
|
|
|
|
s, err := maintenance.GetSchedule(ctx, rep)
|
|
if err != nil {
|
|
return errors.Wrap(err, "unable to get maintenance schedule")
|
|
}
|
|
|
|
printStderr("Owner: %v\n", p.Owner)
|
|
printStderr("Quick Cycle:\n")
|
|
displayCycleInfo(&p.QuickCycle, s.NextQuickMaintenanceTime, rep)
|
|
|
|
printStderr("Full Cycle:\n")
|
|
displayCycleInfo(&p.FullCycle, s.NextFullMaintenanceTime, rep)
|
|
|
|
return nil
|
|
}
|
|
|
|
func displayCycleInfo(c *maintenance.CycleParams, t time.Time, rep *repo.DirectRepository) {
|
|
printStderr(" scheduled: %v\n", c.Enabled)
|
|
|
|
if c.Enabled {
|
|
printStderr(" interval: %v\n", c.Interval)
|
|
|
|
if rep.Time().Before(t) {
|
|
printStderr(" next run: %v (in %v)\n", formatTimestamp(t), time.Until(t).Truncate(time.Second))
|
|
} else {
|
|
printStderr(" next run: now\n")
|
|
}
|
|
}
|
|
}
|
|
|
|
func init() {
|
|
maintenanceInfoCommand.Action(directRepositoryAction(runMaintenanceInfoCommand))
|
|
}
|