mirror of
https://codeberg.org/git-pages/git-pages.git
synced 2026-05-14 03:01:48 +00:00
36 lines
971 B
Go
36 lines
971 B
Go
package git_pages
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"maps"
|
|
"slices"
|
|
"strings"
|
|
)
|
|
|
|
type DomainStatistics struct {
|
|
Domain string
|
|
OriginalSize int64
|
|
CompressedSize int64
|
|
StoredSize int64
|
|
}
|
|
|
|
func SizeHistogram(ctx context.Context) ([]*DomainStatistics, error) {
|
|
statisticsMap := map[string]*DomainStatistics{}
|
|
for item, err := range backend.GetAllManifests(ctx) {
|
|
metadata, manifest := item.Splat()
|
|
if err != nil {
|
|
return nil, fmt.Errorf("size histogram err: %w", err)
|
|
}
|
|
domain, _, _ := strings.Cut(metadata.Name, "/")
|
|
if _, found := statisticsMap[domain]; !found {
|
|
statisticsMap[domain] = &DomainStatistics{Domain: domain}
|
|
}
|
|
statistics := statisticsMap[domain]
|
|
statistics.OriginalSize += metadata.Size + manifest.GetOriginalSize()
|
|
statistics.CompressedSize += metadata.Size + manifest.GetCompressedSize()
|
|
statistics.StoredSize += metadata.Size + manifest.GetStoredSize()
|
|
}
|
|
return slices.Collect(maps.Values(statisticsMap)), nil
|
|
}
|