Skip to content

Instantly share code, notes, and snippets.

@chetanmeh
Last active December 26, 2015 02:49
Show Gist options
  • Save chetanmeh/7081328 to your computer and use it in GitHub Desktop.
Save chetanmeh/7081328 to your computer and use it in GitHub Desktop.
Details about various JCR Listeners registered on an Adobe CQ instance.
import groovy.text.SimpleTemplateEngine
import org.osgi.framework.FrameworkUtil
import org.apache.jackrabbit.commons.observation.ListenerTracker
def services = osgi.getServices(org.apache.jackrabbit.api.jmx.EventListenerMBean.class,"(jmx.objectname=*)")
trackerToSessionMap = getListnerToSessionMap()
def listeners = services.collect { getDetails(it) }
def allListeners = listeners
listeners = listeners.findAll {it.class != 'org.apache.sling.installer.provider.jcr.impl.WatchedFolder'}
listeners = listeners.sort {it.path}
listeners.eachWithIndex{l,i -> l.index = i+1}
def ttf = new TemplateFactory()
ttf.columns = [
[name:"index",displayName:"Index",size:4],
[name:"path",displayName:"Path",size:45],
[name:"class",displayName:"Listener Registering Class",size:80],
[name:"nodeTypes",displayName:"Node Types",size:30],
[name:"userId",displayName:"User ID",size:10],
[name:"bundle",displayName:"Owning Bundle",size:50],
]
println "Number of listeners ${allListeners.size()}"
println new SimpleTemplateEngine().createTemplate(ttf.template).make([rows:listeners]).toString()
//Aggreegate the paths
filters = new TreeMap().withDefault {0}
listeners.each {filters[it.path]++}
def listenersPerPath = []
filters.each{k,v -> listenersPerPath << [count:v,path:k]}
listenersPerPath = listenersPerPath.sort {it.count}
def ttf2 = new TemplateFactory()
ttf2.columns = [
[name:"count",displayName:"Count",size:4],
[name:"path",displayName:"Path",size:45],
]
println "Number of unique paths ${listenersPerPath.size()}"
println new SimpleTemplateEngine().createTemplate(ttf2.template).make([rows:listenersPerPath]).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 ? "//*" : "/*")
def nodeTypes = tracker.nodeTypeName?.join(',') ?: ""
def userId = trackerToSessionMap[tracker['this$0']].authInfo.userID
def listenerField = ListenerTracker.class.getDeclaredField('listener')
listenerField.accessible = true
def bundle = FrameworkUtil.getBundle(listenerField.get(tracker['this$0']).getClass())
return [path:path, 'class':frame.className, nodeTypes:nodeTypes,userId:userId,bundle:bundle.symbolicName]
}
def getListnerToSessionMap(){
def observers = osgi.getServices(org.apache.jackrabbit.oak.spi.commit.Observer.class,"(objectClass=*)")
def result = [:] // ListnerTracker => ContentSession
observers.each {cp -> result[cp.tracker] = cp.contentSession}
println result
return result
}
class TemplateFactory {
def columns = []
def getTemplate() { """
${columns.collect{ " <%print \"$it.displayName\".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()}
<% } %>"""
}
}
Below are details about various JCR listeners (excluding the ones which are registered by Sling JCR Installer)
Number of listeners 57
Index Path Listener Registering Class Node Types UserID Owning Bundle
____ ________________________________________ ___________________________________________________________________________ ______________________________ ______ __________________________________________________
1 //* org.apache.sling.installer.provider.jcr.impl.JcrInstaller$StoppableThread admin org.apache.sling.installer.provider.jcr
2 ///* org.apache.sling.installer.provider.jcr.impl.JcrInstaller$StoppableThread admin org.apache.sling.installer.provider.jcr
3 ///* com.day.cq.security.impl.privileges.SessionHelper admin com.day.cq.cq-security
4 ///* com.day.cq.wcm.msm.impl.BlueprintManagerFactoryImpl admin com.day.cq.wcm.cq-msm-core
5 ///* com.day.cq.personalization.impl.TargetedContentManagerImpl admin com.day.cq.cq-personalization
6 ///* com.adobe.cq.scheduled.exporter.impl.ScheduledExporterImpl cq:ExporterConfig admin com.adobe.cq.cq-scheduled-exporter
7 ///* com.day.cq.security.impl.privileges.SessionHelper admin com.day.cq.cq-security
8 ///* com.day.cq.polling.importer.impl.PollingImporterImpl cq:PollConfig admin com.day.cq.cq-polling-importer
9 ///* com.day.cq.analytics.sitecatalyst.impl.servlets.PropertiesServlet admin com.day.cq.cq-analytics
10 ///* com.day.cq.widget.impl.HtmlLibraryManagerImpl admin com.day.cq.cq-widgets
11 ///* com.day.cq.polling.importer.impl.PollingImporterImpl admin com.day.cq.cq-polling-importer
12 ///* org.apache.sling.jcr.resource.internal.JcrResourceListener admin org.apache.sling.jcr.resource
13 ///* com.day.cq.dam.core.impl.DamChangeEventListener admin com.day.cq.dam.cq-dam-core
14 ///* com.adobe.cq.scheduled.exporter.impl.ScheduledExporterImpl admin com.adobe.cq.cq-scheduled-exporter
15 ///* com.adobe.granite.workflow.core.launcher.WorkflowLauncherListener admin com.adobe.granite.workflow.core
16 ///* com.adobe.granite.workflow.core.collection.ResourceCollectionManagerListene admin com.adobe.granite.workflow.core
17 ///* com.day.cq.wcm.core.impl.components.ComponentCacheImpl admin com.day.cq.wcm.cq-wcm-core
18 ///* org.apache.sling.i18n.impl.JcrResourceBundleProvider mix:language,sling:Message admin org.apache.sling.i18n
19 ///* com.adobe.cq.commerce.impl.promotion.PromotionManagerImpl admin com.adobe.cq.commerce.cq-commerce-core
20 ///* com.day.cq.wcm.core.impl.event.RepositoryChangeEventListener admin com.day.cq.wcm.cq-wcm-core
21 ///* com.adobe.granite.workflow.core.payloadmap.PayloadMoveListener admin com.adobe.granite.workflow.core
22 /apps//* org.apache.sling.installer.provider.jcr.impl.RootFolderListener admin org.apache.sling.installer.provider.jcr
23 /apps//* com.day.cq.wcm.foundation.forms.impl.FormsManagerImpl admin com.day.cq.wcm.cq-wcm-foundation
24 /apps/foundation/components/primary//* com.day.cq.wcm.foundation.forms.impl.FormsManagerImpl admin com.day.cq.wcm.cq-wcm-foundation
25 /content//* com.day.cq.wcm.msm.impl.LiveCopyIndexImpl cq:LiveSyn
Number of unique paths 24
Count Path
____ _____________________________________________
1 //*
1 /apps/foundation/components/primary//*
1 /content/publications//*
1 /content/usergenerated/content///*
1 /etc//*
1 /etc/cloudservices/audiencemanager//*
1 /etc/cloudservices/facebookconnect//*
1 /etc/cloudservices/proxy/ids//*
1 /etc/cloudservices/twitterconnect//*
1 /etc/designs//*
1 /etc/msm/rolloutconfigs//*
1 /etc/replication//*
1 /etc/workflow///*
1 /etc/workflow/models//*
1 /libs/cq/linkchecker//*
1 /libs/foundation/components/primary//*
1 /var/linkchecker//*
2 /apps//*
2 /content/campaigns//*
2 /content/dam//*
2 /libs//*
6 /content//*
6 /content/usergenerated/content//*
20 ///*
All registered Listeners
Number of listeners 151
index path class
____ _____________________________________________ ____________________________________________________________________________________________________
1 //* org.apache.sling.installer.provider.jcr.impl.JcrInstaller$StoppableThread
2 ///* com.day.cq.security.impl.privileges.SessionHelper
3 ///* com.adobe.cq.scheduled.exporter.impl.ScheduledExporterImpl
4 ///* com.day.cq.analytics.sitecatalyst.impl.servlets.PropertiesServlet
5 ///* com.adobe.granite.workflow.core.payloadmap.PayloadMoveListener
6 ///* com.adobe.cq.scheduled.exporter.impl.ScheduledExporterImpl
7 ///* com.day.cq.wcm.core.impl.event.RepositoryChangeEventListener
8 ///* com.day.cq.security.impl.privileges.SessionHelper
9 ///* org.apache.sling.installer.provider.jcr.impl.JcrInstaller$StoppableThread
10 ///* org.apache.sling.jcr.resource.internal.JcrResourceListener
11 ///* com.day.cq.dam.core.impl.DamChangeEventListener
12 ///* com.adobe.granite.workflow.core.launcher.WorkflowLauncherListener
13 ///* com.day.cq.widget.impl.HtmlLibraryManagerImpl
14 ///* com.day.cq.wcm.core.impl.components.ComponentCacheImpl
15 ///* org.apache.sling.i18n.impl.JcrResourceBundleProvider
16 ///* com.adobe.cq.commerce.impl.promotion.PromotionManagerImpl
17 ///* com.day.cq.polling.importer.impl.PollingImporterImpl
18 ///* com.day.cq.polling.importer.impl.PollingImporterImpl
19 ///* com.day.cq.wcm.msm.impl.BlueprintManagerFactoryImpl
20 ///* com.adobe.granite.workflow.core.collection.ResourceCollectionManagerListener
21 ///* com.day.cq.personalization.impl.TargetedContentManagerImpl
22 /apps//* org.apache.sling.installer.provider.jcr.impl.RootFolderListener
23 /apps//* com.day.cq.wcm.foundation.forms.impl.FormsManagerImpl
24 /apps/foundation/components/primary//* com.day.cq.wcm.foundation.forms.impl.FormsManagerImpl
25 /apps/geometrixx-commons/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
26 /apps/geometrixx-media/config//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
27 /apps/geometrixx-outdoors/config//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
28 /apps/geometrixx/config//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
29 /apps/geometrixx/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
30 /apps/social/facebookprovider/config//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
31 /apps/social/messaging/config//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
32 /apps/social/twitterprovider/config//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
33 /apps/system/config//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
34 /content//* com.day.cq.wcm.foundation.impl.HierarchyModificationListenerImpl
35 /content//* com.adobe.cq.social.ugc.impl.LuceneUgcSearch
36 /content//* com.day.cq.wcm.msm.impl.LiveCopyIndexImpl
37 /content//* com.adobe.cq.social.ugc.impl.LuceneUgcSearch
38 /content//* com.day.cq.tagging.impl.JcrTagManagerFactoryImpl
39 /content//* com.day.cq.wcm.msm.impl.LiveCopyIndexImpl
40 /content/campaigns//* com.day.cq.wcm.designimporter.impl.CanvasPageActivationHandler
41 /content/campaigns//* com.day.cq.wcm.designimporter.CanvasPageActivationHandler
42 /content/dam//* com.day.cq.dam.core.impl.AssetMoveListener
43 /content/dam//* com.day.cq.dam.s7dam.common.S7damDamChangeEventListener
44 /content/publications//* com.adobe.cq.media.publishing.dps.impl.service.PublicationEventListener
45 /content/usergenerated/content//* com.adobe.cq.social.ugc.impl.LuceneUgcSearch
46 /content/usergenerated/content//* com.adobe.cq.social.ugc.impl.LuceneUgcSearch
47 /content/usergenerated/content//* com.adobe.cq.social.ugc.impl.LuceneUgcSearch
48 /content/usergenerated/content//* com.adobe.cq.social.ugc.impl.LuceneUgcSearch
49 /content/usergenerated/content//* com.adobe.cq.social.ugc.impl.LuceneUgcSearch
50 /content/usergenerated/content//* com.adobe.cq.social.ugc.impl.LuceneUgcSearch
51 /etc//* com.day.cq.wcm.core.impl.designer.DesignCacheImpl
52 /etc/cloudservices/audiencemanager//* com.adobe.cq.aam.AudienceManagerConfigListener
53 /etc/cloudservices/facebookconnect//* com.adobe.cq.social.connect.oauth.impl.FacebookProviderImpl
54 /etc/cloudservices/proxy/ids//* com.day.cq.dam.ids.impl.IDSPoolImpl
55 /etc/cloudservices/twitterconnect//* com.adobe.cq.social.connect.oauth.impl.TwitterProviderImpl
56 /etc/designs//* com.day.cq.theme.impl.RepositoryThemeRegistration
57 /etc/msm/rolloutconfigs//* com.day.cq.wcm.msm.impl.RolloutConfigManagerFactoryImpl
58 /etc/replication//* com.day.cq.replication.impl.ConfigManagerImpl
59 /etc/workflow///* com.adobe.granite.workflow.core.eventsupport.JcrToWorkflowEventService
60 /etc/workflow/models//* com.adobe.granite.workflow.core.model.WorkflowModelCacheImpl
61 /libs//* com.day.cq.wcm.foundation.forms.impl.FormsManagerImpl
62 /libs//* org.apache.sling.installer.provider.jcr.impl.RootFolderListener
63 /libs/commerce/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
64 /libs/connector/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
65 /libs/cq/activitystreams/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
66 /libs/cq/analytics/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
67 /libs/cq/apple/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
68 /libs/cq/chart/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
69 /libs/cq/cloudservices/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
70 /libs/cq/commons/config.author//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
71 /libs/cq/commons/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
72 /libs/cq/compat/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
73 /libs/cq/config//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
74 /libs/cq/core/config.author//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
75 /libs/cq/core/config//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
76 /libs/cq/dashboards/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
77 /libs/cq/healthcheck/config//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
78 /libs/cq/healthcheck/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
79 /libs/cq/history/config.author//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
80 /libs/cq/linkchecker//* com.day.cq.wcm.core.impl.LinkCheckerSettingsProviderImpl
81 /libs/cq/linkchecker/config.author//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
82 /libs/cq/linkchecker/config//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
83 /libs/cq/platform/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
84 /libs/cq/projects/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
85 /libs/cq/replication/config.author//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
86 /libs/cq/replication/config//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
87 /libs/cq/searchpromote/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
88 /libs/cq/security/config.author//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
89 /libs/cq/security/config//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
90 /libs/cq/tagging/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
91 /libs/cq/tagmanager/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
92 /libs/cq/ui/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
93 /libs/cq/workflow/config//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
94 /libs/dam/config.author//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
95 /libs/dam/config//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
96 /libs/dam/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
97 /libs/foundation/components/primary//* com.day.cq.wcm.foundation.forms.impl.FormsManagerImpl
98 /libs/foundation/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
99 /libs/granite/crxde/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
100 /libs/granite/monitoring/config//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
101 /libs/granite/offloading/config.author//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
102 /libs/granite/offloading/config//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
103 /libs/granite/workflow/config//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
104 /libs/launches/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
105 /libs/mac/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
106 /libs/mcm/exacttarget/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
107 /libs/mcm/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
108 /libs/mcm/salesforce/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
109 /libs/mcm/silverpop/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
110 /libs/media/articles/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
111 /libs/media/publishing/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
112 /libs/sling/config//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
113 /libs/sling/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
114 /libs/social/activitystreams/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
115 /libs/social/blog/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
116 /libs/social/calendar/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
117 /libs/social/commons/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
118 /libs/social/config//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
119 /libs/social/connect/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
120 /libs/social/forum/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
121 /libs/social/group/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
122 /libs/social/journal/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
123 /libs/social/messaging/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
124 /libs/social/moderation/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
125 /libs/social/qna/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
126 /libs/social/scoring/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
127 /libs/social/storage/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
128 /libs/social/tally/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
129 /libs/social/ugc/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
130 /libs/system/config.author//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
131 /libs/system/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
132 /libs/wcm/contentsync/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
133 /libs/wcm/core/config.author//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
134 /libs/wcm/core/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
135 /libs/wcm/designimporter/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
136 /libs/wcm/emulator/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
137 /libs/wcm/htl/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
138 /libs/wcm/launches/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
139 /libs/wcm/mobile/config.author//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
140 /libs/wcm/mobile/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
141 /libs/wcm/msm/config.author//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
142 /libs/wcm/msm/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
143 /libs/wcm/notification/config//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
144 /libs/wcm/notification/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
145 /libs/wcm/offline/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
146 /libs/wcm/siteimporter/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
147 /libs/wcm/taglib/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
148 /libs/wcm/undo/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
149 /libs/wcm/webservice-support/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
150 /libs/wcm/workflow/install//* org.apache.sling.installer.provider.jcr.impl.WatchedFolder
151 /var/linkchecker//* com.day.cq.rewriter.linkchecker.impl.LinkInfoStorageImpl
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment