Files
kopia/cli/command_maintenance_info.go
Jarek Kowalski 4b4628a21e Repository maintenance support (#411)
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.
2020-04-14 00:11:41 -07:00

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))
}