package Libraries.Utils.GetJobsMemoryUsage;
import java.lang.reflect.*;
import java.util.*;
import java.util.concurrent.atomic.*;
import java.io.*;
import org.xml.sax.InputSource;
import com.tibco.xml.datamodel.XiNode;
import com.tibco.xml.datamodel.XiParserFactory;
import com.tibco.xml.xdata.xpath.Variable;
import com.tibco.xml.xdata.xpath.VariableList;
import com.tibco.pe.core.*;
public class GetJobsMemoryUsageJavaCode{
public static JobPool getJobPool() {
for (Field f : Engine.class.getDeclaredFields()) {
if (f.getType().getName().endsWith("JobPool")) {
f.setAccessible(true);
try {
return (JobPool) f.get(null);
}
catch (Throwable te) {
throw new RuntimeException("Cannot access JobPool: "+te.getMessage(), te);
}
}
}
throw new RuntimeException("Cannot access JobPool");
}
public static long[] getJobIds() {
try {
return getJobPool().getJobIds();
}
catch (Throwable t) {
throw new RuntimeException("Cannot access JobPool.getJobIds(): "+t.getMessage(), t);
}
}
public static String getJobName(long id) {
try {
Object job = getJobPool().findJob(id);
if (job!=null) {
Method getWorkflow = Class.forName("com.tibco.pe.core.Job").getDeclaredMethod("getWorkflow", new Class<?>[0]);
getWorkflow.setAccessible(true);
com.tibco.pe.core.Workflow w = (com.tibco.pe.core.Workflow)getWorkflow.invoke(job);
return w!=null ? w.getName() : "no-workflow-name";
}
else
return null;
}
catch (Throwable t) {
throw new RuntimeException("Cannot access Job data: "+t.getMessage(), t);
}
}
public static VariableList getJobVariables(long jid, int trackId) {
try {
Method getAttributes = Class.forName("com.tibco.pe.core.Job").getDeclaredMethod("getAttributes", new Class<?>[] { int.class });
getAttributes.setAccessible(true);
return (VariableList) getAttributes.invoke(getJobPool().findJob(jid), trackId);
}
catch (Throwable t) {
throw new RuntimeException("Cannot access job variables: "+t.getMessage(), t);
}
}
public int getTrackId(long jid) {
try {
Method getter = Class.forName("com.tibco.pe.core.Job").getDeclaredMethod("getTrackId", new Class<?>[0]);
getter.setAccessible(true);
return (int) getter.invoke(getJobPool().findJob(jid));
}
catch (Throwable t) {
throw new RuntimeException("Cannot access job methods: "+t.getMessage(), t);
}
}
/****** START SET/GET METHOD, DO NOT MODIFY *****/
protected long jobId = 0;
protected String[] usage = null;
public long getjobId() {
return jobId;
}
public void setjobId(long val) {
jobId = val;
}
public String[] getusage() {
return usage;
}
public void setusage(String[] val) {
usage = val;
}
/****** END SET/GET METHOD, DO NOT MODIFY *****/
public GetJobsMemoryUsageJavaCode() {
}
public void invoke() throws Exception {
/* Available Variables: DO NOT MODIFY
In : long jobId
Out : String[] usage
* Available Variables: DO NOT MODIFY *****/
LinkedList<String> usageList = new LinkedList<String>();
long ids[] = jobId > 0 ? new long[] { jobId } : getJobIds();
if (ids!=null) {
StringBuilder sb = new StringBuilder();
for (long id : ids) {
String jobName = getJobName(id);
sb.setLength(0);
AtomicLong mem = new AtomicLong(0);
int currentTrackId = getTrackId(id);
for (int trackId = 0; trackId < 4; trackId++) {
VariableList varList = trackId == currentTrackId ? null : getJobVariables(id, trackId);
if (varList!=null) {
for (Object varName : varList.getVariableNames()) {
Variable v = varList.getVariable(varName.toString());
long size = 0;
if (v.getValue()==null)
size = (v.getNumber()+"").length();
else {
final AtomicInteger cnt = new AtomicInteger(0);
OutputStream cos = new OutputStream() {
public void write(int i) { cnt.addAndGet(4); }
public void write(byte bytes[], int off, int len) throws IOException { cnt.addAndGet(len); }
};
com.tibco.xml.datamodel.helpers.XiSerializer.serialize( v.getValue(), cos, "utf-8", true );
size = cnt.get();
}
sb.append(varName).append('[').append(trackId).append(']').append("=").append(size).append("|");
mem.addAndGet(size);
}
}
}
sb.insert(0, jobName+"="+mem.longValue()+"|");
usageList.add(sb.toString());
}
}
usage = usageList.toArray(new String[0]);}
}
piątek, lutego 20, 2015
How to get memory usage of Tibco BW Job
Subskrybuj:
Komentarze do posta (Atom)

0 komentarze:
Prześlij komentarz