/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.performizeit.threadtop.localext;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
* @author yadidh
*/
public class PerfmonParser {
public static String createPerfomnOutput(int pid) throws IOException, InterruptedException {
return OSUtil.executeCommandAndExtractStdOut("cscript //NoLogo threadsOfProcess.vbs " + pid);
}
public static void buildThreadStarts(String perfmonOutput) {
for (String thread : perfmonOutput.split("\n")) {
Pattern p = Pattern.compile("^(\\d*),(\\d*),(\\d*),(\\d*)");
Matcher m = p.matcher(thread);
if (m.find()) {
int pid = Integer.parseInt(m.group(1));
int nid = Integer.parseInt(m.group(2));
long utime = Long.parseLong(m.group(3));
long ktime = Long.parseLong(m.group(4));
PerfmonThreadData pmd = new PerfmonThreadData(pid, nid, utime, ktime);
ThreadNamesAndIdsOnly.threads.put(nid, pmd);
}
}
}
public static void buildThreadEnds(String perfmonOutput) {
for (String thread : perfmonOutput.split("\n")) {
Pattern p = Pattern.compile("^(\\d*),(\\d*),(\\d*),(\\d*)");
Matcher m = p.matcher(thread);
if (m.find()) {
int pid = Integer.parseInt(m.group(1));
int nid = Integer.parseInt(m.group(2));
long utime = Long.parseLong(m.group(3));
long ktime = Long.parseLong(m.group(4));
PerfmonThreadData pmd = ThreadNamesAndIdsOnly.threads.get(nid);
if (pmd != null) {
pmd.setEndTimes(utime, ktime);
} else {
pmd = new PerfmonThreadData(pid, nid, -1, -1);
pmd.setEndTimes(utime, ktime);
ThreadNamesAndIdsOnly.threads.put(nid, pmd);
}
}
}
}
}