Name

global.XMLStats

Description

Called by the XMLStats java class. Additional XMLStats can be added here.

Script

var XMLStats = Class.create();

XMLStats.prototype = {
initialize : function(inc) {
    this.includes = inc.split(",");
    this.ArrayUtil = new ArrayUtil();
},

write: function() {
  if (this.ArrayUtil.contains(this.includes, "memory"))
      this.writeMemory();

  if (this.ArrayUtil.contains(this.includes, "jvm")) {
      this.writeJVM();
      this.writeGC();
  }
},

writeMemory: function() {
      try {
          var jserver = Packages.java.lang.management.ManagementFactory.getPlatformMBeanServer();
          var metaSpace  = Packages.java.lang.management.ManagementFactory.newPlatformMXBeanProxy(jserver, "java.lang:type=MemoryPool,name=Metaspace", Packages.java.lang.management.MemoryPoolMXBean);

          this.mw.createElement("system.memory_metaspace.max", parseInt(metaSpace.getUsage().getMax() / 1024 / 1024));
          this.mw.createElement("system.memory_metaspace.total", parseInt(metaSpace.getUsage().getCommitted() / 1024 / 1024));
          this.mw.createElement("system.memory_metaspace.in.use", parseInt(metaSpace.getUsage().getUsed() / 1024 / 1024));
      } catch (e) { } // we have no JMX stuff 
},

writeJVM: function() {
      try {
          this.mw.createElement("jvm.version", gs.getJavaVersion());
          var upTime = (new Packages.java.util.Date().getTime() - GlideServlet.getServlet().getStartTime().getTime());
          var friendlyJVMTime = new String(GlideDateUtil.getDateTimeString(parseInt(upTime/1000), false));
          this.mw.createElement("jvm.time", upTime);
          this.mw.createElement("jvm.time_friendly", friendlyJVMTime);
          this.mw.createElement("jvm.java_opts", this._getJavaOpts());

          var jserver = Packages.java.lang.management.ManagementFactory.getPlatformMBeanServer();
          var cpuTime = jserver.getAttribute(this._getObj("java.lang:type=OperatingSystem"), "ProcessCpuTime");
          cpuTime = cpuTime / (1000*1000);
          var friendlyCPU = new String(GlideDateUtil.getDateTimeString(parseInt(cpuTime / 1000), false));
          this.mw.createElement("jvm.cpu.time", cpuTime);
          this.mw.createElement("jvm.cpu.time_friendly", friendlyCPU);

          this.mw.createElement("jvm.cpu.count", GlideSystemUtil.getAvailableProcessors());

          var classLoading  = Packages.java.lang.management.ManagementFactory.newPlatformMXBeanProxy(jserver, "java.lang:type=ClassLoading", Packages.java.lang.management.ClassLoadingMXBean);
          this.mw.createElement("jvm.classes.loaded", classLoading.getLoadedClassCount());
          this.mw.createElement("jvm.classes.unloaded", classLoading.getUnloadedClassCount());
          this.mw.createElement("jvm.classes.verbose", classLoading.isVerbose());
      } catch (e) { } // we have no JMX stuff 
},

_getJavaOpts: function() {
    var javaopts = "";

    try {
        javaopts = jserver.getAttribute(this._getObj("java.lang:type=Runtime"), "InputArguments");
        javaopts = GlideStringUtil.join(javaopts, " ");
    } catch(e) {
        javaopts = GlideSystemUtil.getJavaOpts();
    }

    return javaopts;
},

writeGC: function() {
      this.mw.open("jvm.gc");
      try {
          var jserver = Packages.java.lang.management.ManagementFactory.getPlatformMBeanServer();
          var names = jserver.queryNames(null, null);
          var it = names.iterator();

          while(it.hasNext()) {
              var mbeanKey = it.next();
              mbeanKey = mbeanKey.toString();

              if (mbeanKey.indexOf("GarbageCollector") == -1)
                  continue;

              this._writeGCAttributes(jserver, mbeanKey);
          }
      } catch (e) { } // we have no JMX stuff 

      this.mw.close("jvm.gc");
},

_writeGCAttributes: function(jserver, mbeanKey) {
  var count = jserver.getAttribute(this._getObj(mbeanKey), "CollectionCount");
  var time = jserver.getAttribute(this._getObj(mbeanKey), "CollectionTime");

  var friendlyTime = new String(GlideDateUtil.getDateTimeString(parseInt(time / 1000), false));

  this.mw.open("gc");

  if (mbeanKey.indexOf('name=') > -1)
      mbeanKey = mbeanKey.substring(mbeanKey.indexOf('name=') + 5);

  this.mw.createElement("name", mbeanKey);

  var upTime = (new Packages.java.util.Date().getTime() - GlideServlet.getServlet().getStartTime().getTime());
  var upTimeMin = (upTime/1000)/60;
  var fiveMinutes = upTimeMin / 5;

  this.mw.createElement("run_count", count);
  this.mw.createElement("run_count_per_fivemin", this._formatNum(count/fiveMinutes));
  this.mw.createElement("run_time", time);
  this.mw.createElement("run_time_readable", friendlyTime);
  this.mw.createElement("avg_run_time", (time / count)/1000);

  this.mw.close("gc");
},

_getObj: function(name) {
    return new Packages.javax.management.ObjectName(name);
},

_formatNum: function(num) {
    return num.toFixed(3);
},

setMarkupWriter: function(mw) {
    this.mw = mw;
},

type: "XMLStats"
}

Sys ID

598ffb740a0a0b71003be6015f488253

Offical Documentation

Official Docs: