Skip to content

Instantly share code, notes, and snippets.

@sammso
Forked from mikakoivisto/listCacheMBeanInfo.js
Last active June 19, 2018 17:03
Show Gist options
  • Save sammso/23740d06006a6dffb967692f16f9c727 to your computer and use it in GitHub Desktop.
Save sammso/23740d06006a6dffb967692f16f9c727 to your computer and use it in GitHub Desktop.
/**
* *********************************************************************************************************
*
* Usage:
*
* Run this Script Lifeay 6.2 's scripting console to trouble shot caches
*
* variable MIN_MISS_PERCENTAGE you can limit that itdoes not pring caches that fill rate is low.
* variable PRINT_SQL set this true if you want to print SQL statement ready to be inserted
* variable NODE_NAME is the node name for printSQL statement.
*
CREATE TABLE CacheSizes (
node VARCHAR(12) NOT NULL,
cacheType VARCHAR(12) NOT NULL,
bean VARCHAR(255) NOT NULL,
objectCount INT NOT NULL,
cacheHits INT NOT NULL,
cacheMisses INT NOT NULL,
cacheMissPercentage INT NOT NULL,
PRIMARY KEY ( node, cacheType, bean )
);
*
* See variables below:
**/
var MIN_MISS_PERCENTAGE = 0;
var NODE_NAME="node1";
var PRINT_SQL=false;
/**
* *********************************************************************************************************
*/
var fields = [ "CacheType", ".Bean", "ObjectCount", "CacheHits", "CacheMisses", "CacheMissPercentage" ];
var padding30 = Array(30).join(' '), padding12 = Array(12).join(' '), padding20 = Array(20).join(' ');
var platformMBeanServer = Packages.java.lang.management.ManagementFactory.getPlatformMBeanServer();
function printInColumns(values, isHeader) {
var beanName = values[1], cacheType = values[0].slice(0, 9), objectCount = values[2], cacheHits = values[3], cacheMisses = values[4], cacheMissPercentage = values[5];
if (PRINT_SQL) {
if (isHeader) return;
out.println("INSERT INTO CacheSizes VALUES (\"" + NODE_NAME + "\",\"" + cacheType + "\",\"" + beanName + "\"," + objectCount + "," + cacheHits + "," + cacheMisses + "," + cacheMissPercentage + ");");
}
else {
out.println(values[0].slice(0, 9) + " "
+ (beanName.slice(beanName.lastIndexOf('.') + 1) + padding30).slice(0, 30)
+ (padding12 + values[2]).slice(-12)
+ (padding12 + values[3]).slice(-12)
+ (padding12 + values[4]).slice(-12)
+ (padding20 + values[5]).slice(-20)
+ " " + beanName);
}
}
function liferayStatisticBeans() {
var result = [];
var names = platformMBeanServer.queryNames(new Packages.javax.management.ObjectName("net.sf.ehcache:*"), null);
for (var iterator = names.iterator(); iterator.hasNext(); ) {
var name = iterator.next();
if (name.getCanonicalName().endsWith("CacheStatistics")) {
result[result.length] = name;
}
}
return result;
}
function displayLiferayCaches(names) {
printInColumns(fields,true);
for (var x = 0; x < names.length; x++) {
var cachesStats = [];
if (names[x].getCanonicalName().startsWith("net.sf.ehcache:CacheManager=net.sf.ehcache.CacheManager")) {
continue;
}
var object = platformMBeanServer.getAttribute(names[x], fields[5]);
var misspercentage = Packages.java.lang.Math.round(object.doubleValue() * 100);;
if (misspercentage >= MIN_MISS_PERCENTAGE) {
cachesStats[5] = misspercentage;
var name = names[x].getCanonicalName().slice("net.sf.ehcache:CacheManager=".length);
cachesStats[0] = name.slice(0, name.indexOf(','));
var cacheBean = name.slice(name.indexOf(",name=") + 6);
cachesStats[1] = cacheBean.slice(0, cacheBean.length - ",type=CacheStatistics".length);
for (var i = 2; i < 5 ; i++) {
var object = platformMBeanServer.getAttribute(names[x], fields[i]);
if (object instanceof Packages.java.lang.Double) {
cachesStats[i] = Packages.java.lang.Math.round(object.doubleValue() * 100);
} else {
cachesStats[i] = object;
}
}
printInColumns(cachesStats,false);
}
}
}
var names = liferayStatisticBeans();
if (names.length > 0) {
displayLiferayCaches(names);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment