diff options
author | Joas Schilling <coding@schilljs.com> | 2020-05-27 12:36:47 +0300 |
---|---|---|
committer | Joas Schilling <coding@schilljs.com> | 2020-05-27 17:20:40 +0300 |
commit | e7ee833c0dfa44b14eccc1ffd7ea922ec5b99460 (patch) | |
tree | 89a0709ebcbf1cc8405043a6121327cb2179397a /lib/Command/ActiveCalls.php | |
parent | 207d9eedb969bef939d346b27c15bfa8748212cf (diff) |
Add a command to detect active calls
Signed-off-by: Joas Schilling <coding@schilljs.com>
Diffstat (limited to 'lib/Command/ActiveCalls.php')
-rw-r--r-- | lib/Command/ActiveCalls.php | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/lib/Command/ActiveCalls.php b/lib/Command/ActiveCalls.php new file mode 100644 index 000000000..8a1b5f4f1 --- /dev/null +++ b/lib/Command/ActiveCalls.php @@ -0,0 +1,83 @@ +<?php + +declare(strict_types=1); +/** + * @copyright Copyright (c) 2020 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Talk\Command; + +use OC\Core\Command\Base; +use OCA\Talk\Manager; +use OCA\Talk\Participant; +use OCP\IDBConnection; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class ActiveCalls extends Base { + + /** @var IDBConnection */ + public $connection; + + /** @var Manager */ + public $manager; + + public function __construct(IDBConnection $connection) { + parent::__construct(); + + $this->connection = $connection; + } + + protected function configure(): void { + $this + ->setName('talk:active-calls') + ->setDescription('Allows you to check if calls are currently in process'); + } + + protected function execute(InputInterface $input, OutputInterface $output): ?int { + $query = $this->connection->getQueryBuilder(); + + $query->select($query->func()->count('*', 'num_calls')) + ->from('talk_rooms') + ->where($query->expr()->isNotNull('active_since')); + + $result = $query->execute(); + $numCalls = (int) $result->fetchColumn(); + $result->closeCursor(); + + if ($numCalls === 0) { + $output->writeln('<info>No calls in progress</info>'); + return 0; + } + + $query = $this->connection->getQueryBuilder(); + $query->select($query->func()->count('*', 'num_participants')) + ->from('talk_participants') + ->where($query->expr()->gt('in_call', $query->createNamedParameter(Participant::FLAG_DISCONNECTED))) + ->andWhere($query->expr()->neq('session_id', $query->createNamedParameter('0'))) + ->andWhere($query->expr()->gt('last_ping', $query->createNamedParameter(time() - 60))); + + $result = $query->execute(); + $numParticipants = (int) $result->fetchColumn(); + $result->closeCursor(); + + $output->writeln(sprintf('<error>There are currently %1$d calls in progress with %2$d participants</error>', $numCalls, $numParticipants)); + return 1; + } +} |