Report free and paid transfer separately on filesystem details window
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
<script>
|
<script>
|
||||||
import Chart from "../util/Chart.svelte";
|
import Chart from "../util/Chart.svelte";
|
||||||
import { formatDataVolume, formatDate, formatThousands } from "../util/Formatting.svelte";
|
import { formatDataVolume, formatDate, formatNumber, formatThousands } from "../util/Formatting.svelte";
|
||||||
import Modal from "../util/Modal.svelte";
|
import Modal from "../util/Modal.svelte";
|
||||||
import { fs_path_url, fs_timeseries } from "./FilesystemAPI.mjs";
|
import { fs_path_url, fs_timeseries } from "./FilesystemAPI.mjs";
|
||||||
import { generate_share_path, generate_share_url } from "./Sharebar.svelte";
|
import { generate_share_path, generate_share_url } from "./Sharebar.svelte";
|
||||||
@@ -19,9 +19,9 @@ const visibility_change = visible => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$: direct_url = window.location.origin+fs_path_url($nav.base.path)
|
$: direct_url = $nav.base.path ? window.location.origin+fs_path_url($nav.base.path) : ""
|
||||||
$: share_url = generate_share_url($nav.path)
|
$: share_url = generate_share_url($nav.path)
|
||||||
$: direct_share_url = window.location.origin+fs_path_url(generate_share_path($nav.path))
|
$: direct_share_url = $nav.base.path ? window.location.origin+fs_path_url(generate_share_path($nav.path)) : ""
|
||||||
|
|
||||||
let chart
|
let chart
|
||||||
let chart_timespan = 0
|
let chart_timespan = 0
|
||||||
@@ -37,7 +37,7 @@ let chart_timespans = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
let total_downloads = 0
|
let total_downloads = 0
|
||||||
let total_transfer_paid = 0
|
let total_transfer = 0
|
||||||
|
|
||||||
$: update_chart($nav.base, chart_timespan, chart_interval)
|
$: update_chart($nav.base, chart_timespan, chart_interval)
|
||||||
let update_chart = async (base, timespan, interval) => {
|
let update_chart = async (base, timespan, interval) => {
|
||||||
@@ -77,21 +77,23 @@ let update_chart = async (base, timespan, interval) => {
|
|||||||
try {
|
try {
|
||||||
let resp = await fs_timeseries(base.path, start, end, interval)
|
let resp = await fs_timeseries(base.path, start, end, interval)
|
||||||
|
|
||||||
chart.data().datasets = [
|
let c = chart.chart()
|
||||||
{
|
|
||||||
label: "Unique Downloads",
|
c.options.scales.y1 = {
|
||||||
borderWidth: 2,
|
type: "linear",
|
||||||
pointRadius: 0,
|
display: true,
|
||||||
borderColor: color_by_name("chart_1_color"),
|
position: "right",
|
||||||
backgroundColor: color_by_name("chart_1_color"),
|
ticks: {
|
||||||
}, {
|
callback: function (value, index, values) {
|
||||||
label: "Total Downloads",
|
return formatDataVolume(value, 3);
|
||||||
borderWidth: 2,
|
|
||||||
pointRadius: 0,
|
|
||||||
borderColor: color_by_name("chart_3_color"),
|
|
||||||
backgroundColor: color_by_name("chart_3_color"),
|
|
||||||
},
|
},
|
||||||
];
|
},
|
||||||
|
beginAtZero: true,
|
||||||
|
grid: {
|
||||||
|
drawOnChartArea: false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
resp.downloads.timestamps.forEach((val, idx) => {
|
resp.downloads.timestamps.forEach((val, idx) => {
|
||||||
let date = new Date(val);
|
let date = new Date(val);
|
||||||
@@ -103,16 +105,38 @@ let update_chart = async (base, timespan, interval) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
total_downloads = 0
|
total_downloads = 0
|
||||||
total_transfer_paid = 0
|
total_transfer = 0
|
||||||
|
|
||||||
resp.downloads.amounts.forEach(val => total_downloads += val);
|
resp.downloads.amounts.forEach(val => total_downloads += val);
|
||||||
resp.transfer_paid.amounts.forEach((val, idx) => {
|
resp.transfer_free.amounts.forEach((val) => total_transfer += val);
|
||||||
resp.transfer_paid.amounts[idx] = val / base.file_size;
|
resp.transfer_paid.amounts.forEach((val) => total_transfer += val);
|
||||||
total_transfer_paid += val
|
|
||||||
});
|
c.data.labels = resp.downloads.timestamps
|
||||||
chart.data().labels = resp.downloads.timestamps
|
c.data.datasets = [
|
||||||
chart.data().datasets[0].data = resp.downloads.amounts
|
{
|
||||||
chart.data().datasets[1].data = resp.transfer_paid.amounts
|
label: "Downloads",
|
||||||
|
borderWidth: 2,
|
||||||
|
pointRadius: 0,
|
||||||
|
borderColor: color_by_name("chart_1_color"),
|
||||||
|
backgroundColor: color_by_name("chart_1_color"),
|
||||||
|
data: resp.downloads.amounts,
|
||||||
|
}, {
|
||||||
|
label: "Free transfer",
|
||||||
|
borderWidth: 2,
|
||||||
|
pointRadius: 0,
|
||||||
|
borderColor: color_by_name("chart_2_color"),
|
||||||
|
backgroundColor: color_by_name("chart_2_color"),
|
||||||
|
yAxisID: "y1",
|
||||||
|
data: resp.transfer_free.amounts,
|
||||||
|
}, {
|
||||||
|
label: "Premium transfer",
|
||||||
|
borderWidth: 2,
|
||||||
|
pointRadius: 0,
|
||||||
|
borderColor: color_by_name("chart_3_color"),
|
||||||
|
backgroundColor: color_by_name("chart_3_color"),
|
||||||
|
yAxisID: "y1",
|
||||||
|
data: resp.transfer_paid.amounts,
|
||||||
|
},
|
||||||
|
];
|
||||||
chart.update()
|
chart.update()
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error("Failed to get time series data:", err)
|
console.error("Failed to get time series data:", err)
|
||||||
@@ -169,9 +193,9 @@ let update_chart = async (base, timespan, interval) => {
|
|||||||
<tr>
|
<tr>
|
||||||
<td>Transfer used</td>
|
<td>Transfer used</td>
|
||||||
<td>
|
<td>
|
||||||
{formatDataVolume(total_transfer_paid, 4)}
|
{formatDataVolume(total_transfer, 4)}
|
||||||
( {formatThousands(total_transfer_paid)} B ),
|
( {formatThousands(total_transfer)} B ),
|
||||||
{(total_transfer_paid/$nav.base.file_size).toFixed(1)}x file size
|
{(total_transfer/$nav.base.file_size).toFixed(1)}x file size
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td>SHA256 sum</td><td>{$nav.base.sha256_sum}</td></tr>
|
<tr><td>SHA256 sum</td><td>{$nav.base.sha256_sum}</td></tr>
|
||||||
|
@@ -106,14 +106,14 @@ onMount(() => {
|
|||||||
];
|
];
|
||||||
graph_bandwidth.data().datasets = [
|
graph_bandwidth.data().datasets = [
|
||||||
{
|
{
|
||||||
label: "Total bandwidth",
|
label: "Free transfer",
|
||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointRadius: 0,
|
pointRadius: 0,
|
||||||
borderColor: color_by_name("highlight_color"),
|
borderColor: color_by_name("highlight_color"),
|
||||||
backgroundColor: color_by_name("highlight_color"),
|
backgroundColor: color_by_name("highlight_color"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Premium bandwidth",
|
label: "Premium transfer",
|
||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointRadius: 0,
|
pointRadius: 0,
|
||||||
borderColor: color_by_name("danger_color"),
|
borderColor: color_by_name("danger_color"),
|
||||||
|
Reference in New Issue
Block a user