feat: Add directory listing functionality

- Add `list_dir` function to `Workspace` struct
- Implement path handling and directory scanning logic
- Refine struct formatting for `Node`, `ComputeSlice`, `StorageSlice`
- Update `StorageSlice.pricing_policy` comment
- Adjust whitespace in CSS styles
This commit is contained in:
Mahmoud-Emad
2025-08-24 12:00:12 +03:00
parent 3050433cfd
commit 6098f166bb
5 changed files with 60 additions and 56 deletions

View File

@@ -220,6 +220,44 @@ pub:
typ string @[json: 'type'] typ string @[json: 'type']
} }
pub fn (wsp &Workspace) list_dir(rel_path string) ![]ListItem {
mut dir := if rel_path.len > 0 {
if os.is_abs_path(rel_path) {
rel_path
} else {
os.join_path(wsp.base_path, rel_path)
}
} else {
wsp.base_path
}
if dir.len == 0 {
return error('workspace base_path not set')
}
if !os.is_abs_path(dir) {
dir = os.join_path(wsp.base_path, dir)
}
entries := os.ls(dir) or { return error('cannot list directory') }
mut out := []ListItem{}
for e in entries {
full := os.join_path(dir, e)
if os.is_dir(full) {
out << ListItem{
name: e
typ: 'directory'
}
} else if os.is_file(full) {
out << ListItem{
name: e
typ: 'file'
}
}
}
return out
}
pub fn (wsp &Workspace) list() ![]ListItem { pub fn (wsp &Workspace) list() ![]ListItem {
mut dir := wsp.base_path mut dir := wsp.base_path
if dir.len == 0 { if dir.len == 0 {

View File

@@ -78,35 +78,6 @@ pub mut:
vcores int // Total virtual cores vcores int // Total virtual cores
} }
// typically 1GB of memory, but can be adjusted based based on size of machine
pub struct ComputeSlice {
pub mut:
nodeid u32 // the node in the grid, there is an object describing the node
id int // the id of the slice in the node
mem_gb f64
storage_gb f64
passmark int
vcores int
cpu_oversubscription int
storage_oversubscription int
price_range []f64 = [0.0, 0.0]
gpus u8 // nr of GPU's see node to know what GPU's are
price_cc f64 // price per slice (even if the grouped one)
pricing_policy PricingPolicy
sla_policy SLAPolicy
}
// 1GB of storage
pub struct StorageSlice {
pub mut:
nodeid u32 // the node in the grid
id int // the id of the slice in the node, are tracked in the node itself
price_cc f64 // price per slice (even if the grouped one)
pricing_policy PricingPolicy
sla_policy SLAPolicy
}
fn (mut n Node) check() ! { fn (mut n Node) check() ! {
// todo calculate NodeCapacity out of the devices on the Node // todo calculate NodeCapacity out of the devices on the Node
} }

View File

@@ -1,7 +1,5 @@
module datamodel module datamodel
// typically 1GB of memory, but can be adjusted based based on size of machine // typically 1GB of memory, but can be adjusted based based on size of machine
@[heap] @[heap]
pub struct ComputeSlice { pub struct ComputeSlice {

View File

@@ -1,6 +1,5 @@
module datamodel module datamodel
// 1GB of storage // 1GB of storage
@[heap] @[heap]
pub struct StorageSlice { pub struct StorageSlice {
@@ -11,6 +10,3 @@ pub mut:
pricing_policy PricingPolicy // copied from node which is part of nodegroup pricing_policy PricingPolicy // copied from node which is part of nodegroup
sla_policy SLAPolicy sla_policy SLAPolicy
} }

View File

@@ -262,6 +262,7 @@ code {
/* Print styles */ /* Print styles */
@media print { @media print {
.sidebar, .sidebar,
.header, .header,
.theme-toggle { .theme-toggle {