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

网格计算

开发平台:

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.util.regex.Matcher;
  20. import java.util.regex.Pattern;
  21. /**********************************************************
  22.  * Objects of this class parse the output of system command-line
  23.  * utilities that can give information about the state of  
  24.  * various hardware components in the system. Typically, each such
  25.  * object either invokes a command and reads its output or reads the 
  26.  * output of one such command from a file on the disk. Currently 
  27.  * supported utilities include ifconfig, smartmontools, lm-sensors,
  28.  * /proc/cpuinfo.
  29.  *
  30.  **********************************************************/
  31. public abstract class ShellParser implements Monitored {
  32.   /**
  33.    * Find the first occurence ofa pattern in a piece of text 
  34.    * and return a specific group.
  35.    * 
  36.    *  @param strPattern the regular expression to match
  37.    *  @param text the text to search
  38.    *  @param grp the number of the matching group to return
  39.    *  
  40.    *  @return a String containing the matched group of the regular expression
  41.    */
  42.   protected String findPattern(String strPattern, String text, int grp) {
  43.     Pattern pattern = Pattern.compile(strPattern, Pattern.MULTILINE);
  44.     Matcher matcher = pattern.matcher(text);
  45.     if (matcher.find(0))
  46.       return matcher.group(grp);
  47.     return null;
  48.   }
  49.   /**
  50.    * Finds all occurences of a pattern in a piece of text and returns 
  51.    * the matching groups.
  52.    * 
  53.    *  @param strPattern the regular expression to match
  54.    *  @param text the text to search
  55.    *  @param grp the number of the matching group to return
  56.    *  @param separator the string that separates occurences in the returned value
  57.    *  
  58.    *  @return a String that contains all occurences of strPattern in text, 
  59.    *  separated by separator
  60.    */
  61.   protected String findAll(String strPattern, String text, int grp,
  62.       String separator) {
  63.     String retval = "";
  64.     boolean firstTime = true;
  65.     Pattern pattern = Pattern.compile(strPattern);
  66.     Matcher matcher = pattern.matcher(text);
  67.     while (matcher.find()) {
  68.       retval += (firstTime ? "" : separator) + matcher.group(grp);
  69.       firstTime = false;
  70.     }
  71.     return retval;
  72.   }
  73.   /**
  74.    * Insert all EventRecords that can be extracted for
  75.    * the represented hardware component into a LocalStore.
  76.    * 
  77.    * @param ls the LocalStore into which the EventRecords 
  78.    * are to be stored.
  79.    */
  80.   public void monitor(LocalStore ls) {
  81.     ls.insert(monitor());
  82.   }
  83.   abstract public EventRecord[] monitor();
  84.   abstract public EventRecord query(String s) throws Exception;
  85. }