0 Votes

UpdateInstalledExtensionCountScheduler

Version 38.1 par john le 2025/09/29 04:17

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')

Retour à la liste des traitements