connection = $connection; $this->timeFactory = $timeFactory; } public function getSessionStatistics(): array { return [ 'last5minutes' => $this->getNumberOfActiveUsers(self::OFFSET_5MIN), 'last1hour' => $this->getNumberOfActiveUsers(self::OFFSET_1HOUR), 'last24hours' => $this->getNumberOfActiveUsers(self::OFFSET_1DAY), 'last7days' => $this->getNumberOfActiveUsers(self::OFFSET_7DAYS), 'last1month' => $this->getNumberOfActiveUsers(self::OFFSET_1MONTH), 'last3months' => $this->getNumberOfActiveUsers(self::OFFSET_3MONTHS), 'last6months' => $this->getNumberOfActiveUsers(self::OFFSET_6MONTHS), 'lastyear' => $this->getNumberOfActiveUsers(self::OFFSET_1YEAR), ]; } /** * get number of active user in a given time span * * @param int $offset seconds */ private function getNumberOfActiveUsers(int $offset): int { $queryBuilder = $this->connection->getQueryBuilder(); $queryBuilder->select($queryBuilder->func()->count('userid')) ->from('preferences') ->where($queryBuilder->expr()->eq('appid', $queryBuilder->createNamedParameter('login'))) ->andWhere($queryBuilder->expr()->eq('configkey', $queryBuilder->createNamedParameter('lastLogin'))) ->andwhere($queryBuilder->expr()->gte( $queryBuilder->expr()->castColumn('configvalue', IQueryBuilder::PARAM_INT), $queryBuilder->createNamedParameter($this->timeFactory->getTime() - $offset, IQueryBuilder::PARAM_INT), IQueryBuilder::PARAM_INT, )); $result = $queryBuilder->executeQuery(); $activeUsers = (int)$result->fetchOne(); $result->closeCursor(); return $activeUsers; } }