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