路由器的流量图制作

本文介绍了如何使用SVG在路由器上绘制流量图,包括三种嵌入SVG的方法:直接嵌入HTML、通过embed或frame引用以及动态创建。代码示例展示了如何创建和更新SVG元素以实时显示流量数据,如25%、50%和75%的水平线以及数据点的折线。此外,还涉及了数据获取和处理,以实现每秒刷新的实时流量监控图表。
摘要由CSDN通过智能技术生成

1.绘制svg 矢量图 bandwidth.svg


注释:绘制流量图的方法有三种,

1) :直接将 svg  嵌入的html 页面中

2 ):通过使用embed/frame 等引用到页面中去;

<div class="cbi-table">
<embed id="bwsvg" src="/JS/bandwidth.svg" style="width:100%; height:300px; border:1px solid #000000; background-color:#FFFFFF" type="image/svg+xml"   pluginspage="http://www.adobe.com/svg/viewer/install/"/>
<div style="text-align:right"><small id="scale">2 分钟绘图,1 秒刷新</small></div>
<br />
</div>

3):在html 页面中动态的创建

<div class="cbi-table">
<embed id="bwsvg" style="width:100%; height:320px; border:1px solid #000000; background-color:#FFFFFF" type="image/svg+xml"  pluginspage="http://www.adobe.com/svg/viewer/install/" src="/JS/bandwidth.svg" />
<div style="text-align:right"><small id="scale">2 分钟绘图,1 秒刷新</small></div>
<br />

</div>

function LoadFrame()
{
<% if tcwebApi_get("WebCustom_Entry","isSVGSupported","h")  = "Yes" then %>
var svg = document.getElementById('bwsvg');
var line_25=document.createElementNS("http://www.w3.org/2000/svg","line");
 //水平线25%
if(line_25)
    {
    line_25.setAttribute('x1',0);
    line_25.setAttribute('y1',"25%");
    line_25.setAttribute('x2',"100%");
    line_25.setAttribute('y2',"25%");
    line_25.setAttribute("style","stroke:black;stroke-width:0.1");
    svg.appendChild(line_25);
    }
text_25=document.createElementNS("http://www.w3.org/2000/svg","text");
if(text_25)
{
text_25.setAttribute('x',15);
    text_25.setAttribute('y',"75%");
text_25.setAttribute("id","label_25");
text_25.setAttribute("style","fill:black; font-size:9pt");
svg.appendChild(text_25);

}
    //水平线50%
var line_50=document.createElementNS("http://www.w3.org/2000/svg","line");


if(line_50)
    {
    line_50.setAttribute('x1',0);
    line_50.setAttribute('y1',"50%");
    line_50.setAttribute('x2',"100%");
    line_50.setAttribute('y2',"50%");
    line_50.setAttribute("style","stroke:black;stroke-width:0.1");
    svg.appendChild(line_50);
    }
text_50=document.createElementNS("http://www.w3.org/2000/svg","text");
if(text_50)
{
text_50.setAttribute('x',15);
    text_50.setAttribute('y',"50%");
text_50.setAttribute("id","label_50");
text_50.setAttribute("style","fill:black; font-size:9pt");
svg.appendChild(text_50);

}
   //水平线75%
var line_75=document.createElementNS("http://www.w3.org/2000/svg","line");


if(line_75)
    {
    line_75.setAttribute('x1',0);
    line_75.setAttribute('y1',"75%");
    line_75.setAttribute('x2',"100%");
    line_75.setAttribute('y2',"75%");
    line_75.setAttribute("style","stroke:black;stroke-width:0.1");
    svg.appendChild(line_75);
    }


text_75=document.createElementNS("http://www.w3.org/2000/svg","text");
if(text_75)
{
text_75.setAttribute('x',15);
    text_75.setAttribute('y',"25%");
text_75.setAttribute("id","label_75");
text_75.setAttribute("style","fill:black; font-size:9pt");
svg.appendChild(text_75);

}
text_v=document.createElementNS("http://www.w3.org/2000/svg","text");
if(text_v)
{
// text_v.setAttribute("x",50);
// text_v.setAttribute("y","74%");
text_v.setAttribute("id","label_v");
text_v.setAttribute("style","fill:#FF0000; font-size:9pt");
svg.appendChild(text_v);

}

//折线
line_rx=document.createElementNS("http://www.w3.org/2000/svg","polyline");
if(line_rx)
{
line_rx.setAttribute("point","");
line_rx.setAttribute("id","rx");
line_rx.setAttribute("style","fill:red;fill-opacity:0.4;stroke:red;stroke-width:1");
svg.appendChild(line_rx);
}
line_tx=document.createElementNS("http://www.w3.org/2000/svg","polyline");
if(line_tx)
{
line_tx.setAttribute("point","");
line_tx.setAttribute("id","tx");
line_tx.setAttribute("style","fill:blue;fill-opacity:0.4;stroke:blue;stroke-width:1");
svg.appendChild(line_tx);
}
for (var i = step * 60; i < width; i += step * 60)
                {


var line = document.createElementNS('http://www.w3.org/2000/svg', 'line');


line.setAttribute('x1', i-5);
line.setAttribute('y1', 0);
line.setAttribute('x2', i-5);
line.setAttribute('y2', '100%');
line.setAttribute('style', 'stroke:black;stroke-width:0.1');


var text = document.createElementNS('http://www.w3.org/2000/svg', 'text');
text.setAttribute('x', i + 5);
text.setAttribute('y', 15);
text.setAttribute('style', 'fill:#999999; font-size:9pt');
text.appendChild(document.createTextNode(Math.round(i / step / 60) + 'min'));


text_v.parentNode.appendChild(line);
text_v.parentNode.appendChild(text);


                }
label_rx_cur  = document.getElementById('rx_bw_cur');
label_rx_avg  = document.getElementById('rx_bw_avg');
label_rx_peak = document.getElementById('rx_bw_peak');


label_tx_cur  = document.getElementById('tx_bw_cur');
label_tx_avg  = document.getElementById('tx_bw_avg');
label_tx_peak = document.getElementById('tx_bw_peak');
             window.setTimeout(update_graph, 1000);
<% end if %>

}

function update_graph()
    {
console.log("...data_max="+data_max);
data_max=0;
    bwxhr.get('/cgi-bin/traffic.cgi', null,
    function(x, data)
    {
   
    var data_scale = 0;


    var data_rx_avg = 0;
    var data_tx_avg = 0;


    var data_rx_peak = 0;
    var data_tx_peak = 0;
    for (var i = data_stamp ? 0 : 1; i < data.length; i++)
    {


    if (data[i][TIME] <= data_stamp)
    continue;




    //。两个时间数据之间的差值
    var time_delta = data[i][TIME] - data[i-1][TIME];
    if (time_delta)
    {
    data_rx.push((data[i][RXB] - data[i-1][RXB]) / time_delta);
    data_tx.push((data[i][TXB] - data[i-1][TXB]) / time_delta);
    }
    }




    //从数组中截取data_rx.length 0~data_rx.length - data_wanted
    data_rx = data_rx.slice(data_rx.length - data_wanted, data_rx.length);
    data_tx = data_tx.slice(data_tx.length - data_wanted, data_tx.length);








    //寻找这组数据的最大值
    for (var i = 0; i < data_rx.length; i++)
    {

    data_max = Math.max(data_max, data_rx[i]);
    // data_max = Math.max(data_max, data_tx[i]);

    data_rx_peak = Math.max(data_rx_peak, data_rx[i]);
    data_tx_peak = Math.max(data_tx_peak, data_tx[i]);


   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值