Исходный код вики JMXCache

Редактировал(а) Dmitriy Rybakov 05.08.2025, 13:07

Скрыть последних авторов
Dmitriy Rybakov 1.1 1 {{groovy}}
2 import java.lang.management.ManagementFactory;
3 import javax.management.MBeanServer;
4 import javax.management.ObjectName;
5 import groovy.jmx.GroovyMBean;
6
7 println """* [[Show cache info>>||queryString=""]]"""
8 println """* [[Show cache details>>||queryString="details=1"]]"""
9 println """* [[Confirm flush JMX only>>||queryString="confirm=1"]]"""
10 println """* [[Confirm flush JMX and xwiki flushCache>>||queryString="confirm=1&&flush=1"]]"""
11
12 if (!request.details) {
13 println "= Cache info ="
14 } else {
15 println "= Cache details ="
16 }
17
18 MBeanServer server = ManagementFactory.getPlatformMBeanServer();
19 def queryConfig = new ObjectName("org.xwiki.infinispan:component=Configuration,*")
20 def configNames = server.queryNames(queryConfig, null)
21 def sizes = [:]
22 configNames.each {
23 def mbean = new GroovyMBean(server, it)
24 def name = it.getKeyProperty('name')
25 sizes[name] = mbean.getProperty("evictionSize")
26 }
27
28 def query = new ObjectName("org.xwiki.infinispan:component=Statistics,*")
29 def names = server.queryNames(query, null)
30 names.each {
31 def mbean = new GroovyMBean(server, it)
32 def name = it.getKeyProperty('name')
33 if (request.details) {
34 println "== Cache: ${name} =="
35 println "evictionSize: ${sizes[name]}"
36 for(attr in mbean.listAttributeNames()) {
37 try {
38 println "* ${attr}: ${mbean.getProperty(attr)}"
39 } catch (Exception e) {
40 println "* ${attr}: (% style=\"color:red\"%)N/A(%%)"
41 }
42 }
43 } else {
44 def numberOfEntries = mbean.getProperty("numberOfEntries")
45 if (numberOfEntries == -1) {
46 numberOfEntries = mbean.getProperty("approximateEntries")
47 }
48 println "* ${name}: size: ${numberOfEntries}/${sizes[name]}"
49 }
50 }
51
52
53 if (request.confirm) {
54 println "= Flushing cache ="
55 query = new ObjectName("org.xwiki.infinispan:component=Cache,*")
56 names = server.queryNames(query, null)
57 names.each {
58 def mbean = new GroovyMBean(server, it)
59 try {
60 mbean.invokeMethod('clear', new Object[0])
61 println "* Cache: ${it.getKeyProperty('name')}: flushed"
62 } catch (e) {
63 println "* Cache: ${it.getKeyProperty('name')}: flush FAILED ${e.getMessage()}"
64 }
65 }
66 if (request.flush)
67 xwiki.flushCache()
68 println "Cache flushed"
69
70 println "= Cache info after flushing ="
71 query = new ObjectName("org.xwiki.infinispan:component=Statistics,*")
72 names = server.queryNames(query, null)
73 names.each {
74 def mbean = new GroovyMBean(server, it)
75 println "* Cache: ${it.getKeyProperty('name')}: ${mbean.getProperty("numberOfEntries")}"
76 }
77 } else {
78 println ""
79 println """[[Confirm flush JMX and xwiki caches>>||queryString="confirm=1"]]"""
80 }
81 {{/groovy}}