1. The biggest contributor is garbage collector
2. In-process locking and thread scheduling
3. I/O
4. Application algorithmic inefficiencies
1. The biggest contributor is garbage collector
2. In-process locking and thread scheduling
3. I/O
4. Application algorithmic inefficiencies
package com.company.onms.monitor;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
*
* @author apaxson
*/
public class OnmsEvent {
private String uei;
private String source;
private int nodeid;
private String time;
private String host;
private Map parms = new HashMap();
public OnmsEvent(String uei, int nodeid, String host, String source) {
setUei(uei);
setNodeid(nodeid);
setHost(host);
setSource(source);
Date currentTime = Calendar.getInstance().getTime();
DateFormat dformat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
dformat.setTimeZone(TimeZone.getTimeZone("GMT"));
setTime(dformat.format(currentTime));
}
protected String getUei() {
return uei;
}
protected void setUei(String uei) {
this.uei = uei;
}
protected String getSource() {
return source;
}
protected void setSource(String source) {
this.source = source;
}
protected int getNodeid() {
return nodeid;
}
protected void setNodeid(int nodeid) {
this.nodeid = nodeid;
}
protected String getTime() {
return time;
}
protected void setTime(String time) {
this.time = time;
}
protected String getHost() {
return host;
}
protected void setHost(String host) {
this.host = host;
}
public void addParm(String key, String value) {
parms.put(key, value);
}
@SuppressWarnings(value = "unchecked")
protected Map<String, String> getParms() {
return parms;
}
protected String toXml() {
StringBuffer data = new StringBuffer();
data.append("<log>");
data.append("<events>");
data.append("<event>");
data.append("<uei>" + getUei() + "</uei>");
data.append("<source>" + getSource() + "</source>");
data.append("<nodeid>" + getNodeid() + "</nodeid>");
data.append("<time>" + getTime() + "</time>");
data.append("<host>" + getHost() + "</host>");
data.append("<parms>");
// Cycle through each parameter
for (Map.Entry<String, String> e : getParms().entrySet()) {
data.append("<parm>");
data.append("<parmName>");
data.append("<![CDATA[" + e.getKey() + "]]></parmName>");
data.append("<value type=\"string\" encoding=\"text\"><![CDATA[" + e.getValue() + "]]></value>");
data.append("</parm>");
}
data.append("</parms>");
data.append("</event>");
data.append("</events>");
data.append("</log>");
return data.toString();
}
/**
* TODO Remember to change the hardcoded address 2.3.4.5 to your address for onms.
* Preferrably, place this in a config file somewhere
*/
public void sendEvent(String xmlData) {
//TODO check to make sure xmlData isn't null before creating socket
//TODO make some useful logging functions here, rather than println
Socket socket = null;
try {
System.out.println("Sending data");
socket = new Socket("2.3.4.5", 5817);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println(xmlData);
System.out.println("Sending data complete");
} catch (UnknownHostException ex) {
System.out.println("Unknown host");
} catch (IOException ex) {
System.out.println("I/O Exception while creating socket");
} finally {
try {
socket.close();
} catch (IOException ex) {
System.out.println("I/O Exception when closing socket");
}
}
}
}
Okay, so to use this new class, you create the object, and set the data. As such:
OnmsEvent event = new OnmsEvent("uei.company.com/application/logFileTableLoadError",26,"test.host.com", "ServerLogMonitor");
event.addParm("file", "logfile001.log");
event.addParm("content","Disregard... testing only");
event.sendEvent(event.toXml());An organization needs to spend a lot (COST) to achieve a true SOA based architecture just because SOA is not only limited to Service and their interactions. Following are areas which needs to be considered for achieving an “Agile SOA” platform:
- Service
- Governance
- Architecture
- Process
- People
- Engagement & Delivery Operation
Trust me, really speaking, it would not be very SMART & INTELLIGENT if we tell to our clients that we offer SOA based solutions. WE COULD SIMPLY BE CAUGHT UNAWARE! Simply because if we get an SOA expert across the table, we would simply find ourselves struggling with some real tough questions on SOA governance, process, service discovery, Delivery & Operations Management (ITIL) aspects of SOA. So, we rather should take caution (MAKE RIGHT CHOICE OF WORDS) when we speak to our clients that we offer SOA-based solution as it could simply backfire!
And, this is very natural that an organization cannot achieve “Agile SOA” status in first few years as no organization (especially start-ups) could IGNORE COST-EFFECTIVENESS of the solutions. Or, it will simply be DEAD!
Its very natural that in the initial years, organization would want to be happy with SOA based solution rated as “Ad-hoc SOA” status. That said, pl feel free to ask for various transitions for SOA and roadmap that an organization need to take to transition from “Ad-hoc SOA” to “Agile SOA” status.
public void log(Level level, Object... params) {
// Check logging level before continuing
if (logger.isLoggable(level)) {
String message;
if (params != null) {
if (params.length == 1) {
message = String.valueOf(params[0]);
} else {
StringBuilder buf = new StringBuilder();
for (Object param : params) {
buf.append(param);
}
message = buf.toString();
}
} else {
message = "null";
}
logger.log(level, message);
}
}