/*
* #%L
* Talend :: ESB :: Job :: API
* %%
* Copyright (C) 2011 - 2012 Talend Inc.
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
// ============================================================================
//
// Talend Community Edition
//
// Copyright (C) 2006-2011 Talend - www.talend.com
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// ============================================================================
package routines.system;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class MetterCatcherUtils {
public class MetterCatcherMessage {
private String origin;
private Date moment;
private String jobVersion;
private String jobId;
private Long systemPid;
private String label;
private Integer count;
private String referense;
private String thresholds;
public MetterCatcherMessage(String label, Integer count, String referense, String thresholds, String origin,
String jobVersion, String jobId) {
this.moment = java.util.Calendar.getInstance().getTime();
this.jobVersion = jobVersion;
this.jobId = jobId;
this.systemPid = MetterCatcherUtils.getPid();
this.origin = origin;
this.label = label;
this.count = count;
this.referense = referense;
this.thresholds = thresholds;
}
public Integer getCount() {
return this.count;
}
public void setCount(Integer count) {
this.count = count;
}
public String getLabel() {
return this.label;
}
public void setLabel(String label) {
this.label = label;
}
public String getReferense() {
return this.referense;
}
public void setReferense(String referense) {
this.referense = referense;
}
public String getThresholds() {
return this.thresholds;
}
public void setThresholds(String thresholds) {
this.thresholds = thresholds;
}
public String getOrigin() {
return origin;
}
public void setOrigin(String origin) {
this.origin = origin;
}
public Date getMoment() {
return moment;
}
public void setMoment(Date d) {
this.moment = d;
}
public String getJobId() {
return jobId;
}
public void setJobId(String jobId) {
this.jobId = jobId;
}
public String getJobVersion() {
return jobVersion;
}
public void setJobVersion(String jobVersion) {
this.jobVersion = jobVersion;
}
public Long getSystemPid() {
return systemPid;
}
public void setSystemPid(Long systemPid) {
this.systemPid = systemPid;
}
}
ThreadLocal tl_messages = new ThreadLocal();
private java.util.List<MetterCatcherMessage> getTLMessages() {
Object value = tl_messages.get();
if (value == null) {
java.util.List<MetterCatcherMessage> messages =
java.util.Collections.synchronizedList(new
java.util.ArrayList<MetterCatcherMessage>());
tl_messages.set(messages);
return messages;
}
return (java.util.List<MetterCatcherMessage>) value;
}
String jobId = ""; //$NON-NLS-1$
String jobVersion = ""; //$NON-NLS-1$
public MetterCatcherUtils(String jobId, String jobVersion) {
this.jobId = jobId;
this.jobVersion = jobVersion;
}
public void addMessage(String label, Integer count, String referense, String thresholds, String origin) {
java.util.List<MetterCatcherMessage> messages = getTLMessages();
MetterCatcherMessage scm = new MetterCatcherMessage(label, count, referense, thresholds, origin, this.jobVersion,
this.jobId);
messages.add(scm);
}
public java.util.List<MetterCatcherMessage> getMessages() {
java.util.List<MetterCatcherMessage> messages = getTLMessages();
java.util.List<MetterCatcherMessage> messagesToSend = new java.util.ArrayList<MetterCatcherMessage>();
synchronized (messages) {
for (MetterCatcherMessage scm : messages) {
messagesToSend.add(scm);
}
}
messages.clear();
return messagesToSend;
}
private Map<String, Integer> connCountMap = java.util.Collections.synchronizedMap(new HashMap<String, Integer>());
public void clearConnCountMap() {
connCountMap.clear();
}
public void addLineToRow(String connName) {
if (connCountMap.containsKey(connName)) {
Integer count = this.connCountMap.get(connName);
this.connCountMap.put(connName, new Integer(count.intValue() + 1));
} else {
this.connCountMap.put(connName, new Integer(1));
}
}
public Integer getConnLinesCount(String connName) {
return this.connCountMap.get(connName);
}
public static long getPid() {
RuntimeMXBean mx = ManagementFactory.getRuntimeMXBean();
String[] mxNameTable = mx.getName().split("@"); //$NON-NLS-1$
if (mxNameTable.length == 2) {
return Long.parseLong(mxNameTable[0]);
} else {
return Thread.currentThread().getId();
}
}
}