diff options
| -rw-r--r-- | CHANGELOG.md | 1 | ||||
| -rw-r--r-- | src/zenserver/frontend/html.zip | bin | 161943 -> 163145 bytes | |||
| -rw-r--r-- | src/zenserver/frontend/html/pages/start.js | 51 | ||||
| -rw-r--r-- | src/zenserver/frontend/html/zen.css | 5 |
4 files changed, 55 insertions, 2 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index f322aadcd..79af7925a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## - Improvement: Sentry is now disabled by default when building locally, to avoid uploading crashes due to local changes. CI builds still enable it just like before - Improvement: Include the server version on the dashboard's start page +- Improvement: Drop-all action added to dashboard for projects and z$ namespaces - Bugfix: Wildcard matching could cause out of bound read error - Bugfix: Fixed buffering of written blocks during GC which could lead to chunks returned as not found until restart diff --git a/src/zenserver/frontend/html.zip b/src/zenserver/frontend/html.zip Binary files differindex 38d3a73f2..f9fc8a8ef 100644 --- a/src/zenserver/frontend/html.zip +++ b/src/zenserver/frontend/html.zip diff --git a/src/zenserver/frontend/html/pages/start.js b/src/zenserver/frontend/html/pages/start.js index 28f4a20d9..4c8789431 100644 --- a/src/zenserver/frontend/html/pages/start.js +++ b/src/zenserver/frontend/html/pages/start.js @@ -15,17 +15,20 @@ export class Page extends ZenPage { // project list var section = this.add_section("projects"); + + section.tag().classify("dropall").text("drop-all").on_click(() => this.drop_all("projects")); + var columns = [ "name", "project_dir", "engine_dir", "actions", ]; - var table = section.add_widget(Table, columns); + var project_table = section.add_widget(Table, columns); for (const project of await new Fetcher().resource("/prj/list").json()) { - var row = table.add_row( + var row = project_table.add_row( "", project.ProjectRootDir, project.EngineRootDir, @@ -38,10 +41,15 @@ export class Page extends ZenPage var action_tb = new Toolbar(cell, true); action_tb.left().add("view").on_click((x) => this.view_project(x), project.Id); action_tb.left().add("drop").on_click((x) => this.drop_project(x), project.Id); + + row.attr("zs_name", project.Id); } // cache var section = this.add_section("z$"); + + section.tag().classify("dropall").text("drop-all").on_click(() => this.drop_all("z$")); + columns = [ "namespace", "dir", @@ -72,6 +80,8 @@ export class Page extends ZenPage const action_tb = new Toolbar(cell, true); action_tb.left().add("view").on_click(() => this.view_zcache(namespace)); action_tb.left().add("drop").on_click(() => this.drop_zcache(namespace)); + + row.attr("zs_name", namespace); }); } @@ -112,6 +122,9 @@ export class Page extends ZenPage var version = new Fetcher().resource("health", "version"); version.param("detailed", "true"); version.text().then((data) => ver_tag.text(data)); + + this._project_table = project_table; + this._cache_table = cache_table; } view_stat(provider) @@ -156,4 +169,38 @@ export class Page extends ZenPage .option("Yes", () => drop()) .option("No"); } + + async drop_all_projects() + { + for (const row of this._project_table) + { + const project_id = row.attr("zs_name"); + await new Fetcher().resource("prj", project_id).delete(); + } + this.reload(); + } + + async drop_all_zcache() + { + for (const row of this._cache_table) + { + const namespace = row.attr("zs_name"); + await new Fetcher().resource("z$", namespace).delete(); + } + this.reload(); + } + + drop_all(what) + { + const drop = async () => { + if (what == "projects") return this.drop_all_projects(); + if (what == "z$") return this.drop_all_zcache(); + }; + + new Modal() + .title("Confirmation") + .message(`Drop every item from '${what}'?`) + .option("Yes", () => drop()) + .option("No"); + } } diff --git a/src/zenserver/frontend/html/zen.css b/src/zenserver/frontend/html/zen.css index 0c4f324e4..c52609f52 100644 --- a/src/zenserver/frontend/html/zen.css +++ b/src/zenserver/frontend/html/zen.css @@ -411,6 +411,11 @@ a { /* start -------------------------------------------------------------------- */ #start { + .dropall { + text-align: right; + font-size: 0.85em; + margin: -0.5em 0 0.5em 0; + } #version { color: var(--theme_g1); text-align: center; |