mirror of
https://github.com/philomena-dev/philomena.git
synced 2024-11-23 20:18:00 +01:00
add upload graph to stats page
This commit is contained in:
parent
47fcec86ea
commit
75b15a59b7
4 changed files with 43 additions and 1 deletions
|
@ -398,6 +398,7 @@ span.stat {
|
||||||
@import "views/posts";
|
@import "views/posts";
|
||||||
@import "views/profiles";
|
@import "views/profiles";
|
||||||
@import "views/search";
|
@import "views/search";
|
||||||
|
@import "views/stats";
|
||||||
@import "views/tags";
|
@import "views/tags";
|
||||||
|
|
||||||
.no-overflow {
|
.no-overflow {
|
||||||
|
|
7
assets/css/views/stats.scss
Normal file
7
assets/css/views/stats.scss
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
.upload-stats rect {
|
||||||
|
fill: $sparkline_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.upload-stats rect:hover {
|
||||||
|
fill: red;
|
||||||
|
}
|
|
@ -116,3 +116,6 @@ elixir:
|
||||||
span.stat>
|
span.stat>
|
||||||
= @response_time
|
= @response_time
|
||||||
' hour(s) between a report being made and the report being resolved.
|
' hour(s) between a report being made and the report being resolved.
|
||||||
|
|
||||||
|
h3 Upload History
|
||||||
|
= upload_graph(img_bucket["non_deleted"]["all_time"]["buckets"])
|
||||||
|
|
|
@ -1,3 +1,34 @@
|
||||||
defmodule PhilomenaWeb.StatView do
|
defmodule PhilomenaWeb.StatView do
|
||||||
use PhilomenaWeb, :view
|
use PhilomenaWeb, :view
|
||||||
|
|
||||||
|
def upload_graph(data) do
|
||||||
|
data = Enum.sort_by(data, & &1["key"])
|
||||||
|
n_buckets = length(data)
|
||||||
|
|
||||||
|
{%{"key" => min_time}, %{"key" => max_time}} = Enum.min_max_by(data, & &1["key"], fn -> %{"key" => 0} end)
|
||||||
|
{%{"doc_count" => min_docs}, %{"doc_count" => max_docs}} = Enum.min_max_by(data, & &1["doc_count"], fn -> %{"doc_count" => 0} end)
|
||||||
|
|
||||||
|
graph_width = 950
|
||||||
|
graph_height = 475
|
||||||
|
|
||||||
|
bar_width = safe_div(graph_width, n_buckets)
|
||||||
|
max_bar_height = safe_div(graph_height, max_docs - min_docs)
|
||||||
|
|
||||||
|
content_tag :svg, class: "upload-stats", viewBox: "0 0 #{graph_width} #{graph_height}" do
|
||||||
|
for {datum, i} <- Enum.with_index(data) do
|
||||||
|
bar_height = safe_div(datum["doc_count"], max_docs) * max_bar_height
|
||||||
|
|
||||||
|
x = i * bar_width
|
||||||
|
y = graph_height-bar_height
|
||||||
|
height = bar_height
|
||||||
|
|
||||||
|
content_tag :rect, width: bar_width, height: height, x: x, y: y, fill: "#000" do
|
||||||
|
content_tag :title, "#{datum["key_as_string"]} - #{datum["doc_count"]} uploads"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
defp safe_div(n, 0), do: 0
|
||||||
|
defp safe_div(n, d), do: n / d
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue