The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Zing::Timer - Timer Process

ABSTRACT

Timer Process

SYNOPSIS

  package MyApp;

  use parent 'Zing::Timer';

  sub schedules {
    [
      # every ten minutes
      ['*/10 * * * *', ['tasks'], { do => 1 }],
    ]
  }

  package main;

  my $myapp = MyApp->new;

  # $myapp->execute;

DESCRIPTION

This package provides a Zing::Process which places pre-defined messages into message queues based on time-based scehdules. It supports minute-level resolution and functions similarly to a crontab (cron table).

INHERITS

This package inherits behaviors from:

Zing::Process

LIBRARIES

This package uses type constraints from:

Zing::Types

SCENARIOS

This package supports the following scenarios:

schedules

  # given: synopsis

  $myapp->schedules;

  # schedule structure
  # [$interval, $queues, $message, $adjustment]

  # predefined intervals

  # @annually is at 00:00 on day-of-month 1 in january
  # @daily is at 00:00 every day
  # @hourly is at minute 0 every hour
  # @minute is at every minute
  # @monthly is at 00:00 on day-of-month 1
  # @weekend is at 00:00 on saturday
  # @weekly is at 00:00 on monday
  # @yearly is at 00:00 on day-of-month 1 in january

  # other schedule examples

  # every minute
  # ['* * * * *', ['tasks'], { do => 1 }]

  # every hour (on the half hour)
  # ['30 * * * *', ['tasks'], { do => 1 }]

  # every 15th minute
  # ['*/15 * * * *', ['tasks'], { do => 1 }]

The schedules method is meant to be implemented by a subclass and is automatically invoked when the process is executed, it should return a list of schedules. A single schedule takes the form of [$interval, $queues, $message] where $interval is represented as a cron-expression or using one of the predefined interval name, e.g. @yearly, @annually, @monthly, @weekly, @weekend, @daily, @hourly, or @minute.

ATTRIBUTES

This package has the following attributes:

on_schedules

  on_schedules(Maybe[CodeRef])

This attribute is read-only, accepts (Maybe[CodeRef]) values, and is optional.

METHODS

This package implements the following methods:

schedules

  schedules(Any @args) : ArrayRef[Schedule]

The schedules method, when not overloaded, executes the callback in the "on_schedules" attribute and expects a list of crontab schedules to be processed.

schedules example #1
  my $timer = Zing::Timer->new(
    on_schedules => sub {
      [['@hourly', ['tasks'], { do => 1 }]]
    },
  );

  $timer->schedules;

AUTHOR

Al Newkirk, awncorp@cpan.org

LICENSE

Copyright (C) 2011-2019, Al Newkirk, et al.

This is free software; you can redistribute it and/or modify it under the terms of the The Apache License, Version 2.0, as elucidated in the "license file".

PROJECT

Wiki

Project

Initiatives

Milestones

Contributing

Issues