feat: add debug commands for folder counts and files (#10206)
This adds two debugging commands that print information directly from the database; one for folder counts, and one for file metadata for files matching a pattern in a folder. E.g., ``` % syncthing debug database-counts p3jms-73gps DEVICE TYPE FLAGS DELETED COUNT SIZE -local- FILE ------- --- 0 0 -local- FILE --G---- --- 2473 70094796496 -local- DIRECTORY ------- --- 0 0 -local- DIRECTORY --G---- --- 19 2432 PSEUDOP FILE ------- --- 2473 70094796496 PSEUDOP FILE -nG---- --- 0 0 PSEUDOP DIRECTORY ------- --- 19 2432 PSEUDOP DIRECTORY -nG---- --- 0 0 ``` ``` % syncthing debug database-file p3jms-73gps 20240929-DSCF1387 DSCF1387 DEVICE TYPE NAME SEQUENCE DELETED MODIFIED SIZE FLAGS VERSION BLOCKLIST -local- FILE Austin/20240929-DSCF1387.raf 1204 --- 2024-09-29T01:10:54Z 48911888 --G---- HX2ELNU:1744213700 fsQdMvUL PSEUDOP FILE Austin/20240929-DSCF1387.raf 22279 --- 2024-09-29T01:10:54Z 48911888 ------- HX2ELNU:1744213700 fsQdMvUL -local- FILE Austin/20240929-DSCF1387.xmp 1196 --- 2024-10-16T08:08:35.137501751Z 5579 --G---- HX2ELNU:1744213700 xDGMnepi PSEUDOP FILE Austin/20240929-DSCF1387.xmp 19910 --- 2024-10-16T08:08:35.137501751Z 5579 ------- HX2ELNU:1744213700 xDGMnepi ``` The local flag bits get a string representation for the bitmask, ``` FlagLocalUnsupported: "u", FlagLocalIgnored: "i", FlagLocalMustRescan: "r", FlagLocalReceiveOnly: "e", FlagLocalGlobal: "G", FlagLocalNeeded: "n", FlagLocalRemoteInvalid: "v", ```
This commit is contained in:
@@ -10,6 +10,7 @@ import (
|
||||
"database/sql"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"iter"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
@@ -376,6 +377,22 @@ func (s *DB) DropDevice(device protocol.DeviceID) error {
|
||||
})
|
||||
}
|
||||
|
||||
func (s *DB) DebugCounts(out io.Writer, folder string) error {
|
||||
fdb, err := s.getFolderDB(folder, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return fdb.DebugCounts(out)
|
||||
}
|
||||
|
||||
func (s *DB) DebugFilePattern(out io.Writer, folder, name string) error {
|
||||
fdb, err := s.getFolderDB(folder, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return fdb.DebugFilePattern(out, name)
|
||||
}
|
||||
|
||||
// forEachFolder runs the function for each currently open folderDB,
|
||||
// returning the first error that was encountered.
|
||||
func (s *DB) forEachFolder(fn func(fdb *folderDB) error) error {
|
||||
|
||||
Reference in New Issue
Block a user