Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ae996e8

Browse files
kbondvtsykun
andcommitted
[Scheduler] add JitterTrigger
Co-authored-by: Uladzimir Tsykun <[email protected]>
1 parent 6222f8e commit ae996e8

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

src/Symfony/Component/Scheduler/RecurringMessage.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Symfony\Component\Scheduler\Exception\InvalidArgumentException;
1515
use Symfony\Component\Scheduler\Trigger\CronExpressionTrigger;
1616
use Symfony\Component\Scheduler\Trigger\DateIntervalTrigger;
17+
use Symfony\Component\Scheduler\Trigger\JitterTrigger;
1718
use Symfony\Component\Scheduler\Trigger\TriggerInterface;
1819

1920
/**
@@ -59,6 +60,11 @@ public static function trigger(TriggerInterface $trigger, object $message): self
5960
return new self($trigger, $message);
6061
}
6162

63+
public function withJitter(int $value = 60): self
64+
{
65+
return new self(new JitterTrigger($this->trigger, $value), $this->message);
66+
}
67+
6268
public function getMessage(): object
6369
{
6470
return $this->message;
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Scheduler\Trigger;
13+
14+
/**
15+
* @author Kevin Bond <[email protected]>
16+
*/
17+
final class JitterTrigger implements TriggerInterface
18+
{
19+
/**
20+
* @param positive-int $value
21+
*/
22+
public function __construct(private readonly TriggerInterface $trigger, private readonly int $value = 60)
23+
{
24+
}
25+
26+
public function __toString(): string
27+
{
28+
return sprintf('%s with 0-%d second jitter', $this->trigger, $this->value);
29+
}
30+
31+
public function getNextRunDate(\DateTimeImmutable $run): ?\DateTimeImmutable
32+
{
33+
if (!$nextRun = $this->trigger->getNextRunDate($run)) {
34+
return null;
35+
}
36+
37+
return $nextRun->add(new \DateInterval(sprintf('PT%sS', random_int(0, $this->value))));
38+
}
39+
}

0 commit comments

Comments
 (0)