mirror of
https://codeberg.org/shroff/phylum.git
synced 2026-01-02 17:49:46 -06:00
91 lines
2.0 KiB
Go
91 lines
2.0 KiB
Go
package common
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"math"
|
|
"strconv"
|
|
|
|
"codeberg.org/shroff/phylum/server/internal/core"
|
|
"github.com/jackc/pgx/v5/pgtype"
|
|
)
|
|
|
|
func FormatResourceSummary(r core.Resource, name string, deleted pgtype.Timestamp) string {
|
|
if name == "" {
|
|
name = r.Name()
|
|
}
|
|
if r.Dir() {
|
|
name += "/"
|
|
}
|
|
|
|
size := ""
|
|
sha256 := ""
|
|
versions := ""
|
|
if r.Dir() {
|
|
size = " -"
|
|
sha256 = "-- "
|
|
versions = "-"
|
|
} else {
|
|
v := r.LatestVersion()
|
|
size = FormatSize(int(v.Size))
|
|
if v.SHA256 == "" {
|
|
sha256 = "xxxxxxxx"
|
|
} else {
|
|
sha256 = v.SHA256[0:8]
|
|
}
|
|
versionCount := countJSONList(r.Versions())
|
|
versions = strconv.Itoa(versionCount)
|
|
if versionCount > 9 {
|
|
versions = "+"
|
|
}
|
|
}
|
|
|
|
delStr := " "
|
|
if deleted != r.Deleted() {
|
|
delStr = "*"
|
|
}
|
|
return fmt.Sprintf("%s %d %d %s %5s %s %s%-24s", r.ID().String(), countJSONMap(r.Grants()), countJSONList(r.Links()), versions, size, sha256, delStr, name)
|
|
}
|
|
|
|
func FormatSize(size int) string {
|
|
suffix := []string{"B", "K", "M", "G", "T"}
|
|
sz := float64(size)
|
|
si := 0
|
|
for ; sz >= 1000 && si < len(suffix); si, sz = si+1, sz/1024 {
|
|
}
|
|
if sz >= 10 || si == 0 {
|
|
return strconv.Itoa(int(math.Ceil(sz))) + suffix[si]
|
|
// return fmt.Sprintf("%d%s", int(math.Ceil(sz)), suffix[si])
|
|
} else {
|
|
return fmt.Sprintf("%1.1f%s", sz, suffix[si])
|
|
}
|
|
}
|
|
|
|
// String formatForDisplay() {
|
|
// const suffixes = ['B', 'K', 'M', 'G'];
|
|
// var sz = toDouble();
|
|
// for (var i = 0; i < suffixes.length; i++) {
|
|
// if (sz < 1000) {
|
|
// return '${i == 0 ? sz.toInt() : _formatSize(sz)}${suffixes[i]}';
|
|
// }
|
|
// sz /= 1024;
|
|
// }
|
|
// return '${_formatSize(sz)}T';
|
|
// }
|
|
|
|
// String _formatSize(double size) {
|
|
// return size >= 10 ? '${size.toInt()}' : decimalPattern.format(size);
|
|
// }
|
|
|
|
func countJSONMap(j []byte) int {
|
|
g := make(map[string]interface{})
|
|
json.Unmarshal(j, &g)
|
|
return len(g)
|
|
}
|
|
|
|
func countJSONList(j []byte) int {
|
|
l := make([]map[string]interface{}, 0)
|
|
json.Unmarshal(j, &l)
|
|
return len(l)
|
|
}
|