diff --git a/res/template/admin.html b/res/template/admin.html index 13c78fe..b98be4f 100644 --- a/res/template/admin.html +++ b/res/template/admin.html @@ -1,173 +1,33 @@ -{{define "admin_panel"}} +{{define "admin"}} - - {{template "meta_tags" "Administrator panel"}} - {{template "user_style" .}} - - - {{template "page_top" .}} -
- {{if and .Authenticated .User.IsAdmin}} -
-

Actions

-
-
- - block - Block files - - - flag - User abuse reports - - - report - Manage abuse reporters - - - edit - Update global settings - -
-
-

Bandwidth and views

-
-
- - - - - - - - - -
-
- -
-
-
- -
-
- Total usage from to
- bandwidth and views -
+ {{if and .Authenticated .User.IsAdmin}} + + {{template "meta_tags" "Administrator panel"}} + {{template "user_style" .}} -
- Call stack - Heap profile - CPU profile (wait 1 min) -
- -
- - - - - - - -
DB TimeDB Latency
-

Pixelstore peers

- - - - - - - - - - - - - - - - -
AddressPosAliveErr1m5m15mPingFreeMin free
-

Pixelstore stats

- - - - - - - - - - - - - - - - - - - - - - - -
Local readsLocal read sizeRemote readsRemote read size
-

Websocket statistics

- - - - - - - - - - - - - - - - - -
WatcherThreadsListenersAvg
File statistics
-

Query statistics

- - - - - - - - - - - -
QueryCallsAverage DurationTotal DurationCallers
-
- - - {{else}} -

;-)

- {{end}} -
+ + + + + + {{template "page_top" .}} +
{{template "page_bottom" .}} - - + + {{else}} + + {{template "meta_tags" "Administrator panel"}} + {{template "user_style" .}} + + + {{template "page_top" .}} +
;-)
+ {{template "page_bottom" .}} + + {{end}} {{end}} diff --git a/res/template/admin_abuse_reporters.html b/res/template/admin_abuse_reporters.html deleted file mode 100644 index bfdec65..0000000 --- a/res/template/admin_abuse_reporters.html +++ /dev/null @@ -1,19 +0,0 @@ -{{define "admin_abuse_reporters"}} - - - {{template "meta_tags" "Abuse reporters"}} - {{template "user_style" .}} - - - - - - {{template "page_top" .}} -

Abuse reporters

-
- - {{template "page_bottom" .}} - {{template "analytics"}} - - -{{end}} diff --git a/res/template/admin_abuse_reports.html b/res/template/admin_abuse_reports.html deleted file mode 100644 index 11611e9..0000000 --- a/res/template/admin_abuse_reports.html +++ /dev/null @@ -1,19 +0,0 @@ -{{define "admin_abuse_reports"}} - - - {{template "meta_tags" "Abuse reports"}} - {{template "user_style" .}} - - - - - - {{template "page_top" .}} -

Abuse reports

-
- - {{template "page_bottom" .}} - {{template "analytics"}} - - -{{end}} diff --git a/res/template/admin_ip_bans.html b/res/template/admin_ip_bans.html deleted file mode 100644 index 3602ea3..0000000 --- a/res/template/admin_ip_bans.html +++ /dev/null @@ -1,19 +0,0 @@ -{{define "admin_ip_bans"}} - - - {{template "meta_tags" "IP bans"}} - {{template "user_style" .}} - - - - - - {{template "page_top" .}} -

IP bans

