<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    waysun一路陽光

    不輕易服輸,不輕言放棄.--心是夢的舞臺,心有多大,舞臺有多大。踏踏實實做事,認認真真做人。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      167 隨筆 :: 1 文章 :: 64 評論 :: 0 Trackbacks
    http://www.tkk7.com/awed/archive/2008/04/22/194794.html
    最近公司要求做一個WEB端的服務器實時流量利用率監控曲線!
    具體做法是后臺采用SNMP4J采集服務器流量,前臺采用DWR調用后臺Bean得到數據,然后利用VML顯示曲線。

    1、DWR配置,先把DWR.jar加入到WEB-INF/lib下。
        在web.xml下加入如下片段:
    <servlet>
            
    <servlet-name>dwr-invoker</servlet-name>
            
    <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
            
    <init-param>
                
    <param-name>debug</param-name>
                
    <param-value>true</param-value>
            
    </init-param>
        
    </servlet>
        
    <servlet-mapping>
            
    <servlet-name>dwr-invoker</servlet-name>
            
    <url-pattern>/dwr/*</url-pattern>
        
    </servlet-mapping>

    2、加入SNMP4J.JAR包,將SNMP4J.JAR加入到WEB-INF/lib下,寫好流量采集代碼,如下:
      1 package com.wingo.util;
      2 
      3 
      4 import org.snmp4j.CommunityTarget;
      5 import org.snmp4j.PDU;
      6 import org.snmp4j.Snmp;
      7 import org.snmp4j.TransportMapping;
      8 import org.snmp4j.event.ResponseEvent;
      9 import org.snmp4j.smi.Address;
     10 import org.snmp4j.smi.GenericAddress;
     11 import org.snmp4j.smi.OID;
     12 import org.snmp4j.smi.OctetString;
     13 import org.snmp4j.smi.VariableBinding;
     14 import org.snmp4j.transport.DefaultUdpTransportMapping;
     15 
     16 /**
     17  * snmp代理工具類
     18 
     19  * 
     20  * <pre>
     21  * ***************************************************************
     22  * Copyright.  Wingo 2006 ALL RIGHTS RESERVED.
     23  *
     24  * This software is only to be used for the purpose for which it
     25  * has been provided.  No part of it is to be reproduced,
     26  * disassembled, transmitted, stored in a retrieval system or
     27  * translated in any human or computer language in any way or
     28  * for any other purposes whatsoever without the prior written
     29  * consent of Wingo.
     30  * ***************************************************************
     31  *
     32  * Class Name: SnmpUtil.java
     33  * Creation Date: 2007-8-6
     34  * Description: 
     35  * 
     36  * Amendment Date   CMM/PPCRNo.    Programmer      Description
     37  * 2007-8-6                        Administartor         create
     38  * </pre>
     39  * 
     40  * @author Administartor
     41  * @version 1.0
     42  */
     43 public class SnmpUtil {
     44 
     45     public static final int version1 = 0;
     46 
     47     public static final int version2c = 1;
     48 
     49     public static final int version3 = 3;
     50 
     51     private static TransportMapping transport = null;
     52     private static Snmp protocol = null;
     53     /**
     54      * 創建snmp連接
     55      */
     56    
     57     public static Snmp createSnmp() {
     58         try {
     59             // 設定采取的協議
     60             TransportMapping transport = new DefaultUdpTransportMapping();
     61             if (false && transport == null || protocol == null) {
     62                 transport = new DefaultUdpTransportMapping();
     63                 protocol = new Snmp(transport);
     64                 transport.listen();
     65             }
     66             return protocol;
     67         }
     68         catch (Exception ex) {
     69             ex.printStackTrace();
     70         }
     71         return null;
     72     }
     73     
     74     /**
     75      * 連接目標機器
     76      * url格式:udp:192.168.1.168/161 community:默認是public   
     77      */
     78     public static CommunityTarget createTarget(String url, String community, int version) {
     79         // 設定CommunityTarget
     80         CommunityTarget myTarget = new CommunityTarget();
     81         Address deviceAdd = GenericAddress.parse(url);
     82         myTarget.setAddress(deviceAdd);
     83         myTarget.setCommunity(new OctetString(community));
     84         myTarget.setRetries(2);
     85         myTarget.setTimeout(5 * 60);
     86         myTarget.setVersion(version);// org.snmp4j.mp.*;
     87         return myTarget;
     88     }
     89 
     90     /**
     91      * 獲取當前OID的值,如果不存在返回null
     92      * url 格式為udp:192.168.1.168/161
     93      */
     94     public static PDU get(String url, String community, int version, String oid) {
     95         return get(url,community,version2c, oid, PDU.GET);
     96     }
     97 
     98     /**
     99      * 獲取當前OID的下一個節點的值
    100      * 格式為udp:192.168.1.168/161
    101      */
    102     public static PDU getNext(String url, String community, int version, String oid) {
    103         return get(url,community,version2c, oid, PDU.GETNEXT);
    104     }
    105     
    106     /**
    107      * 得到一個PDU類
    108      */
    109     private static PDU get(String url, String community, int version, String oid,int type) {
    110         try {
    111             Snmp protocol = createSnmp();
    112             CommunityTarget target = createTarget(url, community, version);
    113             VariableBinding var = new VariableBinding(new OID(oid));
    114             
    115             PDU request = new PDU();
    116             request.add(var);
    117             request.setType(type); //PDU.GETNEXT
    118             ResponseEvent responseEvent = protocol.send(request, target);
    119 
    120             return responseEvent.getResponse(); 
    121         } catch (Exception ex) {
    122             ex.printStackTrace();
    123         }
    124         return null;
    125     }
    126     
    127     /**
    128      * 獲得具體的值,在此為了測試,采用隨機數
    129      * @return
    130      */
    131     public double getValue(){
    132         double value = 0 ;
    133         String url = "udp:192.168.1.38/161"
    134         String community = "public";
    135         int version = SnmpUtil.version2c;
    136         PDU response = SnmpUtil.get(url, community, version, "1.3.6.1.2.1.2.2.1.10",PDU.GETNEXT); 
    137         for (int i = 0; response != null && i < response.size(); i++) {
    138             value = response.get(0).getVariable().toLong();//取得當前的值
    139         }
    140         //下面一行代碼為方便測試采用產生隨機數,由于在頁面上是利用率,所以前面取得當前值的時候要把它計算成當前利用率
    141         value = Math.random()*100 ;
    142         return  value;
    143     }
    144 
    145     public static void main(String[] str) {
    146         String url = "udp:192.168.1.38/161"
    147         String community = "public";
    148         int version = SnmpUtil.version2c;
    149         
    150         try {
    151             PDU response = SnmpUtil.get(url, community, version, "1.3.6.1.2.1.2.2.1.10",PDU.GETNEXT); 
    152             for (int i = 0; response != null && i < response.size(); i++) {
    153                 System.out.println("***** " + response.get(0).getVariable());
    154             }
    155         } catch (Exception ex) {
    156             ex.printStackTrace();
    157         }
    158         
    159     }
    160 
    161 }
    162 

    3、配置DWR函數調用:
        在WEB-INF文件夾下創建dwr.xml文件,具體代碼如下:
    <?xml version="1.0" encoding="gbk"?>
    <!DOCTYPE dwr PUBLIC 
        "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" 
        "http://www.getahead.ltd.uk/dwr/dwr10.dtd"
    >

    <dwr>
        
    <allow>
            
    <create creator="new" javascript="SnmpUtil">
                
    <param name="class" value="com.wingo.util.SnmpUtil" />
            
    </create>
        
    </allow>
    </dwr>

    4、頁面調用:
     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
     2 <html xmlns:v="urn:schemas-microsoft-com:vml">
     3     <head>
     4         <title>動態創建VML</title>
     5     </head>
     6     <STYLE>
     7  v\:* { BEHAVIOR: url(#default#VML) }
     8 </STYLE>
     9 <script language="JavaScript">
    10 var art = new Array(21);//定義數據存儲數組
    11 var str = '';    // 線的數據組合
    12 for(i=0;i<=20;i++){    //初始化一條直線,在坐標的底部
    13     art[i] = i * 10 + ",200 ";
    14     str = str + art[i];
    15 }
    16 
    17 //繪制一條性能曲線。
    18 function createLine(str){
    19     if(document.getElementById("temp")){
    20         var temp = document.getElementById("temp");
    21         temp.removeNode(true);//把原來的線,刪除。
    22     }
    23 
    24     var strElement='<v:PolyLine id="temp" filled="false" Points="'+ str +'" style="position:relative"/>';
    25 
    26     var newPoint = document.createElement(strElement);
    27     group1.insertBefore(newPoint);//創建一條新的線。
    28 }
    29 //把新取到的參數,放到數組的尾部,并位移最早的坐標值。
    30 function newLine(tem){    
    31     str = '';
    32     for(i=1;i<=20;i++){
    33     var t1 = art[i].split(',');
    34     t1[0]= t1[0- 10;
    35     art[i-1= t1[0+ ',' + t1[1];
    36     str = str + art[i-1];
    37 }
    38     art[20= "200," + tem + ' ';
    39     str = str + art[20];
    40 }
    41 </script>
    42 <script type='text/javascript' src='dwr/interface/SnmpUtil.js'></script>  
    43 <script type='text/javascript' src='dwr/engine.js'></script>  
    44 <script type='text/javascript' src='dwr/util.js'></script>
    45 
    46     <body>
    47         <br>
    48         <br>
    49         <!--  坐標繪制  -->
    50         <v:group ID="group1" style="WIDTH:500px;HEIGHT:200px"
    51             coordsize="200,200">
    52             <%for(int i=0;i<=20;i++){ %>
    53                 <v:PolyLine filled="false" Points="<%=i*10%>,0 <%=i*10%>,200" style="position:relative" StrokeColor="red" />
    54             <%%>
    55             <%for(int i=0;i<=20;i++){ %>
    56                 <v:PolyLine filled="false" Points="0,<%=i*10%>,200,<%=i*10%>" style="position:relative" StrokeColor="red" />
    57             <%%>
    58         </v:group>
    59         <script>
    60 
    61 function ccc(msg){
    62     //alert(msg);
    63     newLine(msg);
    64     createLine(str);
    65 }
    66 </script>
    67 <script type="text/javascript">
    68 
    69 function getNum(){
    70     SnmpUtil.getValue(callback);
    71 }
    72 
    73 function callback(msg) {
    74     ccc(msg);
    75 }
    76 
    77 function clock(){
    78         setInterval("getNum()",1000);
    79 }
    80 clock();
    81 </script>
    82     </body>
    83 </html>
    84 
    85 
    86 
    posted on 2009-03-13 13:26 weesun一米陽光 閱讀(542) 評論(0)  編輯  收藏 所屬分類: 總結備用
    主站蜘蛛池模板: 亚洲熟女www一区二区三区| 国产亚洲欧洲精品| 妞干网免费观看视频| 一个人免费观看www视频在线| av免费不卡国产观看| 日本免费一区二区在线观看| 1000部免费啪啪十八未年禁止观看| 一级毛片aaaaaa免费看| 亚洲视频在线观看免费| 57pao一国产成永久免费| 在线看片韩国免费人成视频| 国产精品永久免费10000| 无码人妻久久一区二区三区免费丨| 青青久在线视频免费观看| 韩国18福利视频免费观看| 国产一级一片免费播放| 亚洲免费一区二区| 亚洲精品午夜无码专区| 亚洲视频在线播放| 亚洲av片不卡无码久久| 亚洲精品无码少妇30P| 国产亚洲精品第一综合| 国产精品免费视频观看拍拍| 久久久久久影院久久久久免费精品国产小说 | 国产成人精品免费视频动漫| 一级女人18毛片免费| 精品国产免费观看| 亚洲v国产v天堂a无码久久| 亚洲伊人久久精品影院| 在线电影你懂的亚洲| 午夜在线a亚洲v天堂网2019| 日韩成人精品日本亚洲| 国产精品小视频免费无限app| 曰批全过程免费视频在线观看无码| 亚洲一级毛片免费在线观看| 成年女人免费v片| 亚洲最大av无码网址| 久久精品国产亚洲AV麻豆网站| 四虎必出精品亚洲高清| 美女尿口扒开图片免费| 国产精品视频白浆免费视频|