deno icon indicating copy to clipboard operation
deno copied to clipboard

Feature Request: Enhance `Deno.cron` to Include Seconds in Cron Patterns

Open Hexagon opened this issue 1 year ago • 2 comments

Deno.cron uses the saffron crate for parsing cron patterns, which doesn't support seconds. I propose to include seconds in the cron pattern syntax. While not commonly available in "system cron", seconds is vital when dealing with in-application scheduling which Deno.cron is used for.

A list of possible use cases for second granularity scheduling with Deno.cron:

  • High-Frequency Data Collection
  • Rapid System Health Checks
  • Scheduled chat bot interaction
  • Real-Time Social Media Updates
  • IoT Device Communication
  • Time-Sensitive Alerts and Notifications

Example:

Deno.cron("example", "*/10 * 10,22 * * *", () => {
    console.log("This function will run every 10 seconds at 10AM and 10PM.");
});

Possible Solution:

I suggest checking out my drop in replacement for saffron called croner. This extends the existing cron pattern syntax to include seconds. It's designed to set seconds to 0 by default if omitted in a 5-part pattern, ensuring backward compatibility. It also include other improvements such as time-zone support and POSIX compatible cron syntax.

Hexagon avatar Dec 13 '23 20:12 Hexagon

From version 2.0.0, croner uses minute granularity by default, but can optionally enable seconds or require them by using the builder methods .with_seconds_optional() and .with_seconds_required(). Therefore, technically, second granularity could be an option for Deno.cron().

Hexagon avatar Dec 17 '23 00:12 Hexagon

This would be helpful for our use-case of tracking the connection status of our sensor network - we currently use setInterval to go through every 15 seconds and mark sensors that we haven't received a packet from recently as offline. However setInterval has it's own problems, one of which is clarity on how often it runs. Supporting seconds in Deno.cron would help with this.

There is also a good example of cron syntax that supports seconds here - just type in 6 *s. image

zadeviggers avatar Dec 20 '23 20:12 zadeviggers