add categorization to account resources

This commit is contained in:
2025-08-11 22:40:39 +00:00
parent f3b6c0abf4
commit df6772c72b
2 changed files with 107 additions and 93 deletions

View File

@@ -18,7 +18,7 @@ type Account struct {
Min int Min int
Max int Max int
} }
Resources map[string]any Resources map[string]map[string]any
} }
type Constraint struct { type Constraint struct {
@@ -46,6 +46,7 @@ type NumericResource struct {
Global Constraint Global Constraint
Nodes map[string]Constraint Nodes map[string]Constraint
Total Constraint Total Constraint
Category string
} }
type StorageResource struct { type StorageResource struct {
@@ -60,6 +61,7 @@ type StorageResource struct {
Global Constraint Global Constraint
Nodes map[string]Constraint Nodes map[string]Constraint
Total Constraint Total Constraint
Category string
} }
type ListResource struct { type ListResource struct {
@@ -69,6 +71,7 @@ type ListResource struct {
Global []Match Global []Match
Nodes map[string][]Match Nodes map[string][]Match
Total []Match Total []Match
Category string
} }
type ResourceChart struct { type ResourceChart struct {
@@ -104,11 +107,12 @@ func HandleGETAccount(c *gin.Context) {
return return
} }
for k, v := range account.Resources { for category, resources := range account.Resources {
for resource, v := range resources {
switch t := v.(type) { switch t := v.(type) {
case NumericResource: case NumericResource:
avail, prefix := common.FormatNumber(t.Total.Avail*t.Multiplier, t.Base) avail, prefix := common.FormatNumber(t.Total.Avail*t.Multiplier, t.Base)
account.Resources[k] = ResourceChart{ account.Resources[category][resource] = ResourceChart{
Type: t.Type, Type: t.Type,
Display: t.Display, Display: t.Display,
Name: t.Name, Name: t.Name,
@@ -121,7 +125,7 @@ func HandleGETAccount(c *gin.Context) {
} }
case StorageResource: case StorageResource:
avail, prefix := common.FormatNumber(t.Total.Avail*t.Multiplier, t.Base) avail, prefix := common.FormatNumber(t.Total.Avail*t.Multiplier, t.Base)
account.Resources[k] = ResourceChart{ account.Resources[category][resource] = ResourceChart{
Type: t.Type, Type: t.Type,
Display: t.Display, Display: t.Display,
Name: t.Name, Name: t.Name,
@@ -155,7 +159,8 @@ func HandleGETAccount(c *gin.Context) {
ColorHex: InterpolateColorHSV(Green, Red, float64(r.Used)/float64(r.Max)).ToHTML(), ColorHex: InterpolateColorHSV(Green, Red, float64(r.Used)/float64(r.Max)).ToHTML(),
}) })
} }
account.Resources[k] = l account.Resources[category][resource] = l
}
} }
} }
@@ -171,7 +176,7 @@ func HandleGETAccount(c *gin.Context) {
func GetUserAccount(auth common.Auth) (Account, error) { func GetUserAccount(auth common.Auth) (Account, error) {
account := Account{ account := Account{
Resources: map[string]any{}, Resources: map[string]map[string]any{},
} }
ctx := common.RequestContext{ ctx := common.RequestContext{
@@ -225,6 +230,10 @@ func GetUserAccount(auth common.Auth) (Account, error) {
m := v.(map[string]any) m := v.(map[string]any)
t := m["type"].(string) t := m["type"].(string)
r := resources[k].(map[string]any) 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" { if t == "numeric" {
n := NumericResource{} n := NumericResource{}
n.Type = t n.Type = t
@@ -233,7 +242,7 @@ func GetUserAccount(auth common.Auth) (Account, error) {
if err_m != nil || err_r != nil { if err_m != nil || err_r != nil {
return account, fmt.Errorf("%s\n%s", err_m.Error(), err_r.Error()) 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" { } else if t == "storage" {
n := StorageResource{} n := StorageResource{}
n.Type = t n.Type = t
@@ -242,7 +251,7 @@ func GetUserAccount(auth common.Auth) (Account, error) {
if err_m != nil || err_r != nil { if err_m != nil || err_r != nil {
return account, fmt.Errorf("%s\n%s", err_m.Error(), err_r.Error()) 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" { } else if t == "list" {
n := ListResource{} n := ListResource{}
n.Type = t n.Type = t
@@ -251,7 +260,7 @@ func GetUserAccount(auth common.Auth) (Account, error) {
if err_m != nil || err_r != nil { if err_m != nil || err_r != nil {
return account, fmt.Errorf("%s\n%s", err_m.Error(), err_r.Error()) return account, fmt.Errorf("%s\n%s", err_m.Error(), err_r.Error())
} }
account.Resources[k] = n account.Resources[category][k] = n
} }
} }

View File

@@ -7,7 +7,7 @@
<link rel="modulepreload" href="scripts/dialog.js"> <link rel="modulepreload" href="scripts/dialog.js">
<style> <style>
@media screen and (width >= 1264px){ @media screen and (width >= 1264px){
#resource-container { .resource-container {
display: grid; display: grid;
grid-template-columns: repeat(auto-fill, calc(100% / 6)); grid-template-columns: repeat(auto-fill, calc(100% / 6));
grid-gap: 0; grid-gap: 0;
@@ -15,7 +15,7 @@
} }
} }
@media screen and (width <= 1264px) and (width >= 680px) { @media screen and (width <= 1264px) and (width >= 680px) {
#resource-container { .resource-container {
display: grid; display: grid;
grid-template-columns: repeat(auto-fill, 200px); grid-template-columns: repeat(auto-fill, 200px);
grid-gap: 0; grid-gap: 0;
@@ -23,7 +23,7 @@
} }
} }
@media screen and (width <= 680px) { @media screen and (width <= 680px) {
#resource-container { .resource-container {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 0; gap: 0;
@@ -54,8 +54,13 @@
</section> </section>
<section class="w3-card w3-padding"> <section class="w3-card w3-padding">
<h3>Cluster Resources</h3> <h3>Cluster Resources</h3>
<div id="resource-container"> <div>
{{range .account.Resources}} {{range $category, $v := .account.Resources}}
{{if ne $category ""}}
<h4>{{$category}}</h4>
{{end}}
<div class="resource-container">
{{range $v}}
{{if .Display}} {{if .Display}}
{{if eq .Type "numeric"}} {{if eq .Type "numeric"}}
{{template "resource-chart" .}} {{template "resource-chart" .}}
@@ -71,11 +76,13 @@
{{end}} {{end}}
{{end}} {{end}}
</div> </div>
{{end}}
</div>
</section> </section>
</main> </main>
</body>
<modal-dialog id="change-password-dialog"> <template id="change-password-dialog">
<template shadowrootmode="open">
<link rel="stylesheet" href="modules/w3.css"> <link rel="stylesheet" href="modules/w3.css">
<link rel="stylesheet" href="css/style.css"> <link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="css/form.css"> <link rel="stylesheet" href="css/form.css">
@@ -97,6 +104,4 @@
</div> </div>
</dialog> </dialog>
</template> </template>
</modal-dialog>
</body>
</html> </html>