package stats import ( "fmt" "os" "time" ) type Cache struct { timestamp time.Time data string } var cache Cache func GetDBSize() (string, error) { // If cache is less than 10 minutes old, return cached data if time.Since(cache.timestamp).Minutes() < 10 { return cache.data, nil } // TODO: This should be read from the environment fileInfo, err := os.Stat("feedvault.db") if err != nil { return "", err } // Get the file size in bytes fileSize := fileInfo.Size() // Convert to human readable size and append the unit (KiB, MiB, GiB, TiB) var size float64 if fileSize < 1024*1024 { // If the file size is less than 1 KiB, return the size in bytes size = float64(fileSize) / 1024 cache.data = fmt.Sprintf("%.2f KiB", size) } else if fileSize < 1024*1024*1024 { // If the file size is less than 1 MiB, return the size in KiB size = float64(fileSize) / (1024 * 1024) cache.data = fmt.Sprintf("%.2f MiB", size) } else if fileSize < 1024*1024*1024*1024 { // If the file size is less than 1 GiB, return the size in MiB size = float64(fileSize) / (1024 * 1024 * 1024) cache.data = fmt.Sprintf("%.2f GiB", size) } else { // If the file size is 1 GiB or more, return the size in TiB size = float64(fileSize) / (1024 * 1024 * 1024 * 1024) cache.data = fmt.Sprintf("%.2f TiB", size) } // Update cache timestamp cache.timestamp = time.Now() // Return the human readable size return cache.data, nil }