![JAR search and dependency download from the Maven repository](/logo.png)
org.semanticwb.servlet.internal.Monitor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of SWBPortal Show documentation
Show all versions of SWBPortal Show documentation
SemanticWebBuilder Portal API components and utilities
The newest version!
/*
* SemanticWebBuilder es una plataforma para el desarrollo de portales y aplicaciones de integración,
* colaboración y conocimiento, que gracias al uso de tecnología semántica puede generar contextos de
* información alrededor de algún tema de interés o bien integrar información y aplicaciones de diferentes
* fuentes, donde a la información se le asigna un significado, de forma que pueda ser interpretada y
* procesada por personas y/o sistemas, es una creación original del Fondo de Información y Documentación
* para la Industria INFOTEC, cuyo registro se encuentra actualmente en trámite.
*
* INFOTEC pone a su disposición la herramienta SemanticWebBuilder a través de su licenciamiento abierto al público (‘open source’),
* en virtud del cual, usted podrá usarlo en las mismas condiciones con que INFOTEC lo ha diseñado y puesto a su disposición;
* aprender de él; distribuirlo a terceros; acceder a su código fuente y modificarlo, y combinarlo o enlazarlo con otro software,
* todo ello de conformidad con los términos y condiciones de la LICENCIA ABIERTA AL PÚBLICO que otorga INFOTEC para la utilización
* del SemanticWebBuilder 4.0.
*
* INFOTEC no otorga garantía sobre SemanticWebBuilder, de ninguna especie y naturaleza, ni implícita ni explícita,
* siendo usted completamente responsable de la utilización que le dé y asumiendo la totalidad de los riesgos que puedan derivar
* de la misma.
*
* Si usted tiene cualquier duda o comentario sobre SemanticWebBuilder, INFOTEC pone a su disposición la siguiente
* dirección electrónica:
* http://www.semanticwebbuilder.org
*/
package org.semanticwb.servlet.internal;
import com.sun.management.GcInfo;
import java.io.*;
import static java.lang.management.ManagementFactory.*;
import java.lang.management.*;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.*;
import javax.crypto.Cipher;
import javax.crypto.CipherOutputStream;
import javax.crypto.KeyAgreement;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.semanticwb.Logger;
import org.semanticwb.SWBPlatform;
import org.semanticwb.SWBPortal;
import org.semanticwb.SWBUtils;
import org.semanticwb.base.util.SFBase64;
import org.semanticwb.model.AdminAlert;
import org.semanticwb.model.SWBContext;
import org.semanticwb.platform.SemanticObject;
import org.semanticwb.platform.SemanticProperty;
import org.semanticwb.portal.SWBMonitor;
import org.semanticwb.portal.monitor.*;
// TODO: Auto-generated Javadoc
/**
* The Class Monitor.
*
* @author serch
*/
public class Monitor implements InternalServlet
{
/** The log. */
private static Logger log = SWBUtils.getLogger(Monitor.class);
/** The rmbean. */
private static RuntimeMXBean rmbean;
/** The mmbean. */
private static MemoryMXBean mmbean;
/** The pools. */
private static List pools;
/** The gcmbeans. */
private static List gcmbeans;
// private static MBeanServer mbs;
/** The buffer. */
private Vector buffer;
/** The timer. */
private Timer timer;
/** The max. */
private int max = 2500;
// private int maxgc = 50;
/** The delays. */
private int delays = 1000;
/** The t. */
private TimerTask t = null;
/** The summary. */
private SWBSummary summary = null;
/** The monitorbeans. */
private SWBMonitorBeans monitorbeans = null;
/** The secret key. */
private SecretKey secretKey = null;
/** The timetaken last. */
public static long timetakenLast = 0;
// private Cipher cipher = null;
// //Java 6.0
// private ConcurrentHashMap basureros;
// private Vector basureroBuff;
// private SWBGCDump dumper;
private static Queue tiempos = new LinkedList();
private static Queue pages = new LinkedList();
private static Queue uso = new LinkedList();
private static int cnt = 0;
private static final int MAX_SIZE=10;
private static final int UP_LIMIT=1;
private static long pps=0;
private static long lastTime=0;
private static int alerted_CPU=0;
private static int alerted_TIME=0;
private static int alerted_PPS=0;
private static boolean sendAlert=false;
private static boolean modeOnCPU=false;
private static boolean modeOnTIME=false;
private static boolean modeOnPPS=false;
//Configurable Values...
private static float THRESHOLD_CPU=85.0f;
private static long THRESHOLD_TIME=250;
private static long THRESHOLD_PPS=20;
private static boolean alertOn=false;
private static String alertEmail="[email protected]";
private static String siteName="No Name";
static {
rmbean = getRuntimeMXBean();
mmbean = getMemoryMXBean();
pools = getMemoryPoolMXBeans();
gcmbeans = getGarbageCollectorMXBeans();
}
/* (non-Javadoc)
* @see org.semanticwb.servlet.internal.InternalServlet#init(javax.servlet.ServletContext)
*/
public void init(ServletContext config) throws ServletException
{
log.event("Initializing InternalServlet Monitor...");
// System.out.println("Testing...");
try {
monitorbeans = new SWBMonitorBeans();
}catch (Error err){err.printStackTrace();}
// System.out.println("MonitorBeans Up");
buffer = new Vector(max);
try
{
SemanticProperty sp = SWBPlatform.getSemanticMgr().getModel(SWBPlatform.getSemanticMgr().SWBAdmin).getSemanticProperty(SWBPlatform.getSemanticMgr().SWBAdminURI + "/PrivateKey");
//System.out.println("sp:"+sp);
String priv = SWBPlatform.getSemanticMgr().getModel(SWBPlatform.getSemanticMgr().SWBAdmin).getModelObject().getProperty(sp);
//System.out.println("priv:"+priv);
if (null==priv)
{
org.semanticwb.SWBPlatform.getSemanticMgr().createKeyPair();
priv = SWBPlatform.getSemanticMgr().getModel(SWBPlatform.getSemanticMgr().SWBAdmin).getModelObject().getProperty(sp);
}
if (priv != null)
{
priv = priv.substring(priv.indexOf("|") + 1); //System.out.println("priv:"+priv);
byte[] PKey = SFBase64.decode(priv);
byte[] pKey = SFBase64.decode(SWBPlatform.getEnv("swbMonitor/PublicKey",
"MIHfMIGXBgkqhkiG9w0BAwEwgYkCQQCLxCFm00uKxKmedeD9XqiJ1SZ/DoXRtdibiTIv" +
"Ciz2MfNzu+TnGkrgsBhTpfZN00nLopd80oPFvpBZTGIUTX2FAkBxDxzqmO0rG7TMQf4b" +
"q5o7lIlf0DM1qcaVvFGjCt6t/NcFcko2S//V/58sqrzcyfBQKqZr0yTyqD6J4gCL4EN/" +
"AgIB/wNDAAJAAwR0XE5XXl4xiTpZaF2jlLvp9YRSskMWOWPa/h3Bn+ovSpEuuMwnJ8yg" +
"aj5/fcFNFLj5TaIRNDqTPQgbkMUI3A=="));
if (null != pKey)
{
java.security.spec.X509EncodedKeySpec pK = new java.security.spec.X509EncodedKeySpec(pKey);
java.security.spec.PKCS8EncodedKeySpec PK = new java.security.spec.PKCS8EncodedKeySpec(PKey);
KeyFactory keyFact = KeyFactory.getInstance("DiffieHellman");
KeyAgreement ka = KeyAgreement.getInstance("DiffieHellman");
PublicKey publicKey = keyFact.generatePublic(pK);
PrivateKey privateKey = keyFact.generatePrivate(PK);
ka.init(privateKey);
ka.doPhase(publicKey, true);
secretKey = new SecretKeySpec(ka.generateSecret(), 0, 16, "AES");
//SecretKey secretKey = ka.generateSecret("AES");
}
}
// System.out.println("Got Security in place");
AdminAlert aa = AdminAlert.ClassMgr.getAdminAlert("1", SWBContext.getAdminWebSite());
if (null==aa){
aa = AdminAlert.ClassMgr.createAdminAlert("1", SWBContext.getAdminWebSite());
aa.setAlertSistemStatus(false);
aa.setAlertMailList("[email protected]");
aa.setAlertCPUTH(85.0f);
aa.setAlertTimeTH(250);
aa.setAlertPPSTH(50);
}
setAlertParameter(aa);
} catch (java.security.GeneralSecurityException gse)
//} catch (Exception gse)
{
log.error("Security Fail:",gse);
// assert (false);
} catch (java.lang.NullPointerException npe){
log.error("No access to AdminSite, probably working in Admin Maintenance",npe);
}
// dumper = new SWBGCDump();
// //Java 6.0
// basureros = new ConcurrentHashMap();
// basureroBuff=new Vector(maxgc);
// for ( GarbageCollectorMXBean gc :dumper.getCollectors()){
// basureros.put(gc.getName(), new BasureroCtl());
// BasureroCtl actual =basureros.get(gc.getName());
//
// }
t = new TimerTask()
{
public void run()
{
// long current = System.nanoTime();//System.currentTimeMillis();
_run();
// timetakenLast = System.nanoTime() - current;//System.currentTimeMillis()-current;
// System.out.println("tt:"+timetakenLast);
}
};
//System.out.println("got new timer ready");
timer = new Timer("Monitoring Facility", true);
timer.schedule(t, delays, delays);
log.event("Initializing Timer Monitor(" + max + "," + delays + "ms)...");
// try
// {
// mh = MonitoredHost.getMonitoredHost("localhost");
// VmIdentifier vmid = new VmIdentifier(java.lang.management.ManagementFactory.getRuntimeMXBean().getName());
// mvm= mh.getMonitoredVm(vmid);
//// mvm.addVmListener(new SWBJvmEventListener());
//// sun.jvmstat.monitor.Monitor m = mvm.findByName("sun.gc.lastCause");
//// System.out.println("Monitor:"+m.getName());
//// //System.out.println("Monitor:"+m.);
//// System.out.println("Units:"+m.getUnits());
//// System.out.println("Value:"+m.getValue());
//
// } catch (Exception ex)
// {
// log.error(ex);
// }
// rmbean = getRuntimeMXBean();
// mmbean = getMemoryMXBean();
// pools = getMemoryPoolMXBeans();
// gcmbeans = getGarbageCollectorMXBeans();
// System.out.println("Got beans up and running");
// mbs = sun.management.ManagementFactory.createPlatformMBeanServer();
if (null == summary)
{
summary = new SWBSummary();//mvm);
}// Set names = mbs.queryNames(null, null);
// Iterator it = names.iterator();
// System.out.println("Setting.......");
// while (it.hasNext()){
// try {
//
// ObjectName on = it.next();
// // System.out.println("....... "+on.getCanonicalName());
// mbs.addNotificationListener(on, new SWBNotificationListener(), null, null);
// System.out.println("....... "+on.getCanonicalKeyPropertyListString());
// //mbs.addNotificationListener(new ObjectName("java.lang:name=ConcurrentMarkSweep,type=GarbageCollector"),new SWBNotificationListener(),null, null);
// // mbs.addNotificationListener(new ObjectName("java.lang:name=ParNew,type=GarbageCollector"),new SWBNotificationListener(),null, null);
//
// } catch (Exception e) {
// // e.printStackTrace();
// }
// }
// System.out.println("Ok.......");
}
/**
* _run.
*/
private void _run()
{
if (buffer.size() == max)
{
buffer.remove(0);
}
SWBMonitorData data = new SWBMonitorData(monitorbeans);
buffer.add(data);
AdminAlert aa = AdminAlert.ClassMgr.getAdminAlert("1", SWBContext.getAdminWebSite());
if(aa!=null && alertOn!=aa.isAlertSistemStatus())
{
setAlertParameter(aa);
}
if (alertOn) {
if (cnt>29){// System.out.println("Page Cache: "+Distributor.isPageCache());
if (alerted_CPU>0)alerted_CPU--;
if (alerted_PPS>0)alerted_PPS--;
if (alerted_TIME>0)alerted_TIME--;
Vector vec = SWBPortal.getMonitor().getMonitorRecords();
pps = (vec.get(vec.size()-1).getHits()-vec.get(vec.size()-2).getHits())/
SWBPortal.getMonitor().getDelay();
//System.out.println("MAX_SIZE:"+MAX_SIZE);
//System.out.println("UP_LIMIT:"+UP_LIMIT);
//System.out.println("THRESHOLD_PPS:"+THRESHOLD_PPS);
//System.out.println("pps:"+pps);
if (Distributor.isPageCache()) {
if (ppsMAX_SIZE){
pages.poll();
}
Float cpu = data.instantCPU;
uso.add(cpu);
if (uso.size()>MAX_SIZE){
uso.poll();
}
long ltiempos = -1;
Vector vmr = SWBPortal.getMonitor().getAverageMonitorRecords(10);
if (vmr.size()>0){
ltiempos=vmr.lastElement().getHitsTime();
tiempos.add(ltiempos);
}
if (tiempos.size()>MAX_SIZE){
tiempos.poll();
}
Iterator iter = vmr.iterator();
int oCPU=0;
for (Float ct:uso){
if (ct>THRESHOLD_CPU) oCPU++;
}
int oTime=0;
for (Long ct:tiempos){
if (ct>THRESHOLD_TIME) oTime++;
}
int oPages=0;
for (Long ct:pages){
if (ct>THRESHOLD_PPS) oPages++;
}
//System.out.println("oPages:"+oPages);
//System.out.println("oCPU:"+oCPU);
//System.out.println("oTime:"+oTime);
if (UP_LIMITProcessing...");
// try{
// if (null!=mvm){
if (null == summary)
{
summary = new SWBSummary();//mvm);
}
out.println(summary.getSample().GetSumaryHTML());
// List list = mvm.findByPattern("");
// Iterator itl = list.iterator();
// while(itl.hasNext()){
// sun.jvmstat.monitor.Monitor m = (sun.jvmstat.monitor.Monitor)itl.next();
//
// System.out.println("Monitor Name:"+m.getName());
// System.out.println("Monitor BaseName:"+m.getBaseName());
// //System.out.println("Monitor:"+m.);
// System.out.println("Units:"+m.getUnits());
// System.out.println("Value:"+m.getValue());
// }
// }
// } catch (Exception e){e.printStackTrace();}
out.print("" + SWBThreadDumper.dumpDeathLock() + "
");
out.print("" + SWBThreadDumper.dumpBLOCKEDThreadWithStackTrace() + "
");
out.print("" + SWBGCDump.getVerboseGc() + "
");
// doMonitor();
// ThreadMXBean thbean = java.lang.management.ManagementFactory.getThreadMXBean();
// if (thbean.isThreadContentionMonitoringSupported())
// {
// thbean.setThreadContentionMonitoringEnabled(true);
// long[] tiarr = thbean.findMonitorDeadlockedThreads();
// if (null != tiarr)
// {
// System.out.println("DeathLock!");
// for (long ct : tiarr)
// {
// printThreadInfo(thbean.getThreadInfo(ct));
// }
// }
// System.out.println("ThreadDump");
// tiarr = thbean.getAllThreadIds();
// for (long ct : tiarr)
// {
// printThreadInfo(thbean.getThreadInfo(ct));
// }
//
// }
out.print("