Changeset 6587
- Timestamp:
- 11/29/10 15:14:17 (2 years ago)
- Location:
- luci/trunk/modules/admin-full
- Files:
-
- 3 modified
-
htdocs/luci-static/resources/connections.svg (modified) (1 diff)
-
luasrc/view/admin_status/connections.htm (modified) (16 diffs)
-
src/luci-bwc.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
luci/trunk/modules/admin-full/htdocs/luci-static/resources/connections.svg
r6583 r6587 12 12 <text id="label_25" x="20" y="74%" style="fill:#999999; font-size:9pt"> </text> 13 13 14 <polyline id="tcp" points="" style="fill:green;fill-opacity:0.4;stroke:green;stroke-width:1" /> 14 15 <polyline id="udp" points="" style="fill:blue;fill-opacity:0.4;stroke:blue;stroke-width:1" /> 15 <polyline id=" tcp" points="" style="fill:green;fill-opacity:0.4;stroke:green;stroke-width:1" />16 <polyline id="other" points="" style="fill:red;fill-opacity:0.4;stroke:red;stroke-width:1" /> 16 17 </svg> -
luci/trunk/modules/admin-full/luasrc/view/admin_status/connections.htm
r6583 r6587 20 20 21 21 var G; 22 var TIME = 0; 23 var UDP = 1; 24 var TCP = 2; 22 var TIME = 0; 23 var UDP = 1; 24 var TCP = 2; 25 var OTHER = 3; 25 26 26 27 var width = 760; … … 34 35 var data_udp = [ ]; 35 36 var data_tcp = [ ]; 37 var data_otr = [ ]; 36 38 37 39 var line_udp; … … 42 44 var label_75; 43 45 44 var label_rx_cur; 45 var label_rx_avg; 46 var label_rx_peak; 47 48 var label_tx_cur; 49 var label_tx_avg; 50 var label_tx_peak; 46 var label_udp_cur; 47 var label_udp_avg; 48 var label_udp_peak; 49 50 var label_tcp_cur; 51 var label_tcp_avg; 52 var label_tcp_peak; 53 54 var label_otr_cur; 55 var label_otr_avg; 56 var label_otr_peak; 51 57 52 58 var label_scale; … … 63 69 var data_udp_avg = 0; 64 70 var data_tcp_avg = 0; 71 var data_otr_avg = 0; 65 72 66 73 var data_udp_peak = 0; 67 74 var data_tcp_peak = 0; 75 var data_otr_peak = 0; 68 76 69 77 for (var i = data_stamp ? 0 : 1; i < data.length; i++) … … 75 83 data_udp.push(data[i][UDP]); 76 84 data_tcp.push(data[i][TCP]); 85 data_otr.push(data[i][OTHER]); 77 86 } 78 87 … … 80 89 data_udp = data_udp.slice(data_udp.length - data_wanted, data_udp.length); 81 90 data_tcp = data_tcp.slice(data_tcp.length - data_wanted, data_tcp.length); 91 data_otr = data_otr.slice(data_otr.length - data_wanted, data_otr.length); 82 92 83 93 /* find peak */ … … 86 96 data_max = Math.max(data_max, data_udp[i]); 87 97 data_max = Math.max(data_max, data_tcp[i]); 98 data_max = Math.max(data_max, data_otr[i]); 88 99 89 100 data_udp_peak = Math.max(data_udp_peak, data_udp[i]); 90 101 data_tcp_peak = Math.max(data_tcp_peak, data_tcp[i]); 102 data_otr_peak = Math.max(data_otr_peak, data_otr[i]); 91 103 92 104 if (i > 0) … … 94 106 data_udp_avg = (data_udp_avg + data_udp[i]) / 2; 95 107 data_tcp_avg = (data_tcp_avg + data_tcp[i]) / 2; 108 data_otr_avg = (data_otr_avg + data_otr[i]) / 2; 96 109 } 97 110 else … … 99 112 data_udp_avg = data_udp[i]; 100 113 data_tcp_avg = data_tcp[i]; 114 data_otr_avg = data_otr[i]; 101 115 } 102 116 } … … 108 122 109 123 /* plot data */ 110 var pt_rx = '0,' + height; 111 var pt_tx = '0,' + height; 112 113 var y_rx = 0; 114 var y_tx = 0; 124 var pt_udp = '0,' + height; 125 var pt_tcp = '0,' + height; 126 var pt_otr = '0,' + height; 127 128 var y_udp = 0; 129 var y_tcp = 0; 130 var y_otr = 0; 115 131 116 132 for (var i = 0; i < data_udp.length; i++) … … 118 134 var x = i * step; 119 135 120 y_rx = height - Math.floor(data_udp[i] * data_scale); 121 y_tx = height - Math.floor(data_tcp[i] * data_scale); 122 123 pt_rx += ' ' + x + ',' + y_rx; 124 pt_tx += ' ' + x + ',' + y_tx; 125 } 126 127 pt_rx += ' ' + width + ',' + y_rx + ' ' + width + ',' + height; 128 pt_tx += ' ' + width + ',' + y_tx + ' ' + width + ',' + height; 129 130 131 line_udp.setAttribute('points', pt_rx); 132 line_tcp.setAttribute('points', pt_tx); 136 y_udp = height - Math.floor(data_udp[i] * data_scale); 137 y_tcp = height - Math.floor(data_tcp[i] * data_scale); 138 y_otr = height - Math.floor(data_otr[i] * data_scale); 139 140 pt_udp += ' ' + x + ',' + y_udp; 141 pt_tcp += ' ' + x + ',' + y_tcp; 142 pt_otr += ' ' + x + ',' + y_otr; 143 } 144 145 pt_udp += ' ' + width + ',' + y_udp + ' ' + width + ',' + height; 146 pt_tcp += ' ' + width + ',' + y_tcp + ' ' + width + ',' + height; 147 pt_otr += ' ' + width + ',' + y_otr + ' ' + width + ',' + height; 148 149 150 line_udp.setAttribute('points', pt_udp); 151 line_tcp.setAttribute('points', pt_tcp); 152 line_otr.setAttribute('points', pt_otr); 133 153 134 154 label_25.firstChild.data = Math.floor(1.1 * 0.25 * data_max); … … 136 156 label_75.firstChild.data = Math.floor(1.1 * 0.75 * data_max); 137 157 138 label_rx_cur.innerHTML = Math.floor(data_udp[data_udp.length-1]); 139 label_tx_cur.innerHTML = Math.floor(data_tcp[data_tcp.length-1]); 140 141 label_rx_avg.innerHTML = Math.floor(data_udp_avg); 142 label_tx_avg.innerHTML = Math.floor(data_tcp_avg); 143 144 label_rx_peak.innerHTML = Math.floor(data_udp_peak); 145 label_tx_peak.innerHTML = Math.floor(data_tcp_peak); 158 label_udp_cur.innerHTML = Math.floor(data_udp[data_udp.length-1]); 159 label_tcp_cur.innerHTML = Math.floor(data_tcp[data_tcp.length-1]); 160 label_otr_cur.innerHTML = Math.floor(data_otr[data_otr.length-1]); 161 162 label_udp_avg.innerHTML = Math.floor(data_udp_avg); 163 label_tcp_avg.innerHTML = Math.floor(data_tcp_avg); 164 label_otr_avg.innerHTML = Math.floor(data_otr_avg); 165 166 label_udp_peak.innerHTML = Math.floor(data_udp_peak); 167 label_tcp_peak.innerHTML = Math.floor(data_tcp_peak); 168 label_otr_peak.innerHTML = Math.floor(data_otr_peak); 146 169 147 170 /* reset timer */ … … 180 203 data_udp[i] = 0; 181 204 data_tcp[i] = 0; 205 data_otr[i] = 0; 182 206 } 183 207 … … 185 209 line_udp = G.getElementById('udp'); 186 210 line_tcp = G.getElementById('tcp'); 211 line_otr = G.getElementById('other'); 187 212 188 213 label_25 = G.getElementById('label_25'); … … 190 215 label_75 = G.getElementById('label_75'); 191 216 192 label_rx_cur = document.getElementById('lb_udp_cur'); 193 label_rx_avg = document.getElementById('lb_udp_avg'); 194 label_rx_peak = document.getElementById('lb_udp_peak'); 195 196 label_tx_cur = document.getElementById('lb_tcp_cur'); 197 label_tx_avg = document.getElementById('lb_tcp_avg'); 198 label_tx_peak = document.getElementById('lb_tcp_peak'); 217 label_udp_cur = document.getElementById('lb_udp_cur'); 218 label_udp_avg = document.getElementById('lb_udp_avg'); 219 label_udp_peak = document.getElementById('lb_udp_peak'); 220 221 label_tcp_cur = document.getElementById('lb_tcp_cur'); 222 label_tcp_avg = document.getElementById('lb_tcp_avg'); 223 label_tcp_peak = document.getElementById('lb_tcp_peak'); 224 225 label_otr_cur = document.getElementById('lb_otr_cur'); 226 label_otr_avg = document.getElementById('lb_otr_avg'); 227 label_otr_peak = document.getElementById('lb_otr_peak'); 199 228 200 229 label_scale = document.getElementById('scale'); … … 257 286 <td id="lb_tcp_peak">0</td> 258 287 </tr> 288 <tr> 289 <td style="text-align:right; vertical-align:top"><strong style="border-bottom:2px solid red"><%:Other:%></strong></td> 290 <td id="lb_otr_cur">0</td> 291 292 <td style="text-align:right; vertical-align:top"><strong><%:Average:%></strong></td> 293 <td id="lb_otr_avg">0</td> 294 295 <td style="text-align:right; vertical-align:top"><strong><%:Peak:%></strong></td> 296 <td id="lb_otr_peak">0</td> 297 </tr> 259 298 </table> 260 299 -
luci/trunk/modules/admin-full/src/luci-bwc.c
r6583 r6587 67 67 uint32_t udp; 68 68 uint32_t tcp; 69 uint32_t other; 69 70 }; 70 71 … … 221 222 } 222 223 223 static int update_cnstat(uint32_t udp, uint32_t tcp )224 static int update_cnstat(uint32_t udp, uint32_t tcp, uint32_t other) 224 225 { 225 226 char path[1024]; … … 241 242 } 242 243 243 e.time = htonll(time(NULL)); 244 e.udp = htonl(udp); 245 e.tcp = htonl(tcp); 244 e.time = htonll(time(NULL)); 245 e.udp = htonl(udp); 246 e.tcp = htonl(tcp); 247 e.other = htonl(other); 246 248 247 249 return update_file(path, &e, sizeof(struct conn_entry)); … … 280 282 FILE *info; 281 283 uint64_t rxb, txb, rxp, txp; 282 uint32_t udp, tcp ;284 uint32_t udp, tcp, other; 283 285 float lf1, lf5, lf15; 284 286 char line[1024]; 285 287 char ifname[16]; 286 288 289 struct stat s; 290 const char *ipc = stat("/proc/net/nf_conntrack", &s) 291 ? "/proc/net/ip_conntrack" : "/proc/net/nf_conntrack"; 287 292 288 293 if (!nofork) … … 332 337 } 333 338 334 if ((info = fopen("/proc/net/ip_conntrack", "r")) != NULL) 335 { 336 udp = 0; 337 tcp = 0; 339 if ((info = fopen(ipc, "r")) != NULL) 340 { 341 udp = 0; 342 tcp = 0; 343 other = 0; 338 344 339 345 while (fgets(line, sizeof(line), info)) 340 346 { 341 switch (line[0])347 if (sscanf(line, "%*s %*d %s", ifname) || sscanf(line, "%s %*d", ifname)) 342 348 { 343 case 't':349 if (!strcmp(ifname, "tcp")) 344 350 tcp++; 345 break; 346 347 case 'u': 351 else if (!strcmp(ifname, "udp")) 348 352 udp++; 349 break; 350 351 default: 352 break; 353 else 354 other++; 353 355 } 354 356 } 355 357 356 update_cnstat(udp, tcp );358 update_cnstat(udp, tcp, other); 357 359 358 360 fclose(info); … … 432 434 continue; 433 435 434 printf("[ %" PRIu64 ", %u, %u ]%s\n", 435 ntohll(e->time), ntohl(e->udp), ntohl(e->tcp), 436 printf("[ %" PRIu64 ", %u, %u, %u ]%s\n", 437 ntohll(e->time), ntohl(e->udp), 438 ntohl(e->tcp), ntohl(e->other), 436 439 ((i + sizeof(struct conn_entry)) < m.size) ? "," : ""); 437 440 }
