command_fs_log.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package shell
  2. import (
  3. "context"
  4. "flag"
  5. "fmt"
  6. "github.com/seaweedfs/seaweedfs/weed/filer"
  7. "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
  8. "io"
  9. "time"
  10. )
  11. func init() {
  12. Commands = append(Commands, &commandFsLogPurge{})
  13. }
  14. type commandFsLogPurge struct {
  15. }
  16. func (c *commandFsLogPurge) Name() string {
  17. return "fs.log.purge"
  18. }
  19. func (c *commandFsLogPurge) Help() string {
  20. return `purge filer logs
  21. fs.log.purge [-v] [-daysAgo 365]
  22. `
  23. }
  24. func (c *commandFsLogPurge) HasTag(CommandTag) bool {
  25. return false
  26. }
  27. func (c *commandFsLogPurge) Do(args []string, commandEnv *CommandEnv, writer io.Writer) (err error) {
  28. fsLogPurgeCommand := flag.NewFlagSet(c.Name(), flag.ContinueOnError)
  29. daysAgo := fsLogPurgeCommand.Uint("daysAgo", 365, "purge logs older than N days")
  30. verbose := fsLogPurgeCommand.Bool("v", false, "verbose mode")
  31. if err = fsLogPurgeCommand.Parse(args); err != nil {
  32. return err
  33. }
  34. modificationTimeAgo := time.Now().Add(-time.Hour * 24 * time.Duration(*daysAgo)).Unix()
  35. err = filer_pb.ReadDirAllEntries(context.Background(), commandEnv, filer.SystemLogDir, "", func(entry *filer_pb.Entry, isLast bool) error {
  36. if entry.Attributes.Mtime > modificationTimeAgo {
  37. return nil
  38. }
  39. if errDel := filer_pb.Remove(context.Background(), commandEnv, filer.SystemLogDir, entry.Name, true, true, true, false, nil); errDel != nil {
  40. return errDel
  41. }
  42. if *verbose {
  43. fmt.Fprintf(writer, "delete %s\n", entry.Name)
  44. }
  45. return nil
  46. })
  47. return err
  48. }