Initial commit
This commit is contained in:
6
config/limitator
Normal file
6
config/limitator
Normal file
@@ -0,0 +1,6 @@
|
||||
config limitator 'limitator'
|
||||
option wan_dev 'eth1.1'
|
||||
option exclude_network '10.0.2.0/24'
|
||||
option iptables_forward 'FORWARD'
|
||||
option iptables_input 'INPUT'
|
||||
option iptables_output 'OUTPUT'
|
||||
7
crontab
Normal file
7
crontab
Normal file
@@ -0,0 +1,7 @@
|
||||
# Limitator
|
||||
# Save used bytes to local file
|
||||
*/10 7-23 * * * /etc/init.d/limitator save &
|
||||
# Restart at midnight
|
||||
1 0 1-12,14-31 * * /etc/init.d/limitator restart &
|
||||
# Reset the quota monthly
|
||||
1 0 13 * * /etc/init.d/limitator reset &
|
||||
168
limitator
Normal file
168
limitator
Normal file
@@ -0,0 +1,168 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
START=95
|
||||
STOP=01
|
||||
|
||||
EXTRA_COMMANDS="save reset show json"
|
||||
EXTRA_HELP=<<EOF
|
||||
reset Resets quota
|
||||
save Saves counters to persistent storage
|
||||
show Shows remaining quota
|
||||
json Print data in JSON format
|
||||
EOF
|
||||
|
||||
config_load "limitator"
|
||||
config_get MONTHLY_QUOTA limitator quota 15 # Monthly quota in GB
|
||||
config_get WAN_DEV limitator wan_dev 'wlan0' # Interface name for WAN
|
||||
config_get FIRST_DAY limitator first_day 13 # Day of month when internet plan starts accounting.
|
||||
config_get START_TIME limitator start_time '07:00' # Starting time of internet plan limited hours.
|
||||
config_get END_TIME limitator end_time '23:00' # Ending time of internet plan limited hours.
|
||||
config_get INTRANET limitator intranet '10.0.0.0/8' # Traffic in Intranet does not count for quota.
|
||||
config_get EXCLUDE_NETWORK limitator exclude_network # Traffic originated in specified network does not count for quota.
|
||||
config_get USED_BYTES_FILE limitator used_bytes_file '/root/limitator/used_bytes' # A persistent file to save used bytes value.
|
||||
config_get LOG_FILE limitator log_file '/root/limitator/log' # A persistent file to log.
|
||||
config_get IPTABLES_CHAIN limitator iptables_chain 'LIMITATOR' # Name of iptables chain.
|
||||
config_get IPTABLES_FORWARD limitator iptables_forward 'forwarding_rule' # Name of iptables rule for forward.
|
||||
config_get IPTABLES_INPUT limitator iptables_input 'input_rule' # Name of iptables rule for input.
|
||||
config_get IPTABLES_OUTPUT limitator iptables_output 'output_rule' # Name of iptables rule for output.
|
||||
|
||||
check_environment(){
|
||||
# Detect if iptables-mod-extra module is installed
|
||||
[ -z "$(opkg info iptables-mod-extra|grep installed)" ] && echo "iptables-mod-extra module is not installed." && opkg update && opkg install iptables-mod-extra
|
||||
# Detect if xt_quota module is loaded
|
||||
[ -z "$(lsmod|grep xt_quota)" ] && echo "xt_quota module is not loaded" && modprobe xt_quota
|
||||
}
|
||||
|
||||
get_saved_used_bytes(){
|
||||
local used_bytes
|
||||
if [ -s "$USED_BYTES_FILE" ];then
|
||||
used_bytes=$(cat $USED_BYTES_FILE 2>/dev/null)
|
||||
else
|
||||
used_bytes=0
|
||||
fi
|
||||
echo -n $used_bytes
|
||||
}
|
||||
|
||||
get_iptables_quota_rule_num(){
|
||||
if [ -n "$EXCLUDE_NETWORK" ];then
|
||||
echo -n 3
|
||||
else
|
||||
echo -n 1
|
||||
fi
|
||||
}
|
||||
|
||||
get_current_used_bytes(){
|
||||
local used_bytes=$(iptables -vnxL $IPTABLES_CHAIN $(get_iptables_quota_rule_num) | awk '{print $2}')
|
||||
if [ -n "$used_bytes" ];then
|
||||
echo -n $used_bytes
|
||||
else
|
||||
get_saved_used_bytes
|
||||
fi
|
||||
}
|
||||
|
||||
set_saved_used_bytes(){
|
||||
local used_bytes=$(get_current_used_bytes)
|
||||
if [ $used_bytes -gt 0 ];then
|
||||
echo -n $used_bytes > $USED_BYTES_FILE
|
||||
fi
|
||||
}
|
||||
|
||||
get_total_quota_until_today(){
|
||||
local current_time=$(date +'%s')
|
||||
local first_day=$(date -d $(date +"%Y-%m-$FIRST_DAY") +'%s')
|
||||
local next_first_day
|
||||
|
||||
if [ $current_time -ge $first_day ]; then
|
||||
next_first_day=$(date -d $(date -d @$first_day +%Y-%m-%d)"+1 month" +'%s')
|
||||
else
|
||||
next_first_day=$first_day
|
||||
first_day=$(date -d $(date -d "1 month ago" +"%Y-%m-$FIRST_DAY") +'%s')
|
||||
fi
|
||||
|
||||
local seconds_in_month=$(($next_first_day - $first_day))
|
||||
local montly_quota_bytes=$(($MONTHLY_QUOTA * 1024 * 1024 * 1024))
|
||||
local elapsed_seconds_tomorrow=$(($(date -d $(date -d "1 day" +'%Y-%m-%d') +'%s') - $first_day))
|
||||
|
||||
echo -n $(($montly_quota_bytes * $elapsed_seconds_tomorrow / $seconds_in_month))
|
||||
}
|
||||
|
||||
get_remaining_quota(){
|
||||
echo -n $(($(get_total_quota_until_today) - $(get_current_used_bytes)))
|
||||
}
|
||||
|
||||
show_remaining_quota(){
|
||||
echo Remaining: $(($(get_remaining_quota) / 1024 / 1024)) MB
|
||||
echo Total quota until today: $(($(get_total_quota_until_today) / 1024 / 1024)) MB
|
||||
}
|
||||
|
||||
get_json(){
|
||||
echo -n "{ \"remaining\": $(get_remaining_quota), \"used_bytes\": $(get_current_used_bytes), \"current_quota\": $(get_total_quota_until_today), \"total_quota\": $(($MONTHLY_QUOTA * 1024 * 1024 * 1024)) }"
|
||||
}
|
||||
|
||||
reset_quota(){
|
||||
iptables -Z $IPTABLES_CHAIN $(get_iptables_quota_rule_num)
|
||||
echo -n 0 > ${USED_BYTES_FILE}
|
||||
}
|
||||
|
||||
del_iptables_rule(){
|
||||
iptables -F $IPTABLES_CHAIN
|
||||
for chain_name in $IPTABLES_FORWARD $IPTABLES_INPUT $IPTABLES_OUTPUT
|
||||
do
|
||||
while true
|
||||
do
|
||||
line=$(iptables -L $chain_name|sed -e '1,2d'|grep -n $IPTABLES_CHAIN|head -1|cut -d : -f 1 2>/dev/null)
|
||||
[ -n "$(echo $line|grep -E ^[[:digit:]]+$)" ] && iptables -D $chain_name $line || break
|
||||
done
|
||||
done
|
||||
iptables -X $IPTABLES_CHAIN
|
||||
}
|
||||
|
||||
set_iptables_rule(){
|
||||
iptables -N $IPTABLES_CHAIN
|
||||
if [ -n "$EXCLUDE_NETWORK" ];then
|
||||
iptables -I $IPTABLES_CHAIN 1 -s $EXCLUDE_NETWORK -j ACCEPT
|
||||
iptables -I $IPTABLES_CHAIN 2 -d $EXCLUDE_NETWORK -j ACCEPT
|
||||
fi
|
||||
iptables -I $IPTABLES_CHAIN $(get_iptables_quota_rule_num) -c 0 $(get_saved_used_bytes) -m quota --quota $(get_remaining_quota) -j ACCEPT
|
||||
iptables -I $IPTABLES_CHAIN $(($(get_iptables_quota_rule_num) + 1)) -j REJECT
|
||||
|
||||
# Iptables requires UTC time
|
||||
local start_time_utc=$(date -u +%H:%M --date=@$(date -d "today $START_TIME" +%s))
|
||||
local end_time_utc=$(date -u +%H:%M --date=@$(date -d "today $END_TIME" +%s))
|
||||
|
||||
iptables -I $IPTABLES_FORWARD -i $WAN_DEV ! -s $INTRANET -m time --timestart $start_time_utc --timestop $end_time_utc -j $IPTABLES_CHAIN
|
||||
iptables -I $IPTABLES_FORWARD -o $WAN_DEV ! -d $INTRANET -m time --timestart $start_time_utc --timestop $end_time_utc -j $IPTABLES_CHAIN
|
||||
iptables -I $IPTABLES_INPUT -i $WAN_DEV ! -s $INTRANET -m time --timestart $start_time_utc --timestop $end_time_utc -j $IPTABLES_CHAIN
|
||||
iptables -I $IPTABLES_OUTPUT -o $WAN_DEV ! -d $INTRANET -m time --timestart $start_time_utc --timestop $end_time_utc -j $IPTABLES_CHAIN
|
||||
}
|
||||
|
||||
start() {
|
||||
set_iptables_rule
|
||||
}
|
||||
|
||||
stop() {
|
||||
set_saved_used_bytes
|
||||
echo $(date +'%F %H:%M') used_bytes=$(get_current_used_bytes) >> $LOG_FILE
|
||||
del_iptables_rule
|
||||
}
|
||||
|
||||
restart() {
|
||||
stop
|
||||
start
|
||||
}
|
||||
|
||||
save() {
|
||||
set_saved_used_bytes
|
||||
}
|
||||
|
||||
reset() {
|
||||
reset_quota
|
||||
restart
|
||||
}
|
||||
|
||||
show() {
|
||||
show_remaining_quota
|
||||
}
|
||||
|
||||
json() {
|
||||
get_json
|
||||
}
|
||||
168
limitator.old
Normal file
168
limitator.old
Normal file
@@ -0,0 +1,168 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
START=95
|
||||
STOP=01
|
||||
|
||||
EXTRA_COMMANDS="save reset show json"
|
||||
EXTRA_HELP=<<EOF
|
||||
reset Resets quota
|
||||
save Saves counters to persistent storage
|
||||
show Shows remaining quota
|
||||
json Print data in JSON format
|
||||
EOF
|
||||
|
||||
config_load "limitator"
|
||||
config_get MONTHLY_QUOTA limitator quota 15 # Monthly quota in GB
|
||||
config_get WAN_DEV limitator wan_dev 'wlan0' # Interface name for WAN
|
||||
config_get FIRST_DAY limitator first_day 13 # Day of month when internet plan starts accounting.
|
||||
config_get START_TIME limitator start_time '07:00' # Starting time of internet plan limited hours.
|
||||
config_get END_TIME limitator end_time '23:00' # Ending time of internet plan limited hours.
|
||||
config_get INTRANET limitator intranet '10.0.0.0/8' # Traffic in Intranet does not count for quota.
|
||||
config_get EXCLUDE_NETWORK limitator exclude_network # Traffic originated in specified network does not count for quota.
|
||||
config_get USED_BYTES_FILE limitator used_bytes_file '/root/limitator/used_bytes' # A persistent file to save used bytes value.
|
||||
config_get LOG_FILE limitator log_file '/root/limitator/log' # A persistent file to log.
|
||||
config_get IPTABLES_CHAIN limitator iptables_chain 'LIMITATOR' # Name of iptables chain.
|
||||
config_get IPTABLES_FORWARD limitator iptables_forward 'forwarding_rule' # Name of iptables rule for forward.
|
||||
config_get IPTABLES_INPUT limitator iptables_input 'input_rule' # Name of iptables rule for input.
|
||||
config_get IPTABLES_OUTPUT limitator iptables_output 'output_rule' # Name of iptables rule for output.
|
||||
|
||||
check_environment(){
|
||||
# Detect if iptables-mod-extra module is installed
|
||||
[ -z "$(opkg info iptables-mod-extra|grep installed)" ] && echo "iptables-mod-extra module is not installed." && opkg update && opkg install iptables-mod-extra
|
||||
# Detect if xt_quota module is loaded
|
||||
[ -z "$(lsmod|grep xt_quota)" ] && echo "xt_quota module is not loaded" && modprobe xt_quota
|
||||
}
|
||||
|
||||
get_saved_used_bytes(){
|
||||
local used_bytes
|
||||
if [ -s "$USED_BYTES_FILE" ];then
|
||||
used_bytes=$(cat $USED_BYTES_FILE 2>/dev/null)
|
||||
else
|
||||
used_bytes=0
|
||||
fi
|
||||
echo -n $used_bytes
|
||||
}
|
||||
|
||||
get_iptables_quota_rule_num(){
|
||||
if [ -n "$EXCLUDE_NETWORK" ];then
|
||||
echo -n 3
|
||||
else
|
||||
echo -n 1
|
||||
fi
|
||||
}
|
||||
|
||||
get_current_used_bytes(){
|
||||
local used_bytes=$(iptables -vnxL $IPTABLES_CHAIN $(get_iptables_quota_rule_num) | awk '{print $2}')
|
||||
if [ -n "$used_bytes" ];then
|
||||
echo -n $used_bytes
|
||||
else
|
||||
get_saved_used_bytes
|
||||
fi
|
||||
}
|
||||
|
||||
set_saved_used_bytes(){
|
||||
local used_bytes=$(get_current_used_bytes)
|
||||
if [ $used_bytes -gt 0 ];then
|
||||
echo -n $used_bytes > $USED_BYTES_FILE
|
||||
fi
|
||||
}
|
||||
|
||||
get_total_quota_until_today(){
|
||||
local current_time=$(date +'%s')
|
||||
local first_day=$(date -d $(date +"%Y-%m-$FIRST_DAY") +'%s')
|
||||
local next_first_day
|
||||
|
||||
if [ $current_time -ge $first_day ]; then
|
||||
next_first_day=$(date -d $(date -d "1 month" +"%Y-%m-$FIRST_DAY") +'%s')
|
||||
else
|
||||
next_first_day=$first_day
|
||||
first_day=$(date -d $(date -d "1 month ago" +"%Y-%m-$FIRST_DAY") +'%s')
|
||||
fi
|
||||
|
||||
local seconds_in_month=$(($next_first_day - $first_day))
|
||||
local montly_quota_bytes=$(($MONTHLY_QUOTA * 1024 * 1024 * 1024))
|
||||
local elapsed_seconds_tomorrow=$(($(date -d $(date -d "1 day" +'%Y-%m-%d') +'%s') - $first_day))
|
||||
|
||||
echo -n $(($montly_quota_bytes * $elapsed_seconds_tomorrow / $seconds_in_month))
|
||||
}
|
||||
|
||||
get_remaining_quota(){
|
||||
echo -n $(($(get_total_quota_until_today) - $(get_current_used_bytes)))
|
||||
}
|
||||
|
||||
show_remaining_quota(){
|
||||
echo Remaining: $(($(get_remaining_quota) / 1024 / 1024)) MB
|
||||
echo Total quota until today: $(($(get_total_quota_until_today) / 1024 / 1024)) MB
|
||||
}
|
||||
|
||||
get_json(){
|
||||
echo -n "{ \"remaining\": $(get_remaining_quota), \"used_bytes\": $(get_current_used_bytes), \"current_quota\": $(get_total_quota_until_today), \"total_quota\": $(($MONTHLY_QUOTA * 1024 * 1024 * 1024)) }"
|
||||
}
|
||||
|
||||
reset_quota(){
|
||||
iptables -Z $IPTABLES_CHAIN $(get_iptables_quota_rule_num)
|
||||
echo -n 0 > ${USED_BYTES_FILE}
|
||||
}
|
||||
|
||||
del_iptables_rule(){
|
||||
iptables -F $IPTABLES_CHAIN
|
||||
for chain_name in $IPTABLES_FORWARD $IPTABLES_INPUT $IPTABLES_OUTPUT
|
||||
do
|
||||
while true
|
||||
do
|
||||
line=$(iptables -L $chain_name|sed -e '1,2d'|grep -n $IPTABLES_CHAIN|head -1|cut -d : -f 1 2>/dev/null)
|
||||
[ -n "$(echo $line|grep -E ^[[:digit:]]+$)" ] && iptables -D $chain_name $line || break
|
||||
done
|
||||
done
|
||||
iptables -X $IPTABLES_CHAIN
|
||||
}
|
||||
|
||||
set_iptables_rule(){
|
||||
iptables -N $IPTABLES_CHAIN
|
||||
if [ -n "$EXCLUDE_NETWORK" ];then
|
||||
iptables -I $IPTABLES_CHAIN 1 -s $EXCLUDE_NETWORK -j ACCEPT
|
||||
iptables -I $IPTABLES_CHAIN 2 -d $EXCLUDE_NETWORK -j ACCEPT
|
||||
fi
|
||||
iptables -I $IPTABLES_CHAIN $(get_iptables_quota_rule_num) -c 0 $(get_saved_used_bytes) -m quota --quota $(get_remaining_quota) -j ACCEPT
|
||||
iptables -I $IPTABLES_CHAIN $(($(get_iptables_quota_rule_num) + 1)) -j REJECT
|
||||
|
||||
# Iptables requires UTC time
|
||||
local start_time_utc=$(date -u +%H:%M --date=@$(date -d "today $START_TIME" +%s))
|
||||
local end_time_utc=$(date -u +%H:%M --date=@$(date -d "today $END_TIME" +%s))
|
||||
|
||||
iptables -I $IPTABLES_FORWARD -i $WAN_DEV ! -s $INTRANET -m time --timestart $start_time_utc --timestop $end_time_utc -j $IPTABLES_CHAIN
|
||||
iptables -I $IPTABLES_FORWARD -o $WAN_DEV ! -d $INTRANET -m time --timestart $start_time_utc --timestop $end_time_utc -j $IPTABLES_CHAIN
|
||||
iptables -I $IPTABLES_INPUT -i $WAN_DEV ! -s $INTRANET -m time --timestart $start_time_utc --timestop $end_time_utc -j $IPTABLES_CHAIN
|
||||
iptables -I $IPTABLES_OUTPUT -o $WAN_DEV ! -d $INTRANET -m time --timestart $start_time_utc --timestop $end_time_utc -j $IPTABLES_CHAIN
|
||||
}
|
||||
|
||||
start() {
|
||||
set_iptables_rule
|
||||
}
|
||||
|
||||
stop() {
|
||||
set_saved_used_bytes
|
||||
echo $(date +'%F %H:%M') used_bytes=$(get_current_used_bytes) >> $LOG_FILE
|
||||
del_iptables_rule
|
||||
}
|
||||
|
||||
restart() {
|
||||
stop
|
||||
start
|
||||
}
|
||||
|
||||
save() {
|
||||
set_saved_used_bytes
|
||||
}
|
||||
|
||||
reset() {
|
||||
reset_quota
|
||||
restart
|
||||
}
|
||||
|
||||
show() {
|
||||
show_remaining_quota
|
||||
}
|
||||
|
||||
json() {
|
||||
get_json
|
||||
}
|
||||
7
www/cgi-bin/limitator.json
Normal file
7
www/cgi-bin/limitator.json
Normal file
@@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "Access-Control-Allow-Origin: *"
|
||||
echo "Content-type: application/json"
|
||||
echo ""
|
||||
|
||||
/etc/init.d/limitator json
|
||||
53
www/index.html
Normal file
53
www/index.html
Normal file
@@ -0,0 +1,53 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
|
||||
<meta charset="UTF-8">
|
||||
</head>
|
||||
|
||||
<body style="background-color: white">
|
||||
<h1>Cuota restante: <span id="remaining"></span></h1>
|
||||
|
||||
<br><br>
|
||||
|
||||
<h3>Velocidad actual: <span id="speed">calculando...</span></h3>
|
||||
<canvas id="speed_chart" width="800" height="400"></canvas>
|
||||
|
||||
<br><br>
|
||||
|
||||
<p>Usado: <span id="used_bytes"></span></p>
|
||||
<p>Cuota asignada hasta hoy: <span id="current_quota"></span></p>
|
||||
<p>Cuota mensual total: <span id="total_quota"></span></p>
|
||||
|
||||
<br><br>
|
||||
|
||||
<h3>Descripción</h3>
|
||||
<p>El periodo de facturación de internet comienza el día 13. La cuota mensual se divide entre la cantidad de días
|
||||
del periodo de facturación y se va asignando según transcurren los días. Si se sobrepasa la cuota asignada se
|
||||
corta la conexión a internet y hay que esperar a que transcurra el día para que se asigne la cuota del próximo
|
||||
día.</p>
|
||||
<p>Entre las 23h y 7h es la franja gratuita, la conexión a Internet siempre está disponible y el consumo no cuenta
|
||||
para la cuota.</p>
|
||||
|
||||
<br><br>
|
||||
|
||||
<h3>Leyenda</h3>
|
||||
<p>Cuota restante: megas restantes antes de cortarse la conexión a Internet.</p>
|
||||
<p>Velocidad actual: velocidad de transferencia en este mismo instante, en Kilobytes por segundo. Solo cuenta la cuota
|
||||
consumida, por lo que de 23h a 7h marca 0 KB/s.</p>
|
||||
<p>Usado: megas usados en el periodo de facturación actual.</p>
|
||||
<p>Cuota asignada hasta hoy: megas totales asignados hasta el día de hoy. El último día será igual a la cuota
|
||||
mensual total.</p>
|
||||
<p>Cuota mensual total: megas totales disponibles para todo el mes.</p>
|
||||
|
||||
<br><br>
|
||||
|
||||
<a style="color: black; font-family: arial, helvetica, sans-serif;" href="/cgi-bin/luci/">LuCI - Lua Configuration
|
||||
Interface</a>
|
||||
|
||||
<script src="js/Chart.min.js"></script>
|
||||
<script src="js/main.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
7
www/js/Chart.min.js
vendored
Normal file
7
www/js/Chart.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
86
www/js/main.js
Normal file
86
www/js/main.js
Normal file
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
* Obtiene los datos de la cuota de cgi-bin/limitator.json y los muestra.
|
||||
*/
|
||||
|
||||
getCounters(parseCounters);
|
||||
setInterval(() => getCounters(parseCounters), 5000);
|
||||
|
||||
var ctx = document.getElementById('speed_chart');
|
||||
var chart = new Chart(ctx, {
|
||||
type: 'line',
|
||||
data: {
|
||||
labels: ['', '', '', '', '', '', '', '', '', ''],
|
||||
datasets: [{
|
||||
label: 'Velocidad (KB/s)',
|
||||
data: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
responsive: false,
|
||||
elements: {
|
||||
point: {
|
||||
radius: 0
|
||||
}
|
||||
},
|
||||
scales: {
|
||||
xAxes: [{
|
||||
ticks: {
|
||||
display: false
|
||||
}
|
||||
}],
|
||||
yAxes: [{
|
||||
ticks: {
|
||||
min: 0
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
function getCounters(funcToParse) {
|
||||
var xhttp = new XMLHttpRequest();
|
||||
xhttp.onreadystatechange = function () {
|
||||
if (this.readyState == 4 && this.status == 200) {
|
||||
funcToParse(this.responseText);
|
||||
}
|
||||
};
|
||||
xhttp.open("GET", "cgi-bin/limitator.json", true);
|
||||
xhttp.send();
|
||||
}
|
||||
|
||||
function parseCounters(data) {
|
||||
let counters = JSON.parse(data);
|
||||
document.getElementById("remaining").innerHTML = bytesToMegas(counters.remaining);
|
||||
document.getElementById("used_bytes").innerHTML = bytesToMegas(counters.used_bytes);
|
||||
document.getElementById("current_quota").innerHTML = bytesToMegas(counters.current_quota);
|
||||
document.getElementById("total_quota").innerHTML = bytesToMegas(counters.total_quota);
|
||||
|
||||
updateSpeed(counters.used_bytes);
|
||||
}
|
||||
|
||||
var used_bytes_array = new Array();
|
||||
function updateSpeed(used_bytes) {
|
||||
used_bytes_array.push({ used_bytes: used_bytes, date: new Date() });
|
||||
|
||||
if (used_bytes_array.length <= 1)
|
||||
return;
|
||||
else if (used_bytes_array.length > 10)
|
||||
used_bytes_array.shift();
|
||||
|
||||
let previous_used_bytes = used_bytes_array[used_bytes_array.length - 2];
|
||||
let byte_transferred = used_bytes - previous_used_bytes.used_bytes;
|
||||
let time_elapsed = (new Date() - previous_used_bytes.date) / 1000;
|
||||
document.getElementById("speed").innerHTML = bytesToKbps(byte_transferred / time_elapsed);
|
||||
|
||||
chart.data.datasets[0].data.shift();
|
||||
chart.data.datasets[0].data.push(byte_transferred / time_elapsed / 1024);
|
||||
chart.update();
|
||||
}
|
||||
|
||||
function bytesToMegas(number) {
|
||||
return (number / 1024 / 1024).toFixed(1) + ' MB';
|
||||
}
|
||||
|
||||
function bytesToKbps(number) {
|
||||
return (number / 1024).toFixed(1) + ' KB/s';
|
||||
}
|
||||
Reference in New Issue
Block a user