diff --git a/main/plugins/org.talend.librariesmanager/resources/java/routines/system/JobStructureCatcherUtils.java b/main/plugins/org.talend.librariesmanager/resources/java/routines/system/JobStructureCatcherUtils.java index cdc303c275..3ab4b22f23 100644 --- a/main/plugins/org.talend.librariesmanager/resources/java/routines/system/JobStructureCatcherUtils.java +++ b/main/plugins/org.talend.librariesmanager/resources/java/routines/system/JobStructureCatcherUtils.java @@ -21,17 +21,19 @@ // ============================================================================ package routines.system; +import java.io.UnsupportedEncodingException; import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.UUID; //TODO split to several classes by the level when have a clear requirement or design : job, component, connection public class JobStructureCatcherUtils { - private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZ"); + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZ"); // TODO split it as too big, even for storing the reference only which point // null @@ -59,8 +61,6 @@ public class JobStructureCatcherUtils { public String job_version; - public Long systemPid = JobStructureCatcherUtils.getPid(); - public boolean current_connector_as_input; public String current_connector_type; @@ -84,11 +84,17 @@ public class JobStructureCatcherUtils { public long end_time; - public String moment = sdf.format(new Date()); + public String moment; public String status; public LogType log_type; + + //process uuid + public String pid = ProcessIdAndThreadId.getProcessId(); + + //thread uuid + public String tid = ProcessIdAndThreadId.getThreadId(); public JobStructureCatcherMessage() { } @@ -202,6 +208,8 @@ public class JobStructureCatcherUtils { public void addJobStartMessage() { JobStructureCatcherMessage scm = new JobStructureCatcherMessage(); + scm.moment = sdf.format(new Date()); + scm.job_name = this.job_name; scm.job_id = this.job_id; scm.job_version = this.job_version; @@ -213,6 +221,8 @@ public class JobStructureCatcherUtils { public void addJobEndMessage(long start_time, long end_time, String status) { JobStructureCatcherMessage scm = new JobStructureCatcherMessage(); + scm.moment = sdf.format(new Date()); + scm.job_name = this.job_name; scm.job_id = this.job_id; scm.job_version = this.job_version; @@ -237,16 +247,6 @@ public class JobStructureCatcherUtils { return messagesToSend; } - public static long getPid() { - RuntimeMXBean mx = ManagementFactory.getRuntimeMXBean(); - String[] mxNameTable = mx.getName().split("@"); - if (mxNameTable.length == 2) { - return Long.parseLong(mxNameTable[0]); - } else { - return Thread.currentThread().getId(); - } - } - public void addConnectionMessage4PerformanceMonitor(String current_connector, String sourceId, String sourceLabel, String sourceComponentName, String targetId, String targetLabel, String targetComponentName, int row_count, long start_time, long end_time) { diff --git a/main/plugins/org.talend.librariesmanager/resources/java/routines/system/ProcessIdAndThreadId.java b/main/plugins/org.talend.librariesmanager/resources/java/routines/system/ProcessIdAndThreadId.java new file mode 100644 index 0000000000..ed529cb9cb --- /dev/null +++ b/main/plugins/org.talend.librariesmanager/resources/java/routines/system/ProcessIdAndThreadId.java @@ -0,0 +1,44 @@ +package routines.system; + +import java.io.UnsupportedEncodingException; +import java.lang.management.ManagementFactory; +import java.lang.management.RuntimeMXBean; +import java.util.UUID; + +public class ProcessIdAndThreadId { + + private static class PTId { + String processId; + String threadId; + } + + private static final ThreadLocal Id = new ThreadLocal() { + @Override + protected PTId initialValue() { + PTId id = new PTId(); + id.processId = getPid(); + id.threadId = UUID.randomUUID().toString(); + return id; + } + + }; + + private static String getPid() { + RuntimeMXBean mx = ManagementFactory.getRuntimeMXBean(); + String processName = mx.getName(); + try { + return UUID.nameUUIDFromBytes(processName.getBytes("UTF8")).toString(); + } catch (UnsupportedEncodingException e) { + } + return null; + } + + public static String getProcessId() { + return Id.get().processId; + } + + public static String getThreadId() { + return Id.get().threadId; + } + +} diff --git a/main/plugins/org.talend.librariesmanager/resources/java/routines/system/RunStat.java b/main/plugins/org.talend.librariesmanager/resources/java/routines/system/RunStat.java index 4d8f2e23a1..f51b464fdb 100644 --- a/main/plugins/org.talend.librariesmanager/resources/java/routines/system/RunStat.java +++ b/main/plugins/org.talend.librariesmanager/resources/java/routines/system/RunStat.java @@ -58,8 +58,16 @@ public class RunStat implements Runnable { private final JobStructureCatcherUtils jscu; - public RunStat(JobStructureCatcherUtils jscu) { - this.jscu = jscu; + public RunStat(JobStructureCatcherUtils jscu, String interval) { + this.jscu = jscu; + + if(interval!=null) { + try { + this.interval = Long.valueOf(interval); + } catch(Exception e) { + //do nothing + } + } } private class StatBean { @@ -342,7 +350,7 @@ public class RunStat implements Runnable { private Map processStats4Meter = new HashMap(); - private final static long INTERVAL = 500; + private long interval = 500; private long lastLogUpdate = 0; @@ -354,7 +362,7 @@ public class RunStat implements Runnable { StatBean stateBean = log(connectionId, mode, nbLine); long currentLogUpdate = System.currentTimeMillis(); - if (lastLogUpdate == 0 || lastLogUpdate + INTERVAL < currentLogUpdate) { + if (lastLogUpdate == 0 || lastLogUpdate + interval < currentLogUpdate) { lastLogUpdate = currentLogUpdate; jscu.addConnectionMessage4PerformanceMonitor( connectionId, sourceId, sourceLabel, sourceComponentName, targetId, targetLabel, targetComponentName, stateBean.nbLine, stateBean.startTime, currentLogUpdate);