Skip to content

Commit

Permalink
GO2017-12-15
Browse files Browse the repository at this point in the history
GoldenOrb 2017-12-15
  • Loading branch information
ROOterDairyman committed Dec 16, 2017
1 parent 7b2b302 commit b8f2fda
Show file tree
Hide file tree
Showing 336 changed files with 43,683 additions and 0 deletions.
35 changes: 35 additions & 0 deletions bwmon/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#Owned by DairyMan@Whirlpool
#
#Copyright GNU act.
include $(TOPDIR)/rules.mk

PKG_NAME:=bwmon
PKG_VERSION:=1.000
PKG_RELEASE:=1

PKG_MAINTAINER:=Created by DM/makefile by Cobia@whirlpool
include $(INCLUDE_DIR)/package.mk

define Package/bwmon
SECTION:=utils
CATEGORY:=ROOter
SUBMENU:=Optional Applications
TITLE:=Install Bandwidth Monitor
PKGARCH:=all
endef

define Package/bwmon/description
Helper scripts to install Bandwidth Monitor on ROOter
endef


define Build/Compile
endef

define Package/bwmon/install
$(CP) ./files/* $(1)/


endef

$(eval $(call BuildPackage,bwmon))
5 changes: 5 additions & 0 deletions bwmon/files/etc/config/bwmon
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
config bwmon 'bwmon'
option enabled '0'
option unlimited_usage '0'
option unlimited_start '2:00'
option unlimited_end '8:00'
15 changes: 15 additions & 0 deletions bwmon/files/etc/init.d/bwmon
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2006 OpenWrt.org

START=99

start() {
ENB=$(uci get bwmon.bwmon.enabled)
if [ $ENB = "1" ]; then
/opt/WRTbmon/wrtbwmon.sh &
fi
}

stop() {
rmdir -f /tmp/WRTbmon
}
1 change: 1 addition & 0 deletions bwmon/files/lib/upgrade/keep.d/bwmon
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/opt/WRTbmon/data/
32 changes: 32 additions & 0 deletions bwmon/files/opt/WRTbmon/cleanup.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/usr/bin/lua

filepost = "-mac_data.js"
dirname = '/opt/WRTbmon/data'

function clean()
nummon = 0
months = {}
f = io.popen('/bin/ls ' .. dirname)
for name in f:lines() do
s, e = name:find(filepost)
if s ~= nil then
nummon = nummon + 1
months[nummon] = dirname .. "/" .. name
end
end
f:close()

count = 1
if nummon > 0 then
for i=nummon,1,-1 do
if count > 3 then
os.execute("rm -f " .. months[i])
end
count = count + 1
end
end
end

clean()
dirname = '/tmp/bwmon/data'
clean()
28 changes: 28 additions & 0 deletions bwmon/files/opt/WRTbmon/process.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/bin/sh

log() {
logger -t "BWmon Process" "$@"
}

running=0
if [ -e "/tmp/WRTbmon" ]; then
running=1
fi

ENB=$(uci get bwmon.bwmon.enabled)

if [ $running = 1 ]; then
if [ $ENB = 0 ]; then
log "Disable BWmon"
rmdir /tmp/WRTbmon
sleep 4
fi
else
if [ $ENB = 1 ]; then
log "Enable BWmon"
/opt/WRTbmon/wrtbwmon.sh &
fi
fi



270 changes: 270 additions & 0 deletions bwmon/files/opt/WRTbmon/wrtbwmon.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,270 @@
#!/bin/sh

LAN_TYPE=$(uci get network.lan.ipaddr | awk -F. ' { print $1"."$2 }')
LEASES_FILE=/tmp/dhcp.leases
lockDir=/tmp/WRTbmon

[ ! -d "$lockDir" ] && mkdir "$lockDir"
basePath="/tmp/bwmon/"
mkdir -p $basePath"data"
dataPath=$basePath"data/"
backPath=/opt/WRTbmon/data/
STARTIMEX=$(date +%s)
STARTIMEY=$(date +%s)
STARTIMEZ=$(date +%s)
cYear=$(date +%Y)
cDay=$(date +%d)
cMonth=$(date +%m)
setup_time=60
update_time=300
backup_time=1200
pause=30
unlimited="peak"

log() {
logger -t "wrtbwmon" "$@"
}

lock()
{
while [ -f /tmp/wrtbwmon.lock ]; do
if [ ! -d /proc/$(cat /tmp/wrtbwmon.lock) ]; then
log "WARNING : Lockfile detected but process $(cat /tmp/wrtbwmon.lock) does not exist !"
rm -f /tmp/wrtbwmon.lock
fi
sleep 1
done
echo $$ > /tmp/wrtbwmon.lock
}

unlock()
{
rm -f /tmp/wrtbwmon.lock
}

setup()
{
#Create the RRDIPT CHAIN (it doesn't matter if it already exists).
iptables -N RRDIPT 2> /dev/null

#Add the RRDIPT CHAIN to the FORWARD chain (if non existing).
iptables -L FORWARD --line-numbers -n | grep "RRDIPT" | grep "1" > /dev/null
if [ $? -ne 0 ]; then
iptables -L FORWARD -n | grep "RRDIPT" > /dev/null
if [ $? -eq 0 ]; then
log "DEBUG : iptables chain misplaced, recreating it..."
iptables -D FORWARD -j RRDIPT
fi
iptables -I FORWARD -j RRDIPT
fi

#For each host in the ARP table
grep ${LAN_TYPE} /proc/net/arp | while read IP TYPE FLAGS MAC MASK IFACE
do
#Add iptable rules (if non existing).
iptables -nL RRDIPT | grep "${IP} " > /dev/null
if [ $? -ne 0 ]; then
iptables -I RRDIPT -d ${IP} -j RETURN
iptables -I RRDIPT -s ${IP} -j RETURN
fi
done
}

update()
{
[ ! -f "${1}" -a -f /etc/config/usage.db ] && cp /etc/config/usage.db ${1}
lock

#Read and reset counters
iptables -L RRDIPT -vnxZ -t filter > /tmp/traffic_$$.tmp
wan=$(ubus -S call network.interface.wan status | jsonfilter -e '@.device' )
if [ -z $wan ]; then
wan="xxxx"
fi
grep -v "0x0" /proc/net/arp | grep ${LAN_TYPE} | grep -v "$wan" | while read IP TYPE FLAGS MAC MASK IFACE
do
grep ${IP} /tmp/traffic_$$.tmp | while read PKTS BYTES TARGET PROT OPT IFIN IFOUT SRC DST
do
[ "${DST}" = "${IP}" ] && echo $((${BYTES}/1000)) > /tmp/in_$$.tmp
[ "${SRC}" = "${IP}" ] && echo $((${BYTES}/1000)) > /tmp/out_$$.tmp
done
IN=$(cat /tmp/in_$$.tmp)
OUT=$(cat /tmp/out_$$.tmp)
rm -f /tmp/in_$$.tmp
rm -f /tmp/out_$$.tmp
if [ ${IN} -gt 0 -o ${OUT} -gt 0 ]; then
LINE=$(grep ${MAC} ${1})
if [ -z "${LINE}" ]; then
PEAKUSAGE_IN=0
PEAKUSAGE_OUT=0
OFFPEAKUSAGE_IN=0
OFFPEAKUSAGE_OUT=0
else
PEAKUSAGE_IN=$(echo ${LINE} | cut -f2 -s -d, | awk -F: ' { print $2 }' | sed 's/"//g' )
PEAKUSAGE_OUT=$(echo ${LINE} | cut -f3 -s -d, | awk -F: ' { print $2 }' | sed 's/"//g' )
OFFPEAKUSAGE_IN=$(echo ${LINE} | cut -f4 -s -d, | awk -F: ' { print $2 }' | sed 's/"//g' )
OFFPEAKUSAGE_OUT=$(echo ${LINE} | cut -f5 -s -d, | awk -F: ' { print $2 }' | sed 's/"//g' )
fi

if [ "${2}" = "offpeak" ]; then
OFFPEAKUSAGE_IN=$((${OFFPEAKUSAGE_IN}+${IN}))
OFFPEAKUSAGE_OUT=$((${OFFPEAKUSAGE_OUT}+${OUT}))
else
PEAKUSAGE_IN=$((${PEAKUSAGE_IN}+${IN}))
PEAKUSAGE_OUT=$((${PEAKUSAGE_OUT}+${OUT}))
fi

for USERSFILE in /tmp/dhcp.leases /tmp/dnsmasq.conf /etc/dnsmasq.conf /etc/hosts; do
[ -e "$USERSFILE" ] || continue
case $USERSFILE in
/tmp/dhcp.leases )
NAME=$(grep -i "$MAC" $USERSFILE | cut -f4 -s -d' ')
;;
/etc/hosts )
NAME=$(grep "^$IP " $USERSFILE | cut -f2 -s -d' ')
;;
* )
NAME=$(grep -i "$MAC" "$USERSFILE" | cut -f2 -s -d,)
;;
esac
[ "$NAME" = "*" ] && NAME=
[ -n "$NAME" ] && break
done

#NAME=$(cat $LEASES_FILE | grep ${LAN_TYPE} | grep ${MAC} | awk -F[\ ] ' { print $4 }')
if [ -z $NAME ]; then
NAME="*"
fi
grep -v "${MAC}" ${1} > /tmp/db_$$.tmp
mv /tmp/db_$$.tmp ${1}
echo "\"mac\":\""${MAC}"\"","\"down\":\""${PEAKUSAGE_IN}"\"","\"up\":\""${PEAKUSAGE_OUT}"\"","\"offdown\":\""${OFFPEAKUSAGE_IN}"\"","\"offup\":\""${OFFPEAKUSAGE_OUT}"\"","\"ip\":\""${IP}"\"","\"name\":\""${NAME}"\"" >> ${1}
fi
done
rm -f /tmp/*_$$.tmp
unlock
}


createFiles()
{
dailyUsageDB="$dataPath$cYear-$cMonth-$cDay-daily_data.js"
dailyUsageBack="$backPath$cYear-$cMonth-$cDay-daily_data.js"
if [ ! -f $dailyUsageBack ]; then
touch $dailyUsageDB
else
cp -f $dailyUsageBack $dailyUsageDB
fi
monthlyUsageDB="$dataPath$cYear-$cMonth-mac_data.js"
monthlyUsageBack="$backPath$cYear-$cMonth-mac_data.js"
if [ -f $monthlyUsageBack ]; then
cp -f $monthlyUsageBack $monthlyUsageDB".bk"
sed "/start day $cDay/,/end day $cDay/d" $monthlyUsageDB".bk" > $monthlyUsageDB
rm -f $monthlyUsageDB".bk"
else
touch $monthlyUsageDB
fi
}

shutDown()
{
cp -f $dailyUsageDB $dailyUsageBack
cp -f $monthlyUsageDB $monthlyUsageDB".bk"
echo "start day $cDay" >> $monthlyUsageDB".bk"
cat "$dailyUsageDB" >> $monthlyUsageDB".bk"
echo "end day $cDay" >> $monthlyUsageDB".bk"
cp -f $monthlyUsageDB".bk" $monthlyUsageBack
rm -f $monthlyUsageDB".bk"
log "Cleanup backup"
lua /opt/WRTbmon/cleanup.lua
}

checkSetup()
{
CURRTIME=$(date +%s)
let ELAPSE=CURRTIME-STARTIMEX
if [ $ELAPSE -gt $setup_time ]; then
STARTIMEX=$CURRTIME
setup
fi
}

checkUpdate()
{
CURRTIME=$(date +%s)
let ELAPSE=CURRTIME-STARTIMEY
if [ $ELAPSE -gt $update_time ]; then
STARTIMEY=$CURRTIME
update $dailyUsageDB $unlimited
fi
}

checkBackup()
{
CURRTIME=$(date +%s)
let ELAPSE=CURRTIME-STARTIMEZ
if [ $ELAPSE -gt $backup_time ]; then
STARTIMEZ=$CURRTIME
shutDown
fi
}

checkTime()
{
pDay=$(date +%d)
pYear=$(date +%Y)
pMonth=$(date +%m)
if [ "$cDay" -ne "$pDay" ]; then
echo "start day $cDay" >> $monthlyUsageDB
cat "$dailyUsageDB" >> $monthlyUsageDB
echo "end day $cDay" >> $monthlyUsageDB
cp -f $monthlyUsageDB $monthlyUsageBack
cDay=$pDay
rm -f $dataPath[[:digit:]][[:digit:]][[:digit:]][[:digit:]]"-"[[:digit:]][[:digit:]]"-"[[:digit:]][[:digit:]]-daily_data.js
rm -f $backPath[[:digit:]][[:digit:]][[:digit:]][[:digit:]]"-"[[:digit:]][[:digit:]]"-"[[:digit:]][[:digit:]]-daily_data.js
if [ "$cMonth" -ne "$pMonth" ]; then
cMonth=$pMonth
cYear=$pYear
monthlyUsageDB="$dataPath$cYear-$cMonth-mac_data.js"
monthlyUsageBack="$backPath$cYear-$cMonth-mac_data.js"
touch $monthlyUsageDB
fi
rm -f $dailyUsageDB
rm -f $dailyUsageBack
dailyUsageDB="$dataPath$cYear-$cMonth-$cDay-daily_data.js"
touch $dailyUsageDB
dailyUsageBack="$backPath$cYear-$cMonth-$cDay-daily_data.js"
fi
unlimited="peak"
hasUnlimited=$(uci get bwmon.bwmon.unlimited_usage)
if [ $hasUnlimited = 1 ]; then
unlimited_start=$(uci get bwmon.bwmon.unlimited_start)
unlimited_end=$(uci get bwmon.bwmon.unlimited_end)
ul_start=$(date -d "$unlimited_start" +%s);
ul_end=$(date -d "$unlimited_end" +%s);
[ "$ul_end" -lt "$ul_start" ] && ul_start=$((ul_start - 86400))
currTime=$(date +%s)
inUnlimited=$((currTime >= ul_start && currTime <= ul_end))
if [ "$inUnlimited" -eq "1" ]; then
unlimited="offpeak"
fi
fi
}

createFiles
setup
while [ -d $lockDir ]; do
checkSetup
checkTime
checkUpdate
checkBackup
n=0
while [ true ] ; do
n=$(($n + 1))
if [ ! -d "$lockDir" ]; then
shutDown
exit 0
fi
[ "$n" -gt "$pause" ] && break;
sleep 1
done
done
Loading

0 comments on commit b8f2fda

Please sign in to comment.