- Set up cobra CLI with all commands (backup, restore, prune, verify, fetch) - Integrate uber/fx for dependency injection and lifecycle management - Add globals package with build-time variables (Version, Commit) - Implement config loading from YAML with validation - Create core data models (FileInfo, ChunkInfo, BlobInfo, Snapshot) - Add Makefile with build, test, lint, and clean targets - Include minimal test suite for compilation verification - Update documentation with --quick flag for verify command - Fix markdown numbering in implementation TODO
73 lines
1.6 KiB
Go
73 lines
1.6 KiB
Go
package models
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
// FileInfo represents a file in the backup system
|
|
type FileInfo struct {
|
|
Path string
|
|
MTime time.Time
|
|
Size int64
|
|
}
|
|
|
|
// ChunkInfo represents a content-addressed chunk
|
|
type ChunkInfo struct {
|
|
Hash string // SHA256 hash
|
|
Size int64
|
|
Offset int64 // Offset within source file
|
|
}
|
|
|
|
// ChunkRef represents a reference to a chunk in a blob or file
|
|
type ChunkRef struct {
|
|
ChunkHash string
|
|
Offset int64
|
|
Length int64
|
|
}
|
|
|
|
// BlobInfo represents an encrypted blob containing multiple chunks
|
|
type BlobInfo struct {
|
|
Hash string // Hash of encrypted blob
|
|
FinalHash string // Hash after compression and encryption
|
|
CreatedAt time.Time
|
|
Size int64
|
|
ChunkCount int
|
|
}
|
|
|
|
// Snapshot represents a backup snapshot
|
|
type Snapshot struct {
|
|
ID string // ISO8601 timestamp
|
|
Hostname string
|
|
Version string
|
|
CreatedAt time.Time
|
|
FileCount int64
|
|
ChunkCount int64
|
|
BlobCount int64
|
|
TotalSize int64
|
|
MetadataSize int64
|
|
}
|
|
|
|
// SnapshotMetadata contains the full metadata for a snapshot
|
|
type SnapshotMetadata struct {
|
|
Snapshot *Snapshot
|
|
Files map[string]*FileInfo
|
|
Chunks map[string]*ChunkInfo
|
|
Blobs map[string]*BlobInfo
|
|
FileChunks map[string][]*ChunkRef // path -> chunks
|
|
BlobChunks map[string][]*ChunkRef // blob hash -> chunks
|
|
}
|
|
|
|
// Chunk represents a data chunk for processing
|
|
type Chunk struct {
|
|
Data []byte
|
|
Hash string
|
|
Offset int64
|
|
Length int64
|
|
}
|
|
|
|
// DirtyPath represents a path marked for backup by inotify
|
|
type DirtyPath struct {
|
|
Path string
|
|
MarkedAt time.Time
|
|
EventType string // "create", "modify", "delete"
|
|
} |