- Installed extension count update
-
Update the counter of installed extensions
- 0 0 0 * * ?
- Ce script est le code qui sera exécuté lorsque le traitement sera lancé par le planificateur. Il doit être écrit en Groovy. L'API XWiki est accessible via les variables "xwiki" et "context".
- import groovy.json.JsonOutput;
def updateCount(extensionId, documentName) {
query = [
'query': [
'query_string' : [
'lowercase_expanded_terms' : false,
'query' : "_timestamp:[now-1d TO *] AND extensions.id:\"$extensionId\""
]
],
'aggs': [
'instanceId_count': [
'cardinality': [
'field': 'instanceId'
]
]
]
]
jsonQuery = JsonOutput.toJson(query)
result = services.activeinstalls.searchInstalls('install2', jsonQuery, ['search_type' : 'count'])
if (result) {
count = result.getAsJsonObject('aggregations').getAsJsonObject('instanceId_count').getAsJsonPrimitive('value').getAsLong()
// Get XWikiDocument
pxwiki = xwiki.getXWiki()
pxcontext = xcontext
document = pxwiki.getDocument(documentName, pxcontext)
extensionObject = document.getObject('ExtensionCode.ExtensionClass')
if (extensionObject.getLongValue('installedCount') != count && extensionObject.getIntValue('showInstalledCount') != 0) {
extensionObject.set('installedCount', count, pxcontext)
if (document.comment == 'Update install count') {
// Don't increment version (otherwise we could end up with a lot of those)
document.setMetaDataDirty(false)
document.setContentDirty(false)
}
// Save
pxwiki.saveDocument(document, 'Update install count', true, pxcontext)
}
} else if (services.activeinstalls.lastError) {
throw services.activeinstalls.lastError
}
}
def logger = org.slf4j.LoggerFactory.getLogger('ExtensionCode.UpdateInstalledExtensionCountScheduler')
logger.info('Starting updating installed extensions count')
def extensions = services.query.xwql("select doc.fullName, extension.id from Document doc, doc.object(ExtensionCode.ExtensionClass) as extension").execute()
for (extension in extensions)
{
logger.info('Updating installed extension [{}] count', extension[0])
try {
updateCount(extension[1], extension[0])
} catch (Exception e) {
logger.error('Failed to update installed count for extension [{}]', extension[0], e)
}
}
logger.info('Installed extensions count update is finished')