]> source.dussan.org Git - nextcloud-server.git/commitdiff
feat: add command to send raw commands to redis 45880/head
authorRobin Appelman <robin@icewind.nl>
Fri, 14 Jun 2024 12:14:15 +0000 (14:14 +0200)
committerRobin Appelman <robin@icewind.nl>
Fri, 23 Aug 2024 13:14:15 +0000 (15:14 +0200)
Signed-off-by: Robin Appelman <robin@icewind.nl>
core/Command/Memcache/RedisCommand.php [new file with mode: 0644]
core/register_command.php
lib/composer/composer/autoload_classmap.php
lib/composer/composer/autoload_static.php

diff --git a/core/Command/Memcache/RedisCommand.php b/core/Command/Memcache/RedisCommand.php
new file mode 100644 (file)
index 0000000..4da627c
--- /dev/null
@@ -0,0 +1,56 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * SPDX-FileCopyrightText: 2024 Robin Appelman <robin@icewind.nl>
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+namespace OC\Core\Command\Memcache;
+
+use OC\Core\Command\Base;
+use OC\RedisFactory;
+use OCP\ICertificateManager;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class RedisCommand extends Base {
+       public function __construct(
+               protected ICertificateManager $certificateManager,
+               protected RedisFactory $redisFactory,
+       ) {
+               parent::__construct();
+       }
+
+       protected function configure(): void {
+               $this
+                       ->setName('memcache:redis:command')
+                       ->setDescription('Send raw redis command to the configured redis server')
+                       ->addArgument('redis-command', InputArgument::REQUIRED | InputArgument::IS_ARRAY, 'The command to run');
+               parent::configure();
+       }
+
+       protected function execute(InputInterface $input, OutputInterface $output): int {
+               $command = $input->getArgument('redis-command');
+               if (!$this->redisFactory->isAvailable()) {
+                       $output->writeln("<error>No redis server configured</error>");
+                       return 1;
+               }
+               try {
+                       $redis = $this->redisFactory->getInstance();
+               } catch (\Exception $e) {
+                       $output->writeln('Failed to connect to redis: ' . $e->getMessage());
+                       return 1;
+               }
+
+               $redis->setOption(\Redis::OPT_REPLY_LITERAL, true);
+               $result = $redis->rawCommand(...$command);
+               if ($result === false) {
+                       $output->writeln("<error>Redis command failed</error>");
+                       return 1;
+               }
+               $output->writeln($result);
+               return 0;
+       }
+}
index f898d91df70b4bf61240457e2c47224f8ab18d5f..5857c227fea676f8c7f0db569f3e8ab4a4f083b9 100644 (file)
@@ -147,6 +147,8 @@ if ($config->getSystemValueBool('installed', false)) {
 
        $application->add(Server::get(Command\TaskProcessing\ListCommand::class));
        $application->add(Server::get(Command\TaskProcessing\Statistics::class));
+
+       $application->add(Server::get(Command\Memcache\RedisCommand::class));
 } else {
        $application->add(Server::get(Command\Maintenance\Install::class));
 }
index eed05ce73d6c5c284a49503f32d2a5aee589c667..b786dcca6587705fbd6b441af25143594092cba6 100644 (file)
@@ -1202,6 +1202,7 @@ return array(
     'OC\\Core\\Command\\Maintenance\\RepairShareOwnership' => $baseDir . '/core/Command/Maintenance/RepairShareOwnership.php',
     'OC\\Core\\Command\\Maintenance\\UpdateHtaccess' => $baseDir . '/core/Command/Maintenance/UpdateHtaccess.php',
     'OC\\Core\\Command\\Maintenance\\UpdateTheme' => $baseDir . '/core/Command/Maintenance/UpdateTheme.php',
+    'OC\\Core\\Command\\Memcache\\RedisCommand' => $baseDir . '/core/Command/Memcache/RedisCommand.php',
     'OC\\Core\\Command\\Preview\\Generate' => $baseDir . '/core/Command/Preview/Generate.php',
     'OC\\Core\\Command\\Preview\\Repair' => $baseDir . '/core/Command/Preview/Repair.php',
     'OC\\Core\\Command\\Preview\\ResetRenderedTexts' => $baseDir . '/core/Command/Preview/ResetRenderedTexts.php',
index ac293dd7b36f395de035bc39418328d1541fe506..28c48ac6a760ee69e4ab1262b96add0f948c4be8 100644 (file)
@@ -1235,6 +1235,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
         'OC\\Core\\Command\\Maintenance\\RepairShareOwnership' => __DIR__ . '/../../..' . '/core/Command/Maintenance/RepairShareOwnership.php',
         'OC\\Core\\Command\\Maintenance\\UpdateHtaccess' => __DIR__ . '/../../..' . '/core/Command/Maintenance/UpdateHtaccess.php',
         'OC\\Core\\Command\\Maintenance\\UpdateTheme' => __DIR__ . '/../../..' . '/core/Command/Maintenance/UpdateTheme.php',
+        'OC\\Core\\Command\\Memcache\\RedisCommand' => __DIR__ . '/../../..' . '/core/Command/Memcache/RedisCommand.php',
         'OC\\Core\\Command\\Preview\\Generate' => __DIR__ . '/../../..' . '/core/Command/Preview/Generate.php',
         'OC\\Core\\Command\\Preview\\Repair' => __DIR__ . '/../../..' . '/core/Command/Preview/Repair.php',
         'OC\\Core\\Command\\Preview\\ResetRenderedTexts' => __DIR__ . '/../../..' . '/core/Command/Preview/ResetRenderedTexts.php',