waysun一路陽(yáng)光

          不輕易服輸,不輕言放棄.--心是夢(mèng)的舞臺(tái),心有多大,舞臺(tái)有多大。踏踏實(shí)實(shí)做事,認(rèn)認(rèn)真真做人。

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            167 隨筆 :: 1 文章 :: 64 評(píng)論 :: 0 Trackbacks
          http://www.aygfsteel.com/awed/archive/2008/04/22/194794.html
          最近公司要求做一個(gè)WEB端的服務(wù)器實(shí)時(shí)流量利用率監(jiān)控曲線!
          具體做法是后臺(tái)采用SNMP4J采集服務(wù)器流量,前臺(tái)采用DWR調(diào)用后臺(tái)Bean得到數(shù)據(jù),然后利用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      * 創(chuàng)建snmp連接
           55      */
           56    
           57     public static Snmp createSnmp() {
           58         try {
           59             // 設(shè)定采取的協(xié)議
           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      * 連接目標(biāo)機(jī)器
           76      * url格式:udp:192.168.1.168/161 community:默認(rèn)是public   
           77      */
           78     public static CommunityTarget createTarget(String url, String community, int version) {
           79         // 設(shè)定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      * 獲取當(dāng)前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      * 獲取當(dāng)前OID的下一個(gè)節(jié)點(diǎn)的值
          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      * 得到一個(gè)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      * 獲得具體的值,在此為了測(cè)試,采用隨機(jī)數(shù)
          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();//取得當(dāng)前的值
          139         }
          140         //下面一行代碼為方便測(cè)試采用產(chǎn)生隨機(jī)數(shù),由于在頁(yè)面上是利用率,所以前面取得當(dāng)前值的時(shí)候要把它計(jì)算成當(dāng)前利用率
          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函數(shù)調(diào)用:
              在WEB-INF文件夾下創(chuàng)建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、頁(yè)面調(diào)用:
           1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
           2 <html xmlns:v="urn:schemas-microsoft-com:vml">
           3     <head>
           4         <title>動(dòng)態(tài)創(chuàng)建VML</title>
           5     </head>
           6     <STYLE>
           7  v\:* { BEHAVIOR: url(#default#VML) }
           8 </STYLE>
           9 <script language="JavaScript">
          10 var art = new Array(21);//定義數(shù)據(jù)存儲(chǔ)數(shù)組
          11 var str = '';    // 線的數(shù)據(jù)組合
          12 for(i=0;i<=20;i++){    //初始化一條直線,在坐標(biāo)的底部
          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);//把原來(lái)的線,刪除。
          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);//創(chuàng)建一條新的線。
          28 }
          29 //把新取到的參數(shù),放到數(shù)組的尾部,并位移最早的坐標(biāo)值。
          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         <!--  坐標(biāo)繪制  -->
          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一米陽(yáng)光 閱讀(545) 評(píng)論(0)  編輯  收藏 所屬分類: 總結(jié)備用
          主站蜘蛛池模板: 镇远县| 潜山县| 岢岚县| 泌阳县| 奇台县| 临桂县| 石渠县| 旺苍县| 南溪县| 定日县| 德令哈市| 疏勒县| 桂林市| 无棣县| 肇东市| 类乌齐县| 尉氏县| 台中县| 延津县| 皮山县| 宝清县| 新宁县| 平乡县| 海门市| 罗江县| 金阳县| 景宁| 镇赉县| 南宁市| 鄯善县| 孝昌县| 孟津县| 夏邑县| 内江市| 久治县| 浏阳市| 桂林市| 饶河县| 西城区| 叙永县| 南宫市|