Statistics
@if (_lastUpdated is not null) {
Updated @_lastUpdated.Value.ToLocalTime().ToString("HH:mm:ss")
}
@* ---- Assets by type + Storage side by side ---- *@
| Type | Count |
@foreach (var kv in _stats.AssetsByType.OrderByDescending(x => x.Value)) {
| @kv.Key | @kv.Value.ToString("N0") |
}
Type | Size |
@foreach (var kv in _stats.StorageByType.OrderByDescending(x => x.Value)) {
| @kv.Key | @Formatting.FormatBytes(kv.Value) |
}
| Total | @Formatting.FormatBytes(_stats.TotalStorageBytes) |
@* ---- Users by role + File format breakdown ---- *@
| Role | Count |
@foreach (var kv in _stats.UsersByAccessLevel.OrderByDescending(x => x.Value)) {
| @kv.Key | @kv.Value.ToString("N0") |
}
MIME Type | Count |
@foreach (var fmt in _stats.FileFormatBreakdown.Take(20)) {
@fmt.MimeType | @fmt.Count.ToString("N0") |
}
@* ---- Resolution distribution ---- *@
| Bucket | Count |
@foreach (var bucket in _stats.ResolutionDistribution) {
| @bucket.Label | @bucket.Count.ToString("N0") |
}
@* ---- Top tags ---- *@
| Tag | Assets |
@foreach (var tag in _stats.TopTags) {
| @tag.Name | @tag.AssetCount.ToString("N0") |
}
@if (!_stats.TopTags.Any()) {
| No tags yet. |
}
@* ---- Monthly growth ---- *@
| Month | New Assets | New Users |
@foreach (var m in _stats.MonthlyGrowth) {
| @(new DateTime(m.Year, m.Month, 1).ToString("yyyy-MM")) |
@m.NewAssets.ToString("N0") |
@m.NewUsers.ToString("N0") |
}