| 1 | + | /* | 
 
 
 
 
 
 
 
 | 2 | + | * i-scream central monitoring system | 
 
 
 
 
 
 
 
 | 3 | + | * http://www.i-scream.org.uk | 
 
 
 
 
 
 
 
 | 4 | + | * Copyright (C) 2000-2002 i-scream | 
 
 
 
 
 
 
 
 | 5 | + | * | 
 
 
 
 
 
 
 
 | 6 | + | * This program is free software; you can redistribute it and/or | 
 
 
 
 
 
 
 
 | 7 | + | * modify it under the terms of the GNU General Public License | 
 
 
 
 
 
 
 
 | 8 | + | * as published by the Free Software Foundation; either version 2 | 
 
 
 
 
 
 
 
 | 9 | + | * of the License, or (at your option) any later version. | 
 
 
 
 
 
 
 
 | 10 | + | * | 
 
 
 
 
 
 
 
 | 11 | + | * This program is distributed in the hope that it will be useful, | 
 
 
 
 
 
 
 
 | 12 | + | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 
 
 
 
 
 
 
 | 13 | + | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
 
 
 
 
 
 
 
 | 14 | + | * GNU General Public License for more details. | 
 
 
 
 
 
 
 
 | 15 | + | * | 
 
 
 
 
 
 
 
 | 16 | + | * You should have received a copy of the GNU General Public License | 
 
 
 
 
 
 
 
 | 17 | + | * along with this program; if not, write to the Free Software | 
 
 
 
 
 
 
 
 | 18 | + | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. | 
 
 
 
 
 
 
 
 | 19 | + | */ | 
 
 
 
 
 
 
 
 | 20 | + |  | 
 
 
 
 
 
 
 
 | 21 | + | //---PACKAGE DECLARATION--- | 
 
 
 
 
 
 
 
 | 22 | + |  | 
 
 
 
 
 
 
 
 | 23 | + | //---IMPORTS--- | 
 
 
 
 
 
 
 
 | 24 | + |  | 
 
 
 
 
 
 
 
 | 25 | + | import java.io.*; | 
 
 
 
 
 
 
 
 | 26 | + | import java.net.*; | 
 
 
 
 
 
 
 
 | 27 | + | import java.util.*; | 
 
 
 
 
 
 
 
 | 28 | + |  | 
 
 
 
 
 
 
 
 | 29 | + | /** | 
 
 
 
 
 
 
 
 | 30 | + | * Gathers system information then outputs it as XML | 
 
 
 
 
 
 
 
 | 31 | + | * Collects data based on properties gained from the | 
 
 
 
 
 
 
 
 | 32 | + | * configurator then packages these up using XMLFormatter | 
 
 
 
 
 
 
 
 | 33 | + | * and outputs them if the timeout has passed. | 
 
 
 
 
 
 
 
 | 34 | + | * | 
 
 
 
 
 
 
 
 | 35 | + | * @author  $Author$ | 
 
 
 
 
 
 
 
 | 36 | + | * @version $Id$ | 
 
 
 
 
 
 
 
 | 37 | + | */ | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 38 |  | class SystemMonitor { | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 39 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 40 | < | public SystemMonitor( Config config ){ | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 4 | < | // create a new instace, get the info we need out of config | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 5 | < | // like things to monitor | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 6 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 7 | < | lastCheck = System.currentTimeMillis(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 8 | < | sequence = 0; | 
 
 
 
 
 
 
 
 
 | 40 | > | //---FINAL ATTRIBUTES--- | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 41 |  |  | 
 
 
 
 
 
 
 
 | 42 | + | //---STATIC METHODS--- | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 43 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 44 | < | // why oh why wont ultra edit let me put Long in the next line? oh its trying to | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 12 | < | // correct keywords =| | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 13 | < | checkInterval = Long.parseLong(config.getProperty("UDPINTEVAL")); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 14 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 15 | < | } | 
 
 
 
 
 
 
 
 
 | 44 | > | //---CONSTRUCTORS--- | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 45 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 46 | < | public String getInfo(){ | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 47 | < | // called to retrieve the stored averages and output them as a XML string | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 48 | < | XMLFormatter xml = new XMLFormatter("packet"); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 49 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 50 | < | // just send some dummy info for now. | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 51 | < | xml.addNest("packet_info"); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 52 | < | String currentTime = Long.toString(System.currentTimeMillis()); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 53 | < | xml.addElement("date_time", currentTime ); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 54 | < | xml.addElement("sequence", Integer.toString(sequence)); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 55 | < | xml.closeNest(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 56 | < | xml.addNest("core"); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 57 | < | xml.addElement("cpu","100"); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 58 | < | xml.addElement("memory","200"); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 30 | < | xml.closeNest(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 31 | < | xml.addNest("additional"); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 32 | < | xml.addElement("users","20"); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 33 | < | xml.closeNest(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 34 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 35 | < | // MUST FIX THIS..!!!! | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 36 | < | while ( System.currentTimeMillis() < ( lastCheck + checkInterval ) ){ | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 37 | < | // errm do nothing.. block or something. | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 38 | < | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 39 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 40 | < | // increment sequence. | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 41 | < | sequence++; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 42 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 43 | < | // finally return a string | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 44 | < | return xml.returnXML(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 45 | < | } // getinfo() | 
 
 
 
 
 
 
 
 
 | 46 | > | /** | 
 
 
 
 
 | 47 | > | * Public constructor for the class. Takes in a Config | 
 
 
 
 
 | 48 | > | * object to gain its properties from. | 
 
 
 
 
 | 49 | > | * | 
 
 
 
 
 | 50 | > | */ | 
 
 
 
 
 | 51 | > | public SystemMonitor( Config config ){ | 
 
 
 
 
 | 52 | > | // create a new instace, get the info we need out of config | 
 
 
 
 
 | 53 | > | // like things to monitor | 
 
 
 
 
 | 54 | > |  | 
 
 
 
 
 | 55 | > | lastCheck = System.currentTimeMillis(); | 
 
 
 
 
 | 56 | > | sequence = 1; | 
 
 
 
 
 | 57 | > |  | 
 
 
 
 
 | 58 | > | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 59 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 60 | < | // last time the system data was returned. | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 60 | > | //---PUBLIC METHODS--- | 
 
 
 
 
 | 61 | > |  | 
 
 
 
 
 | 62 | > | /** | 
 
 
 
 
 | 63 | > | * Gathers system information and will black until the timeout has passed. | 
 
 
 
 
 | 64 | > | * | 
 
 
 
 
 | 65 | > | * @return the system information in an XML packet | 
 
 
 
 
 | 66 | > | */ | 
 
 
 
 
 | 67 | > | public String getInfo(){ | 
 
 
 
 
 | 68 | > | // called to retrieve the stored averages and output them as a XML string | 
 
 
 
 
 | 69 | > | String host = new String(); | 
 
 
 
 
 | 70 | > | String ip = new String(); | 
 
 
 
 
 | 71 | > | try { | 
 
 
 
 
 | 72 | > | host = InetAddress.getLocalHost().getHostName(); | 
 
 
 
 
 | 73 | > | ip = InetAddress.getLocalHost().getHostAddress(); | 
 
 
 
 
 | 74 | > | } catch(UnknownHostException e) { | 
 
 
 
 
 | 75 | > | System.out.println(e); | 
 
 
 
 
 | 76 | > | } | 
 
 
 
 
 | 77 | > | String date = Long.toString(System.currentTimeMillis()); | 
 
 
 
 
 | 78 | > | XMLFormatter xml = new XMLFormatter("packet", "machine_name=\""+host+"\" ip=\""+ip+"\" date=\""+date+"\" seq_no=\""+sequence+"\" type=\"data\""); | 
 
 
 
 
 | 79 | > |  | 
 
 
 
 
 | 80 | > | // get and decode the data | 
 
 
 
 
 | 81 | > | DecodeCPU_TXT details = new DecodeCPU_TXT(); | 
 
 
 
 
 | 82 | > |  | 
 
 
 
 
 | 83 | > | // add the decoded info | 
 
 
 
 
 | 84 | > | xml.addString(details.getItems()); | 
 
 
 
 
 | 85 | > |  | 
 
 
 
 
 | 86 | > | // increment sequence. | 
 
 
 
 
 | 87 | > | sequence++; | 
 
 
 
 
 | 88 | > | // lastCheck = System.currentTimeMillis(); | 
 
 
 
 
 | 89 | > |  | 
 
 
 
 
 | 90 | > | // finally return a string | 
 
 
 
 
 | 91 | > | return xml.returnXML(); | 
 
 
 
 
 | 92 | > | } // getinfo() | 
 
 
 
 
 | 93 | > |  | 
 
 
 
 
 | 94 | > | //---PRIVATE METHODS--- | 
 
 
 
 
 | 95 | > |  | 
 
 
 
 
 | 96 | > | //---ACCESSOR/MUTATOR METHODS--- | 
 
 
 
 
 | 97 | > |  | 
 
 
 
 
 | 98 | > | //---ATTRIBUTES--- | 
 
 
 
 
 | 99 | > |  | 
 
 
 
 
 
 
 
 
 
 
 | 100 |  | private long lastCheck; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 101 |  | private int sequence; | 
 
 
 
 
 
 
 
 
 
 
 | 102 | < | private long checkInterval; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 102 | > |  | 
 
 
 
 
 | 103 | > | //---STATIC ATTRIBUTES--- | 
 
 
 
 
 
 
 
 
 
 
 | 104 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 105 | < | } // class | 
 
 
 
 
 
 
 
 
 | 105 | > | } // class |