LogCollThread.java 3.26 KB
package com.sitech.ismp.coll.busi;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.HashMap;

import org.apache.log4j.Logger;

import com.sitech.ismp.coll.CollBase;
import com.sitech.util.Formater;
import com.sitech.util.SysHelper;


/**
 * ClassName:LogCollThread
 * Description: 日志采集
 *
 * @author   Linxc
 * @version  
 * @since    Ver 1.1
 * @Date	 2012	Feb 23, 2012		10:33:39 AM
 */
public class LogCollThread extends Thread{
	private static Logger logger = Logger.getLogger("BUSI_COLL");
	/** 日志扫描间隔 */
	private static final long SCAN_INTERVAL = 2 * 1000L;
	/** 日志文件所在主机IP地址 */
	private String ipAddr;	
	/** 日志文件绝对路径 */
	private String absolutePath;

	private String preUnitId;
	
	private String[] key;
	/** 采集周期 */
	private String interval = "2000";
	
	private boolean runFlag = true;
	
	public LogCollThread(HashMap<String, String> params) {
		ipAddr = params.get("LOGINIP");
		absolutePath = params.get("LOGNAME");
		String kbpClass = params.get("KBPCLASS");
		preUnitId = kbpClass + ":" + Formater.neatenunitid(ipAddr) + "-" + Formater.neatenunitid(absolutePath);
		
		String keyWords = params.get("KEYWORD");
		logger.info(keyWords);
		key = keyWords.split(",");
		
		runFlag = true;
	}
	
	public void run() {
		logger.info("Begin collLog...");
		CollBase collBase = new CollBase();
		File logFile = new File(absolutePath);
		if (logFile == null || !logFile.exists()) {
			logger.error("Can't find log file: " + absolutePath);
			return;
		}		
		
		for (int i = 0; i < key.length; i++) {
			String unitId = preUnitId + "-" + Formater.neatenunitid(key[i]);

			// 日志文件名称
			collBase.addKPI(unitId, "CM-01-14-013-01", absolutePath, interval);
			
			collBase.addKPI(unitId, "CM-01-14-013-02", ipAddr, interval);
			
			collBase.addKPI(unitId, "CM-01-14-013-03", key[i], interval);
			
			collBase.addKPI(unitId, "FM-01-14-013-01", "OK", interval);
		}

		
		BufferedReader br = null;
		try {
			br = new BufferedReader(new InputStreamReader(new FileInputStream(logFile)));
		} catch (Exception e) {
			logger.error("Exception while collLog.", e);
			return;
		}
		
		if(br == null){
			logger.error("br == null");
			return;
		}
		
		while (runFlag) {
			try {
				String line = br.readLine();
				if (line == null) {
					SysHelper.waitIt(this, SCAN_INTERVAL);
					continue;
				}

				for (String keyWord : key) {
					if (isMatchExpression(line, keyWord)) {
						String unitId = preUnitId + "-" + Formater.neatenunitid(keyWord);
						
						collBase.addKPI(unitId, "FM-01-14-013-01", line, interval);
						break;
					}
				}// end for
				collBase.saveKPI2File();
			} catch (Exception e) {
				e.printStackTrace();
				logger.error("Exception while collLog", e);
				SysHelper.waitIt(this, 1000L);
			}
		}// end while

	}

	/**
	 * 是否存在关键字
	 * 
	 * @param line
	 *            字符串内容
	 * @param expression
	 *            关键字
	 * @return
	 */
	public boolean isMatchExpression(String line, String keyWord) {
		if (line.indexOf(keyWord) >= 0) {
			return true;
		} else {
			return false;
		}
	}

	public boolean isRunFlag() {
		return runFlag;
	}

	public void setRunFlag(boolean runFlag) {
		this.runFlag = runFlag;
	}
	
	
}