EventRecord.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:5k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.contrib.failmon;
  19. import java.net.InetAddress;
  20. import java.util.ArrayList;
  21. import java.util.Calendar;
  22. import java.util.Collections;
  23. import java.util.HashMap;
  24. /**********************************************************
  25.  * Objects of this class represent metrics collected for 
  26.  * a specific hardware source. Each EventRecord contains a HashMap of 
  27.  * (key, value) pairs, each of which represents a property of
  28.  * the metered value. For instance, when parsing a log file, an
  29.  * EventRecord is created for each log entry, which contains 
  30.  * the hostname and the ip addresses of the node, timestamp of
  31.  * the log entry, the actual message etc. Each and every EventRecord
  32.  * contains the hostname of the machine on which it was collected,
  33.  * its IP address and the time of collection.
  34.  * 
  35.  * The main purpose of this class is to provide a uniform format
  36.  * for records collected from various system compontents (logs,
  37.  * ifconfig, smartmontools, lm-sensors etc). All metric values are 
  38.  * converted into this format after they are collected by a
  39.  * Monitored object.
  40.  *
  41.  **********************************************************/
  42. public class EventRecord {
  43.   HashMap<String, Object> fields;
  44.   /**
  45.    * Create the EventRecord given the most common properties
  46.    * among different metric types.
  47.    */
  48.   public EventRecord(String _hostname, Object [] _ips, Calendar _timestamp,
  49.       String _type, String _logLevel, String _source, String _message) {
  50.     fields = new HashMap<String, Object>();
  51.     fields.clear();
  52.     set("hostname", _hostname);
  53.     set("ips", _ips);
  54.     set("timestamp", _timestamp);
  55.     set("type", _type);
  56.     set("logLevel", _logLevel);
  57.     set("source", _source);
  58.     set("message", _message);
  59.   }
  60.   /**
  61.    * Create the EventRecord with no fields other than "invalid" as
  62.    * the hostname. This is only used as a dummy.
  63.    */
  64.   public EventRecord() {
  65.     // creates an invalid record
  66.     fields = new HashMap<String, Object>();
  67.     fields.clear();
  68.     set("hostname", "invalid");
  69.   }
  70.   /**
  71.    * Return the HashMap of properties of the EventRecord.
  72.    * 
  73.    * @return a HashMap that contains all properties of the record.
  74.    */
  75.   public final HashMap<String, Object> getMap() {
  76.     return fields;
  77.   }
  78.   /**
  79.    * Set the value of a property of the EventRecord.
  80.    * 
  81.    * @param fieldName the name of the property to set
  82.    * @param fieldValue the value of the property to set
  83.    * 
  84.    */
  85.   public void set(String fieldName, Object fieldValue) {
  86.     if (fieldValue != null)
  87.       fields.put(fieldName, fieldValue);
  88.   }
  89.   /**
  90.    * Get the value of a property of the EventRecord.
  91.    * If the property with the specific key is not found,
  92.    * null is returned.
  93.    * 
  94.    * @param fieldName the name of the property to get.
  95.    */
  96.   public Object get(String fieldName) {
  97.     return fields.get(fieldName);
  98.   }
  99.   /**
  100.    * Check if the EventRecord is a valid one, i.e., whether
  101.    * it represents meaningful metric values.
  102.    * 
  103.    * @return true if the EventRecord is a valid one, false otherwise.
  104.    */
  105.   public boolean isValid() {
  106.     return !("invalid".equalsIgnoreCase((String) fields.get("hostname")));
  107.   }
  108.   /**
  109.    * Creates and returns a string representation of the object.
  110.    * 
  111.    * @return a String representation of the object
  112.    */
  113.   public String toString() {
  114.     String retval = "";
  115.     ArrayList<String> keys = new ArrayList<String>(fields.keySet());
  116.     Collections.sort(keys);
  117.     for (int i = 0; i < keys.size(); i++) {
  118.       Object value = fields.get(keys.get(i));
  119.       if (value == null)
  120.         retval += keys.get(i) + ":tnulln";
  121.       else if (value instanceof String)
  122.         retval += keys.get(i) + ":t" + value + "n";
  123.       else if (value instanceof Calendar)
  124.         retval += keys.get(i) + ":t" + ((Calendar) value).getTime() + "n";
  125.       else if (value instanceof InetAddress[] || value instanceof String []) {
  126.         retval += "Known IPs:t";
  127.         for (InetAddress ip : ((InetAddress[]) value))
  128.           retval += ip.getHostAddress() + " ";
  129.         retval += "n";
  130.       } else {
  131.         retval += keys.get(i) + ":t" + value.toString() + "n";
  132.       }
  133.     }
  134.     return retval;
  135.   }
  136. }