Scheduler

De SupraWiki

Predefinição:Velocity

    1. First, set a shortcut to our Scheduler plugin
  1. set ($scheduler = $xwiki.scheduler)
    1. If the sheet is called with an action ($request.do), let us first process this action
    2. Possible values are : "schedule", "pause", "resume", "unschedule", "delete"
  2. if ("$!request.do" != && "$!request.which" != )
 ##
 ## Obtain the Job document and object for which the action has been called
 ##
 #set ($tJobHolder = $request.which)
 #set ($jobDoc = $xwiki.getDocument($tJobHolder))
 #set ($jobObj = $jobDoc.getObject('XWiki.SchedulerJobClass'))
 #if ($request.do == 'schedule')
   ##
   ## Schedule a job
   ##
   #set ($ok = $scheduler.scheduleJob($jobObj))
   #if (!$ok)
     Predefinição:Error$xcontext.get('error')Predefinição:/error
   #else
     #set ($jobName = "$jobObj.get('jobName')")
     Predefinição:Info$services.localization.render('xe.scheduler.jobscheduled', [$jobName, $scheduler.getNextFireTime($jobObj)])Predefinição:/info
   #end
 #elseif ($request.do == 'pause')
   ##
   ## Pause a scheduled job
   ##
   #set ($ok = $scheduler.pauseJob($jobObj))
   #if (!$ok)
     Predefinição:Error$xcontext.get('error')Predefinição:/error
   #else
     Predefinição:Info$services.localization.render('xe.scheduler.paused', [$jobObj.get('jobName')])Predefinição:/info
   #end
 #elseif ($request.do == 'resume')
   ##
   ## Resume a paused job
   ##
   #set ($ok = $scheduler.resumeJob($jobObj))
   #if (!$ok)
     Predefinição:Error$xcontext.get('error')Predefinição:/error
   #else
     Predefinição:Info$services.localization.render('xe.scheduler.resumed', [$jobObj.get('jobName'), $scheduler.getNextFireTime($jobObj)])Predefinição:/info
   #end
 #elseif ($request.do == 'unschedule')
   ##
   ## Unschedule a scheduled job (paused or not)
   ##
   #set ($ok = $scheduler.unscheduleJob($jobObj))
   #if (!$ok)
     Predefinição:Error$xcontext.get('error')Predefinição:/error
   #else
     Predefinição:Info$services.localization.render('xe.scheduler.unscheduled', [$jobObj.get('jobName')])Predefinição:/info
   #end
 #elseif ($request.do == 'delete')
   ##
   ## Delete a job
   ## First unschedule it (if needed), then delete its document holder
   ##
   #set ($jobName = $jobObj.get('jobName'))
   #if ($jobObj.get('status') == 'Normal' || $jobObj.get('status') == 'Paused')
     #set ($ok = $scheduler.unscheduleJob($jobObj))
     #if ($ok)
       #set ($deleteRedirect = $xwiki.getURL($jobObj.getName(), 'delete'))
       $response.sendRedirect($deleteRedirect)
     #else
       Predefinição:Error$xcontext.get('error')Predefinição:/error
     #end
   #else
     #set ($deleteRedirect = $xwiki.getURL($jobObj.getName(), 'delete'))
     $response.sendRedirect($deleteRedirect))
   #end
 #elseif ($request.do == 'trigger')
   ##
   ## Trigger a job (execute it now)
   ##
   #set ($ok = $scheduler.triggerJob($jobObj))
   #if (!$ok)
     Predefinição:Error$xcontext.get('error')Predefinição:/error
   #else
     Predefinição:Info$services.localization.render('xe.scheduler.triggered', [$jobObj.get('jobName')])Predefinição:/info
   #end
 #end
  1. end

$services.localization.render('xe.scheduler.welcome')

$services.localization.render('xe.scheduler.jobs.list')

    1. Retrieve all scheduler jobs
    2. Display their name, status, possible next fire time, and available actions

