Skip to content

Instantly share code, notes, and snippets.

@chetanmeh
Created October 17, 2013 10:54
Show Gist options
  • Save chetanmeh/7022907 to your computer and use it in GitHub Desktop.
Save chetanmeh/7022907 to your computer and use it in GitHub Desktop.
Script to get JCR Listeners registered within Sling
import groovy.text.SimpleTemplateEngine
def services = osgi.getServices(org.apache.jackrabbit.api.jmx.EventListenerMBean.class,"(jmx.objectname=*)")
def listeners = services.collect { getDetails(it) }
listeners = listeners.sort {it.path}
listeners.eachWithIndex{l,i -> l.index = i+1}
def ttf = new TemplateFactory()
ttf.addColumn("index",4).addColumn("path",45).addColumn("class",100)
println "Number of listeners ${listeners.size()}"
println new SimpleTemplateEngine().createTemplate(ttf.template).make([rows:listeners]).toString()
def getDetails(def tracker){
//Get refrence to parent class of inner class EventListenerMBean
def st = tracker['this$0'].initStackTrace
def frame = st.stackTrace[3]
def path = tracker.absPath + (tracker.deep ? "//*" : "/*")
return [path:path, 'class':frame.className]
}
class TemplateFactory {
def columns = []
def addColumn(name, size) { columns << [name:name, size:size]; this }
def getTemplate() { """
${columns.collect{ " <%print \"$it.name\".center($it.size)%> " }.join()}
${columns.collect{ " <%print \"_\"*$it.size %> " }.join()}
<% rows.each {%>${columns.collect{ " \${it.${it.name}.toString().padRight($it.size).substring(0,$it.size)} " }.join()}
<% } %>"""
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment