⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 processruntime.java

📁 对Windows系统产生的非常巨大的日志文件进行分累统计并进行格式打印.手动去搜索统计某个或几个你所关心事件或内容几乎不太可能。
💻 JAVA
字号:
/**
 * 
 */
package logfileAnalyse;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;


/**
 * @author Jack
 *
 */
public class ProcessRunTime extends ProcessCount {

	private String pattern1 = "([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])";
	private String pattern2 = "([0-9])([0-9])(:)([0-9])([0-9])(:)([0-9])([0-9])";
	private static final int PRINT_MAX_LENGTH = 60; 
    private Map<String, Event> processRun;	
    private Map<String, Record> record;
    
    private static final int START_EVENT = 1;
    private static final int EXIT_EVENT = 2;
	private static final int NEW_ID = 0;
	private static final int OLD_ID = 1;
	private int EVENT_TO_PROCESSID	= 5;
   
    private String startEvt;
    private String exitEvt;
    
    private String ymd;
    private String hms;
    private String event;
    private String sProcess;
    private String sProcessId;
    private String sUser;
    private String sDomain;
    private String sLogon;
	
	/**
	 * 
	 */
	public ProcessRunTime() {
		
		startEvt = "592";
		exitEvt = "593";
		processRun = new TreeMap<String, Event>();
		record = new TreeMap<String, Record>();
		
	}
	
	/**
	 * Accept filename to be analysed
	 * 
	 * @param fileIn
	 * 			filename to be analysed
	 */
	public ProcessRunTime(String filename) {
		this();
		fileIn = new File(filename);
		if (!fileIn.exists()) {
			System.err.println(filename + " doses not exits.");
			System.exit(1);
		}
		fileNum++;
	}
	
	/*
    * Processes the data(from the log file ) one line at a time, tokenizes the
    * events and match main fields then stores the process name in a TreeMap 
    * with the process name as the key and the offset time of exit and start
    * of the process as the value.	 
    */
	public void calculate() {
		
	    BufferedReader reader = null;
	    String line = null;
	    StringTokenizer st = null;
    
	    try{
	    	reader = new BufferedReader(new FileReader(fileIn));
	        line = reader.readLine();
	        while(line != null) {
	            st = new StringTokenizer(line, DELIMITER);
	            while(st.hasMoreTokens()) {
	            	String token = st.nextToken();
	            	if(isDate(token))
	            		ymd = token;
	            	
	            	if(!st.hasMoreTokens())
	            		break;
	            	token = st.nextToken();
	            	if(isTime(token)) {
	            		hms = token;
	            	}
	            	if(!st.hasMoreTokens())
	            		break;

	            	token = st.nextToken();
	            	if(!st.hasMoreTokens())
	            		break;

	            	token = st.nextToken();
	            	/* storage the related fields of process start */
	            	if(getProcessEvtType(token) == START_EVENT) {
	            		event = token;
	            		
	            		for(int i = 0; i < eToPoffset; i++) {
	    	            	if(!st.hasMoreTokens())
	    	            		break;

	            			token = st.nextToken();
	            			
	            			if(i == EVENT_TO_PROCESSID)
	            				sProcessId = getProcessId(token, NEW_ID);
	            		}
	            		
	            		token = getProcessName(token);
	            		sProcess = token;
		            	if(!st.hasMoreTokens())
		            		break;
	            		token = st.nextToken();
	            		
		            	if(!st.hasMoreTokens())
		            		break;
	            		token = st.nextToken();
		            	sUser = getProcessUser(token);
		            	
		            	if(!st.hasMoreTokens())
		            		break;
		            	token = st.nextToken();
		            	sDomain = getProcessDomain(token);
		            	
		            	if(!st.hasMoreTokens())
		            		break;
		            	token = st.nextToken();
		            	sLogon = getProcessLogon(token);
		            	
		            	Record rec = record.get(sProcess);
		            	if(rec == null) {
		            		rec = new Record(ymd, hms, event, sProcess, sProcessId,
		            				sUser, sDomain, sLogon);
		            		rec.setTime(totalTime(ymd, hms));
		            		
		            		record.put(sProcess, rec);
		            	}
		            	else {
		            		setPara(rec, ymd, hms, event, sProcess, sProcessId,
		            				sUser, sDomain, sLogon);
		            		rec.setEvent(event);
		            		record.put(sProcess, rec);
		            	}
	            	}
	            	/* match the related fields */
	            	else if(getProcessEvtType(token) == EXIT_EVENT) {
	            		
	            		for(int i = 0; i < eToPoffset; i++) {
	    	            	if(!st.hasMoreTokens())
	    	            		break;

	            			token = st.nextToken();
	            			
	            			if(i == EVENT_TO_PROCESSID)
	            				sProcessId = getProcessId(token, OLD_ID);
	            		}
	            		
	            		token = getProcessName(token);
	            		sProcess = token;
	            		
		            	if(!st.hasMoreTokens())
		            		break;
	            		token = st.nextToken();
		            	sUser = getProcessUser(token);
		            	
		            	if(!st.hasMoreTokens())
		            		break;
		            	token = st.nextToken();
		            	sDomain = getProcessDomain(token);
		            	
		            	if(!st.hasMoreTokens())
		            		break;
		            	token = st.nextToken();
		            	sLogon = getProcessLogon(token);
		            	
		            	Record rec = record.get(sProcess);
		            	if(rec != null) {
		            		if(isMatchRecord(rec, ymd, hms, sProcess, sProcessId, 
		            				sUser, sDomain, sLogon)) {
		            			Event value = processRun.get(sProcess);
		            			if(value == null) {
		            				value = new Event(sProcess);
		            				value.setCount((int)(totalTime(ymd, hms) - rec.getTime()));
		            				processRun.put(sProcess, value);
		            			}
		            			else {
		            				value.setCount((int)(totalTime(ymd, hms) - rec.getTime()));
		            				processRun.put(sProcess, value);
		            			}
		            		}
		            	}
	            	}
	            }
	            line = reader.readLine();
	         }
	    } catch(IOException ioe) {
	    	ioe.printStackTrace();
	    }
	}
	
