Исходный код вики JMXCache
Редактировал(а) Dmitriy Rybakov 05.08.2025, 13:07
Скрыть последних авторов
| author | version | line-number | content |
|---|---|---|---|
| |
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}} |