|=(%scope="col"%)$services.localization.render('xe.scheduler.jobs.name')|=(%scope="col"%)$services.localization.render('xe.scheduler.jobs.status')|=(%scope="col"%)$services.localization.render('xe.scheduler.jobs.next')|=(%scope="col"%)$services.localization.render('xe.scheduler.jobs.actions')

  1. foreach ($docName in $services.query.xwql('from doc.object(XWiki.SchedulerJobClass) as jobs where doc.fullName <> XWiki.SchedulerJobTemplate').execute())
 #set ($actions = {})
 #set ($jobHolder = $xwiki.getDocument($docName))
 #set ($job = $jobHolder.getObject('XWiki.SchedulerJobClass'))
 #set ($status = $scheduler.getJobStatus($job).value)
 #if ($status == )
   #set ($status = 'None')
 #end
 #set ($firetime = )
 #if ($status != 'None')
   #set ($firetime = $scheduler.getNextFireTime($job))
 #else
   #set ($firetime = $services.localization.render('xe.scheduler.jobs.next.undefined'))
 #end
 #set ($ok = $!actions.put('trigger', $doc.getURL('view', "do=trigger&which=${jobHolder.fullName}")))
 #if ($status == 'None')
   #set ($ok = $!actions.put('schedule', $doc.getURL('view', "do=schedule&which=${jobHolder.fullName}")))
 #elseif($status == 'Normal')
   #set ($ok = $!actions.put('pause', $doc.getURL('view', "do=pause&which=${jobHolder.fullName}")))
   #set ($ok = $!actions.put('unschedule', $doc.getURL('view', "do=unschedule&which=${jobHolder.fullName}")))
 #elseif ($status == 'Paused')
   #set ($ok = $!actions.put('resume', $doc.getURL('view', "do=resume&which=${jobHolder.fullName}")))
   #set ($ok = $!actions.put('unschedule', $doc.getURL('view', "do=unschedule&which=${jobHolder.fullName}")))
 #end
 #set ($ok = $!actions.put('delete', $doc.getURL('view', "do=delete&which=${jobHolder.fullName}")))

|$job.get('jobName')|$status|$firetime|**$services.localization.render('xe.scheduler.jobs.actions.access')** [[$services.localization.render('xe.scheduler.jobs.actions.view')>>$jobHolder.fullName]]#if($jobHolder.hasAccessLevel('programming')) [[$services.localization.render('xe.scheduler.jobs.actions.edit')>>path:${jobHolder.getURL('edit')}]]#end **$services.localization.render('xe.scheduler.jobs.actions.manage')**#foreach($action in $actions.entrySet()) [[$services.localization.render("xe.scheduler.jobs.actions.${action.key}")>>path:${action.value}]]#end

  1. end
  2. if ($doc.hasAccessLevel('programming'))
    1. Job creation is offered only for programmers, because the job page needs to be saved
    2. with programming right for groovy jobs to be executed.
    3. However, this page should stay accessible to admins, that can manipulate existing jobs:
    4. schedule, pause, etc.

$services.localization.render('xe.scheduler.jobs.create')

    1. Form to create a new Job

Predefinição:Info$services.localization.render('xe.scheduler.jobs.explaincreate')Predefinição:/info

Predefinição:Html

<form action="$doc.getURL('create')" id="newdoc">

 <input type="hidden" name="form_token" value="$!{services.csrf.getToken()}" />
 <input type="hidden" name="parent" value="Scheduler.WebHome" />
 <input type="hidden" name="template" value="XWiki.SchedulerJobTemplate" />
 <input type="hidden" name="sheet" value="1" />
 <input type="hidden" name="space" value="Scheduler"/>
 <label class="hidden" for="page">$services.localization.render('xe.scheduler.jobs.create.nameTip')</label>
 <input id="page" name="page" size="30" type="text" class="withTip" value="$services.localization.render('xe.scheduler.jobs.create.nameTip')" />
 <input type="submit" class="btn btn-success button" value="$services.localization.render('xe.scheduler.jobs.create.submit')"/>

</form>

Predefinição:/html

  1. else
 Predefinição:Warning$services.localization.render('xe.scheduler.jobs.warning')Predefinição:/warning
  1. end

Predefinição:/velocity