<?php declare(strict_types=1); namespace Xentral\Modules\SubscriptionCycle\Scheduler; use Xentral\Components\Database\Database; class TaskMutexService implements TaskMutexServiceInterface { /** @var Database $db */ private $db; /** * TaskMutexService constructor. * * @param Database $db */ public function __construct(Database $db) { $this->db = $db; } /** * @param string $parameter * @param bool $active */ public function setMutex(string $parameter, bool $active = true): void { $this->db->perform( 'UPDATE `prozessstarter` SET `mutex` = :mutex, `mutexcounter` = 0, `letzteausfuerhung` = NOW() WHERE `parameter` = :parameter AND `aktiv` = 1', ['mutex' => (int)$active, 'parameter' => $parameter] ); } /** * @param string $parameter * * @return bool */ public function isTaskInstanceRunning(string $parameter): bool { return (int)$this->db->fetchValue( 'SELECT COUNT(`id`) FROM `prozessstarter` WHERE `parameter` = :parameter AND `aktiv` = 1 AND `mutex` = 1', ['parameter' => $parameter] ) > 0; } }