Bug #3334 » pfSense_status_graph.patch
src/etc/inc/util.inc | ||
---|---|---|
1962 | 1962 |
return ("$num {$units[$i]}"); |
1963 | 1963 |
} |
1964 | 1964 | |
1965 | ||
1966 |
function unformat_number($formated_num) { |
|
1967 |
$num = strtoupper($formated_num); |
|
1968 |
|
|
1969 |
if ( strpos($num,"T") !== false ) { |
|
1970 |
$num = str_replace("T","",$num) * 1000 * 1000 * 1000 * 1000; |
|
1971 |
} else if ( strpos($num,"G") !== false ) { |
|
1972 |
$num = str_replace("G","",$num) * 1000 * 1000 * 1000; |
|
1973 |
} else if ( strpos($num,"M") !== false ) { |
|
1974 |
$num = str_replace("M","",$num) * 1000 * 1000; |
|
1975 |
} else if ( strpos($num,"K") !== false ) { |
|
1976 |
$num = str_replace("K","",$num) * 1000; |
|
1977 |
} |
|
1978 |
|
|
1979 |
return $num; |
|
1980 |
} |
|
1981 | ||
1965 | 1982 |
function update_filter_reload_status($text, $new=false) { |
1966 | 1983 |
global $g; |
1967 | 1984 |
src/usr/local/bin/iftop_parse.awk | ||
---|---|---|
1 |
BEGIN { |
|
2 |
FS = " " |
|
3 |
numlist = 0 |
|
4 |
nblines = 15 |
|
5 |
} |
|
6 |
{ |
|
7 |
if ( numlist == 1 && $1 == "--------------------------------------------------------------------------------------------" ) { |
|
8 |
exit |
|
9 |
} |
|
10 | ||
11 |
if ( numlist == 0 && $1 == "--------------------------------------------------------------------------------------------" ) { |
|
12 |
numlist = 1 |
|
13 |
next |
|
14 |
} |
|
15 | ||
16 |
if ( numlist == 1 ) { |
|
17 |
if ( $0 ~ "=>" && nblines > 0 ) { |
|
18 |
SENDER = $2 |
|
19 |
STX = pfFormat($4) |
|
20 |
getline |
|
21 |
RECEIVER = $1 |
|
22 |
RTX = pfFormat($3) |
|
23 |
printf "%s;%s;%s\n", SENDER, RTX, STX |
|
24 |
printf "%s;%s;%s\n", RECEIVER, STX, RTX |
|
25 |
nblines-- |
|
26 |
if ( nblines < 1 ) { |
|
27 |
exit |
|
28 |
} |
|
29 |
} |
|
30 |
next |
|
31 |
} |
|
32 |
} |
|
33 |
END { |
|
34 |
} |
|
35 | ||
36 |
function pfFormat(str) { |
|
37 |
sub("b","",str) |
|
38 |
return str |
|
39 |
} |
src/usr/local/bin/iftop_parser.sh | ||
---|---|---|
1 |
#!/bin/sh |
|
2 | ||
3 |
# Usage |
|
4 |
if [ $# -ne 1 -a $# -ne 2 ]; then |
|
5 |
echo "Usage : $0 iface" |
|
6 |
exit |
|
7 |
fi |
|
8 | ||
9 |
# files paths |
|
10 |
pid_file=/var/run/iftop_${1}.pid |
|
11 |
cache_file=/var/db/iftop_${1}.log |
|
12 |
awk_script=/usr/local/bin/iftop_parse.awk |
|
13 | ||
14 |
# Binaries paths |
|
15 |
DATE=/bin/date |
|
16 |
STAT=/usr/bin/stat |
|
17 |
CUT=/usr/bin/cut |
|
18 |
PS=/bin/ps |
|
19 |
GREP=/usr/bin/grep |
|
20 |
CAT=/bin/cat |
|
21 |
RM=/bin/rm |
|
22 |
IFTOP=/usr/local/sbin/iftop |
|
23 |
AWK=/usr/bin/awk |
|
24 | ||
25 |
# test if pid file exist |
|
26 |
if [ -f $pid_file ]; then |
|
27 |
# check how old is the file |
|
28 |
curTS=`$DATE +%s` |
|
29 |
pidTS=`$STAT -r $pid_file | $CUT -d " " -f 10` |
|
30 |
# if more than 10 seconds, |
|
31 |
# it must be a dead pid file (process killed?) |
|
32 |
# or a stucked process that we should kill |
|
33 |
if [ $(( curTS - pidTS )) -gt 10 ]; then |
|
34 |
oldPID=`$CAT $pid_file` |
|
35 |
# test if pid still exist |
|
36 |
run=`$PS -p $oldPID | $GREP -F $0` |
|
37 |
if [ "$run" != "" ]; then |
|
38 |
kill -9 $oldPID |
|
39 |
fi |
|
40 |
$RM $pid_file |
|
41 |
$RM $cache_file 2>> /dev/null |
|
42 |
else |
|
43 |
if [ -s $cache_file ]; then |
|
44 |
$CAT $cache_file |
|
45 |
fi |
|
46 |
fi |
|
47 |
else |
|
48 |
echo -n $$ > $pid_file |
|
49 |
$IFTOP -nNb -i $1 -s 1 -o 2s -t 2>> /dev/null | $AWK -f $awk_script > ${cache_file}.tmp |
|
50 |
$CAT ${cache_file}.tmp > $cache_file |
|
51 |
$CAT $cache_file |
|
52 |
$RM $pid_file |
|
53 |
fi |
src/usr/local/www/bandwidth_by_ip.php | ||
---|---|---|
109 | 109 |
} |
110 | 110 |
} |
111 | 111 | |
112 |
$_grb = exec("/usr/local/bin/rate -i {$real_interface} -nlq 1 -Aba 20 {$sort_method} {$ratesubnet} | tr \"|\" \" \" | awk '{ printf \"%s:%s:%s:%s:%s\\n\", $1, $2, $4, $6, $8 }'", $listedIPs); |
|
112 | ||
113 |
//get the mode |
|
114 |
$mode = !empty($_REQUEST['mode']) ? $_REQUEST['mode'] : ''; |
|
115 |
if ($mode == "iftop") { |
|
116 |
$current_ts = time(); |
|
117 |
if ( file_exists("/var/run/iftop_{$real_interface}.pid") ) { |
|
118 |
$statPID = stat("/var/run/iftop_{$real_interface}.pid"); |
|
119 |
$since = $current_ts - $statPID['mtime']; |
|
120 |
if ( $since < 5 && file_exists("/var/db/iftop_{$real_interface}.log") ) { |
|
121 |
$listedIPs=file("/var/db/iftop_{$real_interface}.log"); |
|
122 |
} else { |
|
123 |
if ( isvalidpid("/var/run/iftop_{$real_interface}.pid") ) { |
|
124 |
killbypid("/var/run/iftop_{$real_interface}.pid"); |
|
125 |
} |
|
126 |
unlink("/var/run/iftop_{$real_interface}.pid"); |
|
127 |
$_grb = exec("/usr/local/bin/iftop_parser.sh {$real_interface} $current_ts", $listedIPs); |
|
128 |
} |
|
129 |
} else { |
|
130 |
// refresh iftop infos |
|
131 |
$_grb = exec("/usr/local/bin/iftop_parser.sh {$real_interface} $current_ts", $listedIPs); |
|
132 |
} |
|
133 |
|
|
134 |
// order and group by |
|
135 |
foreach ($listedIPs as $k => $line){ |
|
136 |
if ($line != "") { |
|
137 |
$arrLine = explode (";", $line); |
|
138 |
$ip = $arrLine[0]; |
|
139 |
$in = unformat_number($arrLine[1]); |
|
140 |
$out = unformat_number($arrLine[2]); |
|
141 |
if ( isset($arr_in[$ip]) ) { |
|
142 |
$arr_in[$ip] += $in; |
|
143 |
$arr_out[$ip] += $out; |
|
144 |
} else { |
|
145 |
$arr_in[$ip] = $in; |
|
146 |
$arr_out[$ip] = $out; |
|
147 |
} |
|
148 |
} |
|
149 |
} |
|
150 |
|
|
151 |
if ($sort == "out") { |
|
152 |
arsort($arr_out,SORT_NUMERIC); |
|
153 |
$arrIP = array_keys($arr_out); |
|
154 |
} else { |
|
155 |
arsort($arr_in,SORT_NUMERIC); |
|
156 |
$arrIP = array_keys($arr_in); |
|
157 |
} |
|
158 |
|
|
159 |
unset($listedIPs); |
|
160 |
$listedIPs[] = ""; |
|
161 |
$listedIPs[] = ""; |
|
162 |
foreach ($arrIP as $k => $ip) { |
|
163 |
$listedIPs[] = $ip.";".format_number($arr_in[$ip],2).";".format_number($arr_out[$ip],2); |
|
164 |
} |
|
165 | ||
166 |
} else { |
|
167 |
$_grb = exec("/usr/local/bin/rate -i {$real_interface} -nlq 1 -Aba 20 {$sort_method} {$ratesubnet} | tr \"|\" \" \" | awk '{ printf \"%s;%s;%s;%s;%s\\n\", $1, $2, $4, $6, $8 }'", $listedIPs); |
|
168 |
} |
|
169 | ||
113 | 170 | |
114 | 171 |
$someinfo = false; |
115 | 172 |
for ($x=2; $x<12; $x++) { |
... | ... | |
119 | 176 |
// echo $bandwidthinfo; |
120 | 177 |
$emptyinfocounter = 1; |
121 | 178 |
if ($bandwidthinfo != "") { |
122 |
$infoarray = explode (":", $bandwidthinfo);
|
|
179 |
$infoarray = explode (";", $bandwidthinfo);
|
|
123 | 180 |
if (($filter == "all") || |
124 | 181 |
(($filter == "local") && (ip_in_subnet($infoarray[0], $intsubnet))) || |
125 | 182 |
(($filter == "remote") && (!ip_in_subnet($infoarray[0], $intsubnet)))) { |
... | ... | |
159 | 216 |
if ($someinfo == false) { |
160 | 217 |
echo gettext("no info"); |
161 | 218 |
} |
162 |
?> |
|
219 |
?> |
src/usr/local/www/status_graph.php | ||
---|---|---|
77 | 77 |
$curbackgroundupdate = $_POST['backgroundupdate']; |
78 | 78 |
$curinvert = $_POST['invert']; |
79 | 79 |
$cursmoothing = $_POST['smoothfactor']; |
80 | ||
80 |
$curmode = $_POST['mode']; |
|
81 |
|
|
81 | 82 |
// Save data to config |
82 | 83 |
if (isset($_POST['save'])) { |
83 | 84 |
$pconfig = array(); |
... | ... | |
88 | 89 |
$pconfig["backgroundupdate"] = $curbackgroundupdate; |
89 | 90 |
$pconfig["smoothfactor"] = $cursmoothing; |
90 | 91 |
$pconfig["invert"] = $curinvert; |
92 |
$pconfig["mode"] = $curmode; |
|
91 | 93 |
$config["traffic_graphs"] = array(); |
92 | 94 |
$config["traffic_graphs"] = $pconfig; |
93 | 95 |
write_config("Traffic Graphs settings updated"); |
... | ... | |
102 | 104 |
$curbackgroundupdate = $pconfig['backgroundupdate']; |
103 | 105 |
$cursmoothing = $pconfig['smoothfactor']; |
104 | 106 |
$curinvert = $pconfig['invert']; |
107 |
$curmode = $pconfig['mode'];; |
|
105 | 108 |
} else { |
106 | 109 |
// initialize when no config details are present |
107 | 110 |
if (empty($ifdescrs["wan"])) { |
... | ... | |
117 | 120 |
$curbackgroundupdate = ""; |
118 | 121 |
$cursmoothing = 0; |
119 | 122 |
$curinvert = ""; |
123 |
$curmode = ""; |
|
120 | 124 |
} |
121 | 125 |
} |
122 | 126 | |
... | ... | |
183 | 187 |
) |
184 | 188 |
))->setHelp('Display'); |
185 | 189 | |
190 |
$group->add(new Form_Select( |
|
191 |
'mode', |
|
192 |
null, |
|
193 |
$curmode, |
|
194 |
array ( |
|
195 |
'rate' => gettext('rate (standard)'), |
|
196 |
'iftop' => gettext('iftop (experimental)') |
|
197 |
) |
|
198 |
))->setHelp('Mode'); |
|
199 |
|
|
186 | 200 |
$section->add($group); |
187 | 201 | |
188 | 202 |
$group2 = new Form_Group('Controls'); |