diff --git a/app/routes/account.go b/app/routes/account.go
index 7723aae..73bd7a2 100644
--- a/app/routes/account.go
+++ b/app/routes/account.go
@@ -18,7 +18,7 @@ type Account struct {
Min int
Max int
}
- Resources map[string]any
+ Resources map[string]map[string]any
}
type Constraint struct {
@@ -46,6 +46,7 @@ type NumericResource struct {
Global Constraint
Nodes map[string]Constraint
Total Constraint
+ Category string
}
type StorageResource struct {
@@ -60,6 +61,7 @@ type StorageResource struct {
Global Constraint
Nodes map[string]Constraint
Total Constraint
+ Category string
}
type ListResource struct {
@@ -69,6 +71,7 @@ type ListResource struct {
Global []Match
Nodes map[string][]Match
Total []Match
+ Category string
}
type ResourceChart struct {
@@ -104,58 +107,60 @@ func HandleGETAccount(c *gin.Context) {
return
}
- for k, v := range account.Resources {
- switch t := v.(type) {
- case NumericResource:
- avail, prefix := common.FormatNumber(t.Total.Avail*t.Multiplier, t.Base)
- account.Resources[k] = ResourceChart{
- Type: t.Type,
- Display: t.Display,
- Name: t.Name,
- Used: t.Total.Used,
- Max: t.Total.Max,
- Avail: avail,
- Prefix: prefix,
- Unit: t.Unit,
- ColorHex: InterpolateColorHSV(Green, Red, float64(t.Total.Used)/float64(t.Total.Max)).ToHTML(),
- }
- case StorageResource:
- avail, prefix := common.FormatNumber(t.Total.Avail*t.Multiplier, t.Base)
- account.Resources[k] = ResourceChart{
- Type: t.Type,
- Display: t.Display,
- Name: t.Name,
- Used: t.Total.Used,
- Max: t.Total.Max,
- Avail: avail,
- Prefix: prefix,
- Unit: t.Unit,
- ColorHex: InterpolateColorHSV(Green, Red, float64(t.Total.Used)/float64(t.Total.Max)).ToHTML(),
- }
- case ListResource:
- l := struct {
- Type string
- Display bool
- Resources []ResourceChart
- }{
- Type: t.Type,
- Display: t.Display,
- Resources: []ResourceChart{},
- }
-
- for _, r := range t.Total {
- l.Resources = append(l.Resources, ResourceChart{
+ for category, resources := range account.Resources {
+ for resource, v := range resources {
+ switch t := v.(type) {
+ case NumericResource:
+ avail, prefix := common.FormatNumber(t.Total.Avail*t.Multiplier, t.Base)
+ account.Resources[category][resource] = ResourceChart{
Type: t.Type,
Display: t.Display,
- Name: r.Name,
- Used: r.Used,
- Max: r.Max,
- Avail: float64(r.Avail), // usually an int
- Unit: "",
- ColorHex: InterpolateColorHSV(Green, Red, float64(r.Used)/float64(r.Max)).ToHTML(),
- })
+ Name: t.Name,
+ Used: t.Total.Used,
+ Max: t.Total.Max,
+ Avail: avail,
+ Prefix: prefix,
+ Unit: t.Unit,
+ ColorHex: InterpolateColorHSV(Green, Red, float64(t.Total.Used)/float64(t.Total.Max)).ToHTML(),
+ }
+ case StorageResource:
+ avail, prefix := common.FormatNumber(t.Total.Avail*t.Multiplier, t.Base)
+ account.Resources[category][resource] = ResourceChart{
+ Type: t.Type,
+ Display: t.Display,
+ Name: t.Name,
+ Used: t.Total.Used,
+ Max: t.Total.Max,
+ Avail: avail,
+ Prefix: prefix,
+ Unit: t.Unit,
+ ColorHex: InterpolateColorHSV(Green, Red, float64(t.Total.Used)/float64(t.Total.Max)).ToHTML(),
+ }
+ case ListResource:
+ l := struct {
+ Type string
+ Display bool
+ Resources []ResourceChart
+ }{
+ Type: t.Type,
+ Display: t.Display,
+ Resources: []ResourceChart{},
+ }
+
+ for _, r := range t.Total {
+ l.Resources = append(l.Resources, ResourceChart{
+ Type: t.Type,
+ Display: t.Display,
+ Name: r.Name,
+ Used: r.Used,
+ Max: r.Max,
+ Avail: float64(r.Avail), // usually an int
+ Unit: "",
+ ColorHex: InterpolateColorHSV(Green, Red, float64(r.Used)/float64(r.Max)).ToHTML(),
+ })
+ }
+ account.Resources[category][resource] = l
}
- account.Resources[k] = l
}
}
@@ -171,7 +176,7 @@ func HandleGETAccount(c *gin.Context) {
func GetUserAccount(auth common.Auth) (Account, error) {
account := Account{
- Resources: map[string]any{},
+ Resources: map[string]map[string]any{},
}
ctx := common.RequestContext{
@@ -225,6 +230,10 @@ func GetUserAccount(auth common.Auth) (Account, error) {
m := v.(map[string]any)
t := m["type"].(string)
r := resources[k].(map[string]any)
+ category := m["category"].(string)
+ if _, ok := account.Resources[category]; !ok {
+ account.Resources[category] = map[string]any{}
+ }
if t == "numeric" {
n := NumericResource{}
n.Type = t
@@ -233,7 +242,7 @@ func GetUserAccount(auth common.Auth) (Account, error) {
if err_m != nil || err_r != nil {
return account, fmt.Errorf("%s\n%s", err_m.Error(), err_r.Error())
}
- account.Resources[k] = n
+ account.Resources[category][k] = n
} else if t == "storage" {
n := StorageResource{}
n.Type = t
@@ -242,7 +251,7 @@ func GetUserAccount(auth common.Auth) (Account, error) {
if err_m != nil || err_r != nil {
return account, fmt.Errorf("%s\n%s", err_m.Error(), err_r.Error())
}
- account.Resources[k] = n
+ account.Resources[category][k] = n
} else if t == "list" {
n := ListResource{}
n.Type = t
@@ -251,7 +260,7 @@ func GetUserAccount(auth common.Auth) (Account, error) {
if err_m != nil || err_r != nil {
return account, fmt.Errorf("%s\n%s", err_m.Error(), err_r.Error())
}
- account.Resources[k] = n
+ account.Resources[category][k] = n
}
}
diff --git a/web/html/account.html b/web/html/account.html
index 21577ef..c3e347e 100644
--- a/web/html/account.html
+++ b/web/html/account.html
@@ -7,7 +7,7 @@