Planificateur intégré

Appel de services à des intervalles prédéfinis

Aucune programmation n'est nécessaire pour recevoir les messages du planificateur intégré. Créez une nouvelle définition de tâche dans Dashboard et un service donné sera invoqué à chaque fois que son exécution est programmée. Toutes les données supplémentaires fournies dans la définition d'un travail seront disponibles pour le service dans self.request.raw_request.

# -*- coding: utf-8 -*-

# Zato
from zato.server.service import Service

class MyService(Service):

    def handle(self):
        self.logger.info('Message received: %s', self.request.raw_request)

Planification de tâches ponctuelles en Python

Utilisez l'API pratique ci-dessous pour planifier des tâches ponctuelles. Par exemple, dans cet exemple, nous planifions un autre service à invoquer à un moment précis.

Le paramètre "prefix" permet de retrouver facilement la tâche dans le tableau de bord et les logs.

# -*- coding: utf-8 -*-

# Zato
from zato.server.service import Service

class MyTarget(Service):

    def handle(self):
        self.logger.warn('I was invoked with %s', self.request.input)

class Scheduler(Service):

    def handle(self):

        # This can be used to make it easier to understand which scheduled job is which
        prefix = 'user@example.com'

        # This is what the target service is going to receive on input
        data = {
            'my.key': 'my.value'
        }

        # This is when the job should start, note that the time must be in UTC
        start_date = '2027-07-29 11:35:49'

        # This is the call that schedules the job
        self.schedule.onetime(self, MyTarget, prefix=prefix, start_date=start_date, data=data)

Planification d'autres jobs en Python

Invoquez le service intégré zato.scheduler.job.create pour planifier des tâches basées sur des intervalles ou de type cron.

# stdlib
from datetime import datetime

# Zato
from zato.server.service import Service

class MyService(Service):

    def handle(self):

        #
        # We schedule a cron-style job here that will run once per hour (@hourly)
        #

        request = {
            'cluster_id': self.server.cluster_id,
            'name': 'my-job-1',
            'is_active': True,
            'service': 'zato.ping',
            'job_type': 'cron_style',
            'start_date': datetime.utcnow().isoformat(), # Always in UTC
            'cron_definition': '@hourly'
        }

        self.invoke('zato.scheduler.job.create', request)

Sujets connexes