latest
This commit is contained in:
83
internal/cli/info_helper.go
Normal file
83
internal/cli/info_helper.go
Normal file
@@ -0,0 +1,83 @@
|
||||
package cli
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"github.com/spf13/afero"
|
||||
)
|
||||
|
||||
// gatherVaultStats collects statistics from all vaults
|
||||
func gatherVaultStats(
|
||||
fs afero.Fs,
|
||||
vaultsDir string,
|
||||
) (totalSecrets int, totalSize int64, oldestTime, latestTime time.Time, err error) {
|
||||
vaultEntries, err := afero.ReadDir(fs, vaultsDir)
|
||||
if err != nil {
|
||||
return 0, 0, time.Time{}, time.Time{}, err
|
||||
}
|
||||
|
||||
for _, vaultEntry := range vaultEntries {
|
||||
if !vaultEntry.IsDir() {
|
||||
continue
|
||||
}
|
||||
|
||||
vaultPath := filepath.Join(vaultsDir, vaultEntry.Name())
|
||||
secretsPath := filepath.Join(vaultPath, "secrets.d")
|
||||
|
||||
// Count secrets in this vault
|
||||
secretEntries, err := afero.ReadDir(fs, secretsPath)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
for _, secretEntry := range secretEntries {
|
||||
if !secretEntry.IsDir() {
|
||||
continue
|
||||
}
|
||||
|
||||
totalSecrets++
|
||||
secretPath := filepath.Join(secretsPath, secretEntry.Name())
|
||||
|
||||
// Get size and timestamps from all versions
|
||||
versionsPath := filepath.Join(secretPath, "versions")
|
||||
versionEntries, err := afero.ReadDir(fs, versionsPath)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
for _, versionEntry := range versionEntries {
|
||||
if !versionEntry.IsDir() {
|
||||
continue
|
||||
}
|
||||
|
||||
versionPath := filepath.Join(versionsPath, versionEntry.Name())
|
||||
|
||||
// Add size of encrypted data
|
||||
dataPath := filepath.Join(versionPath, "data.age")
|
||||
if stat, err := fs.Stat(dataPath); err == nil {
|
||||
totalSize += stat.Size()
|
||||
}
|
||||
|
||||
// Add size of metadata
|
||||
metaPath := filepath.Join(versionPath, "metadata.age")
|
||||
if stat, err := fs.Stat(metaPath); err == nil {
|
||||
totalSize += stat.Size()
|
||||
}
|
||||
|
||||
// Track timestamps
|
||||
if stat, err := fs.Stat(versionPath); err == nil {
|
||||
modTime := stat.ModTime()
|
||||
if oldestTime.IsZero() || modTime.Before(oldestTime) {
|
||||
oldestTime = modTime
|
||||
}
|
||||
if latestTime.IsZero() || modTime.After(latestTime) {
|
||||
latestTime = modTime
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return totalSecrets, totalSize, oldestTime, latestTime, nil
|
||||
}
|
||||
Reference in New Issue
Block a user