	/*
	 * obtain process event type
	 * @param str
	 * 			input string
	 */
	public int getProcessEvtType(String str) {
		if(str.equals(startEvt))
			return START_EVENT;
		else if(str.equals(exitEvt))
			return EXIT_EVENT;
		else
			return 0;
	}
	
	/*
	 * obtain the process Id from the input string
	 * 
	 * @param str
	 * 			input string
	 */
	public String getProcessId(String str, int id) {
		String strPrefix1 = "New Process ID: ";
		String strPrefix2 = "Process ID: ";
		String st;
		
		if(id == NEW_ID)
			st = str.substring(strPrefix1.length());
		else
			st = str.substring(strPrefix2.length());
			
		
		return st;
	}

	/*
	 * obtain the user name from the input string
	 * 
	 * @param str
	 * 			input string
	 */
	public String getProcessUser(String str) {
		String strPrefix = "User Name: ";
		String st;
		
		st = str.substring(strPrefix.length());
		
		return st;
	}
	
	/*
	 * obtain the domain from the input string
	 * 
	 * @param str
	 * 			input string
	 */
	public String getProcessDomain(String str) {
		String strPrefix = "Domain: ";
		String st;
		
		st = str.substring(strPrefix.length());
		
		return st;
	}
	
	/*
	 * obtain the logon Id from the input string
	 * 
	 * @param str
	 * 			input string
	 */
	public String getProcessLogon(String str) {
		String strPrefix = "Logon ID: ";
		String st;
		
		st = str.substring(strPrefix.length());
		
		return st;
	}
	
	/*
	 * input string is date or not
	 */
	public boolean isDate(String input) {
		
		if(patternMatch(input, pattern1))
			return true;
		else
			return false;
	}
	
	/*
	 * input string is time or not
	 */
	public boolean isTime(String input) {
		
		if(patternMatch(input, pattern2))
			return true;
		else
			return false;
	}
	
	/*
	 * date change to seconds
	 */
	public long DateToS(String s) {
		long d = 0;
		
		d += 365*24*60*60*Long.parseLong(s.substring(0, 2));
		d += 30*24*60*60*Long.parseLong(s.substring(2,4));
		d += 24*60*60*Long.parseLong(s.substring(4,6));
		
		return d;
	}

	/*
	 * time change to seconds
	 */
	public long TimeToS(String s) {
		long t = 0;
		
		t += 60*60*Long.parseLong(s.substring(0, 2));
		t += 60*Long.parseLong(s.substring(4,5));
		t += Long.parseLong(s.substring(7,8));
		
		return t;
	}
	
	/*
	 * total seconds
	 */
	public long totalTime(String d, String t) {
		long tt = 0;
		
		tt = DateToS(d) + TimeToS(t);
		
		return tt;
	}
	
	/*
	 * the time offset process exit and start
	 */
	public long offsetTime(Record e, Record s) {
		long off = 0;
		
		off = totalTime(e.getYymmdd(), e.getHhmmss()) -
			totalTime(s.getYymmdd(), e.getHhmmss());
		
		return off;
	}
	
	/*
	 * set parameters for record
	 */
	public void setPara(Record rec, String d, String t, String e, String p,
			String pi, String u, String dm, String l) {
		rec.setYymmdd(d);
		rec.setHhmmss(t);
		rec.setEvent(e);
		rec.setSProcess(p);
		rec.setSLogonId(pi);
		rec.setSUser(u);
		rec.setSDomain(dm);
		rec.setSLogonId(l);
		rec.setTime(totalTime(d, t));
	}

	/*
	 * match fields between start record and exit record
	 */
	public boolean isMatchRecord(Record rec, String d, String t, String p,
			String pi, String u, String dm, String l) {
		if(rec.getSProcess().equals(p) && rec.getSProcessId().equals(pi) && 
				rec.getSUser().equals(u) && rec.getSDomain().equals(dm) &&
				rec.getSLogonId().equals(l) && (totalTime(d, t) >= rec.getTime()))
			return true;
		else
			return false;
	}
	
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
				
	    StringBuffer strbf = new StringBuffer();
	    
	    String sEvt = "Process Name";
	    String sFrq = "Average Run Time";
	    String s1 = " ";
	    String s2 = "-";

	    List<Event> entries = new ArrayList<Event>();
	    entries.addAll(processRun.values());
	    Collections.sort(entries, new Event());
	       
		strbf.append(sEvt);
		for(int i = 0; i < (PRINT_MAX_LENGTH - sEvt.length() - sFrq.length()); i++)
			strbf.append(s1);
		
		strbf.append(sFrq).append(NEWLINE);
		for(int i = 0; i < PRINT_MAX_LENGTH; i++)
			strbf.append(s2);
		
		strbf.append(NEWLINE);
		
	    for(Event evt : entries) {
	    	evt.PRINT_MAX_LENGTH = PRINT_MAX_LENGTH;
	    	strbf.append(evt).append(NEWLINE);
	    }

		for(int i = 0; i < PRINT_MAX_LENGTH; i++)
			strbf.append(s2);

		strbf.append(NEWLINE);
	    
	    return new String(strbf);
   }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -