Skip to content

Commit

Permalink
Add RedisDriver for lock
Browse files Browse the repository at this point in the history
  • Loading branch information
mdevlamynck committed Mar 8, 2023
1 parent 6218b6a commit 87a5766
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 0 deletions.
82 changes: 82 additions & 0 deletions src/Infrastructure/Driver/RedisDriver.php
@@ -0,0 +1,82 @@
<?php

namespace RichId\MaintenanceBundle\Infrastructure\Driver;

use Lexik\Bundle\MaintenanceBundle\Drivers\AbstractDriver;
use Lexik\Bundle\MaintenanceBundle\Drivers\DriverTtlInterface;
use Symfony\Component\Cache\Traits\RedisTrait;

class RedisDriver extends AbstractDriver implements DriverTtlInterface
{
use RedisTrait;

const VALUE_TO_STORE = "maintenance";

/** @param array<string, mixed> $options */
public function __construct(array $options = array())
{
parent::__construct($options);

if (!isset($options['key_name'])) {
throw new \InvalidArgumentException('$options[\'key_name\'] must be defined if Driver Redis configuration is used');
}

if (!isset($options['redis_dsn'])) {
throw new \InvalidArgumentException('$options[\'redis_dsn\'] must be defined if Driver Redis configuration is used');
}

if (isset($options['ttl']) && !is_int($options['ttl'])) {
throw new \InvalidArgumentException('$options[\'ttl\'] should be an integer if Driver Redis configuration is used');
}

$this->redis = self::createConnection($options['redis_dsn']);
}

protected function createLock()
{
if (!isset($this->options['ttl']) || $this->options['ttl'] <= 0) {
return $this->redis->set($this->options['key_name'], self::VALUE_TO_STORE);
}

return $this->redis->setex($this->options['key_name'], $this->options['ttl'], self::VALUE_TO_STORE);
}

protected function createUnlock()
{
return $this->redis->del($this->options['key_name']) > 0;
}

public function isExists()
{
return $this->redis->exists($this->options['key_name']) > 0;
}

public function getMessageLock($resultTest)
{
$key = $resultTest ? 'lexik_maintenance.success_lock_redis' : 'lexik_maintenance.not_success_lock';

return $this->translator->trans($key, array(), 'maintenance');
}

public function getMessageUnlock($resultTest)
{
$key = $resultTest ? 'lexik_maintenance.success_unlock' : 'lexik_maintenance.not_success_unlock';

return $this->translator->trans($key, array(), 'maintenance');
}

public function setTtl($value): void
{
$this->options['ttl'] = $value;
}

public function getTtl()
{
return $this->options['ttl'];
}

public function hasTtl()
{
return isset($this->options['ttl']);
}
}
2 changes: 2 additions & 0 deletions src/Infrastructure/Resources/translations/maintenance.en.yml
Expand Up @@ -10,3 +10,5 @@ maintenance.maintenance: Maintenance
maintenance.website_lock: Site in maintenance
maintenance.website_lock_description: You are one of the authorized ip addresses
maintenance.website_lock_link: Administration

lexik_maintenance.success_lock_redis: Server is under maintenance with redis.
2 changes: 2 additions & 0 deletions src/Infrastructure/Resources/translations/maintenance.fr.yml
Expand Up @@ -10,3 +10,5 @@ maintenance.maintenance: Maintenance
maintenance.website_lock: Site en maintenance
maintenance.website_lock_link: Administration
maintenance.website_lock_description: Vous faite partie des IP autorisées

lexik_maintenance.success_lock_redis: Le serveur est en maintenance via le driver redis.

0 comments on commit 87a5766

Please sign in to comment.