-
- - {{template "page_bottom" .}} - {{template "analytics"}} - - -{{end}} diff --git a/svelte/package.json b/svelte/package.json index e9e9def..8a66e32 100644 --- a/svelte/package.json +++ b/svelte/package.json @@ -16,6 +16,7 @@ "svelte": "^3.0.0" }, "dependencies": { + "chart.js": "^2.8.0", "sirv-cli": "^1.0.0" } } diff --git a/svelte/rollup.config.js b/svelte/rollup.config.js index 2528caf..3dc578f 100644 --- a/svelte/rollup.config.js +++ b/svelte/rollup.config.js @@ -34,9 +34,7 @@ export default [ "modal", "user_buckets", "user_file_manager", - "admin_abuse_reporters", - "admin_abuse_reports", - "admin_ip_bans", + "admin_panel", ].map((name, index) => ({ input: `src/${name}.js`, output: { diff --git a/svelte/src/admin_abuse_reporters.js b/svelte/src/admin_abuse_reporters.js deleted file mode 100644 index a36b754..0000000 --- a/svelte/src/admin_abuse_reporters.js +++ /dev/null @@ -1,8 +0,0 @@ -import App from './admin_abuse_reporters/AbuseReporters.svelte'; - -const app = new App({ - target: document.getElementById("page_content"), - props: {} -}); - -export default app; diff --git a/svelte/src/admin_abuse_reports.js b/svelte/src/admin_abuse_reports.js deleted file mode 100644 index efa3fdd..0000000 --- a/svelte/src/admin_abuse_reports.js +++ /dev/null @@ -1,8 +0,0 @@ -import App from './admin_abuse_reports/AbuseReports.svelte'; - -const app = new App({ - target: document.getElementById("page_content"), - props: {} -}); - -export default app; diff --git a/svelte/src/admin_ip_bans.js b/svelte/src/admin_panel.js similarity index 68% rename from svelte/src/admin_ip_bans.js rename to svelte/src/admin_panel.js index c46e82d..0f30536 100644 --- a/svelte/src/admin_ip_bans.js +++ b/svelte/src/admin_panel.js @@ -1,4 +1,4 @@ -import App from './admin_ip_bans/IPBans.svelte'; +import App from './admin_panel/AdminPanel.svelte'; const app = new App({ target: document.getElementById("page_content"), diff --git a/svelte/src/admin_abuse_reports/AbuseReport.svelte b/svelte/src/admin_panel/AbuseReport.svelte similarity index 100% rename from svelte/src/admin_abuse_reports/AbuseReport.svelte rename to svelte/src/admin_panel/AbuseReport.svelte diff --git a/svelte/src/admin_abuse_reporters/AbuseReporters.svelte b/svelte/src/admin_panel/AbuseReporters.svelte similarity index 97% rename from svelte/src/admin_abuse_reporters/AbuseReporters.svelte rename to svelte/src/admin_panel/AbuseReporters.svelte index 3007808..fd169f5 100644 --- a/svelte/src/admin_abuse_reporters/AbuseReporters.svelte +++ b/svelte/src/admin_panel/AbuseReporters.svelte @@ -91,9 +91,6 @@ onMount(get_reporters);
- - arrow_back Return to admin panel -
+
Start:
+ +
End:
+ +

Pending

@@ -131,7 +128,7 @@ onMount(() => { .spinner_container { position: absolute; top: 10px; - right: 10px; + left: 10px; height: 100px; width: 100px; z-index: 1000; @@ -140,6 +137,7 @@ onMount(() => { display: flex; flex-direction: row; width: 100%; + align-items: center; } .toolbar > * { flex: 0 0 auto; } .toolbar_spacer { flex: 1 1 auto; } diff --git a/svelte/src/admin_panel/AdminPanel.svelte b/svelte/src/admin_panel/AdminPanel.svelte new file mode 100644 index 0000000..2ae0577 --- /dev/null +++ b/svelte/src/admin_panel/AdminPanel.svelte @@ -0,0 +1,75 @@ + + +
+ {navigate("", "Status")}}> + home + Status + + + block + Block files + + {navigate("abuse_reports", "Abuse reports")}}> + flag + User abuse reports + + {navigate("abuse_reporters", "Abuse reporters")}}> + report + E-mail abuse reporters + + {navigate("ip_bans", "IP bans")}}> + remove_circle + IP bans + + + edit + Update global settings + +
+ + {#if page === ""} + + {:else if page === "abuse_reports"} + + {:else if page === "abuse_reporters"} + + {:else if page === "ip_bans"} + + {/if} +
diff --git a/svelte/src/admin_panel/Home.svelte b/svelte/src/admin_panel/Home.svelte new file mode 100644 index 0000000..d8b40fa --- /dev/null +++ b/svelte/src/admin_panel/Home.svelte @@ -0,0 +1,272 @@ + + +
+
+

Bandwidth and views

+
+
+ + + + + + + + +
+ +
+ +
+ Total usage from {start_time} to {end_time}
+ {formatDataVolume(total_bandwidth, 3)} bandwidth and {formatThousands(total_views, 3)} views +
+ +
+ Call stack + Heap profile + CPU profile (wait 1 min) +
+ +
+ + + + + + + +
DB Time{formatDate(new Date(status.db_time), true, true, true)}DB Latency{formatNumber(status.db_latency / 1000, 3)} ms
+

Pixelstore peers

+ + + + + + + + + + + + + + + + + {#each status.peers as peer} + + + + + + + + + + + + + {/each} + +
AddressPosAliveErr1m5m15mPingFreeMin free
{peer.address}{peer.position}{peer.reachable}{peer.unreachable_count}{peer.load_1_min}{peer.load_5_min}{peer.load_15_min}{formatDuration(peer.latency)}{formatDataVolume(peer.free_space, 3)}{formatDataVolume(peer.min_free_space, 3)}
+

Pixelstore stats

+ + + + + + + + + + + + + + + + + + + + + + + +
Local readsLocal read sizeRemote readsRemote read size
{status.local_reads}{formatDataVolume(status.local_read_size, 4)}{status.remote_reads}{formatDataVolume(status.remote_read_size, 4)}
{status.local_reads_per_sec.toPrecision(4)} / s{formatDataVolume(status.local_read_size_per_sec, 4)} / s{status.remote_reads_per_sec.toPrecision(4)} / s{formatDataVolume(status.remote_read_size_per_sec, 4)} /s
+

Websocket statistics

+ + + + + + + + + + + + + + + + + +
WatcherThreadsListenersAvg
File statistics{status.stats_watcher_threads}{status.stats_watcher_listeners}{(status.stats_watcher_listeners / status.stats_watcher_threads).toPrecision(3)}
+

Query statistics

+ + + + + + + + + + + + {#each status.query_statistics as q} + + + + + + + + {/each} + +
{ getStats('query_name') }}>Query { getStats('calls') }}>Calls { getStats('average_duration') }}>Average Duration { getStats('total_duration') }}>Total DurationCallers
{q.query_name}{q.calls}{formatDuration(q.average_duration)}{formatDuration(q.total_duration)} + {#each q.callers as caller} + {caller.count}x {caller.name}
+ {/each} +
+
+
+ + diff --git a/svelte/src/admin_ip_bans/IPBans.svelte b/svelte/src/admin_panel/IPBans.svelte similarity index 97% rename from svelte/src/admin_ip_bans/IPBans.svelte rename to svelte/src/admin_panel/IPBans.svelte index 8333ba5..b2f585c 100644 --- a/svelte/src/admin_ip_bans/IPBans.svelte +++ b/svelte/src/admin_panel/IPBans.svelte @@ -86,9 +86,6 @@ onMount(get_bans);
- - arrow_back Return to admin panel -