diff --git a/src/cli/CronJobs/UsersCronJob.php b/src/cli/CronJobs/UsersCronJob.php index 974caa68..761b224d 100644 --- a/src/cli/CronJobs/UsersCronJob.php +++ b/src/cli/CronJobs/UsersCronJob.php @@ -218,7 +218,9 @@ class UsersCronJob implements CommandInterface { if (SettingsManager::getAll()['redis_handler']) { $rRedisDelete = array('line' => array(), 'server' => array(), 'server_lines' => array(), 'proxy' => array(), 'stream' => array(), 'uuid' => array(), 'count' => 0); $rUsers = array(); - list($rKeys, $rConnections) = ConnectionTracker::getConnections(); + $rResult = ConnectionTracker::getConnections(); + $rKeys = $rResult[0] ?? []; + $rConnections = $rResult[1] ?? []; $i = 0; for ($rSize = count($rConnections); $i < $rSize; $i++) { diff --git a/src/domain/Stream/ConnectionTracker.php b/src/domain/Stream/ConnectionTracker.php index 7588afc9..1bb16847 100644 --- a/src/domain/Stream/ConnectionTracker.php +++ b/src/domain/Stream/ConnectionTracker.php @@ -34,7 +34,7 @@ class ConnectionTracker { $rSettings['split_by'] == 'guar_band'; } - if ($rSettings['redis_handler']) { + if ($rSettings['redis_handler'] && $rRedis) { $rRows = array(); $rMulti = $rRedis->multi(); foreach (array_keys($rServers) as $rServerID) { @@ -120,7 +120,7 @@ class ConnectionTracker { public static function getConnections(?int $rServerID = null, ?int $rUserID = null, ?int $rStreamID = null): array { global $rSettings, $db; $rRedis = RedisManager::instance(); - if ($rSettings['redis_handler']) { + if ($rSettings['redis_handler'] && $rRedis) { if ($rServerID) { $rKeys = $rRedis->zRangeByScore('SERVER#' . $rServerID, '-inf', '+inf'); } elseif ($rUserID) { @@ -234,6 +234,9 @@ class ConnectionTracker { */ public static function updateConnection(array $rData, array $rChanges = [], ?string $rOption = null): ?array { $rRedis = RedisManager::instance(); + if (!$rRedis) { + return null; + } $rOrigData = $rData; foreach ($rChanges as $rKey => $rValue) { $rData[$rKey] = $rValue; @@ -293,6 +296,9 @@ class ConnectionTracker { */ public static function redisSignal(int $rPID, int $rServerID, int $rRTMP, $rCustomData = null) { $rRedis = RedisManager::instance(); + if (!$rRedis) { + return false; + } $rKey = 'SIGNAL#' . md5($rServerID . '#' . $rPID . '#' . $rRTMP); $rData = array('pid' => $rPID, 'server_id' => $rServerID, 'rtmp' => $rRTMP, 'time' => time(), 'custom_data' => $rCustomData, 'key' => $rKey); return $rRedis->multi()->sAdd('SIGNALS#' . $rServerID, $rKey)->set($rKey, igbinary_serialize($rData))->exec(); @@ -310,6 +316,9 @@ class ConnectionTracker { */ public static function getUserConnections(array $rUserIDs, bool $rCount = false, bool $rKeysOnly = false): array { $rRedis = RedisManager::instance(); + if (!$rRedis) { + return []; + } $rMulti = $rRedis->multi(); foreach ($rUserIDs as $rUserID) { $rMulti->zRevRangeByScore('LINE#' . $rUserID, '+inf', '-inf'); @@ -354,6 +363,9 @@ class ConnectionTracker { */ public static function getServerConnections(array $rServerIDs, bool $rProxy = false, bool $rCount = false, bool $rKeysOnly = false): array { $rRedis = RedisManager::instance(); + if (!$rRedis) { + return []; + } $rMulti = $rRedis->multi(); foreach ($rServerIDs as $rServerID) { $rMulti->zRevRangeByScore(($rProxy ? 'PROXY#' . $rServerID : 'SERVER#' . $rServerID), '+inf', '-inf'); @@ -395,6 +407,9 @@ class ConnectionTracker { */ public static function getFirstConnection(array $rUserIDs): array { $rRedis = RedisManager::instance(); + if (!$rRedis) { + return []; + } $rMulti = $rRedis->multi(); foreach ($rUserIDs as $rUserID) { $rMulti->zRevRangeByScore('LINE#' . $rUserID, '+inf', '-inf', array('limit' => array(0, 1))); @@ -431,6 +446,9 @@ class ConnectionTracker { */ public static function getStreamConnections(array $rStreamIDs, bool $rGroup = true, bool $rCount = false): array { $rRedis = RedisManager::instance(); + if (!$rRedis) { + return []; + } $rMulti = $rRedis->multi(); foreach ($rStreamIDs as $rStreamID) { $rMulti->zRevRangeByScore('STREAM#' . $rStreamID, '+inf', '-inf'); @@ -479,6 +497,9 @@ class ConnectionTracker { */ public static function getRedisConnections(?int $rUserID = null, ?int $rServerID = null, ?int $rStreamID = null, bool $rOpenOnly = false, bool $rCountOnly = false, bool $rGroup = true, bool $rHLSOnly = false): array { $rRedis = RedisManager::instance(); + if (!$rRedis) { + return ($rCountOnly ? array(0, 0) : array()); + } $rReturn = ($rCountOnly ? array(0, 0) : array()); $rUniqueUsers = array(); $rUserID = (0 < intval($rUserID) ? intval($rUserID) : null); @@ -554,6 +575,9 @@ class ConnectionTracker { */ public static function createConnection(array $rData) { $rRedis = RedisManager::instance(); + if (!$rRedis) { + return false; + } $rMulti = $rRedis->multi(); $rMulti->zAdd('LINE#' . $rData['identity'], $rData['date_start'], $rData['uuid']); $rMulti->zAdd('LINE_ALL#' . $rData['identity'], $rData['date_start'], $rData['uuid']); @@ -581,6 +605,9 @@ class ConnectionTracker { */ public static function getLineConnections(int $rUserID, bool $rActive = false, bool $rKeys = false): array { $rRedis = RedisManager::instance(); + if (!$rRedis) { + return []; + } $rKeys = $rRedis->zRangeByScore((($rActive ? 'LINE#' : 'LINE_ALL#')) . $rUserID, '-inf', '+inf'); if ($rKeys) { return $rKeys; @@ -600,6 +627,9 @@ class ConnectionTracker { */ public static function getEnded(): array { $rRedis = RedisManager::instance(); + if (!$rRedis) { + return []; + } $rKeys = $rRedis->sMembers('ENDED'); if (0 >= count($rKeys)) { return array(); @@ -645,6 +675,9 @@ class ConnectionTracker { RedisManager::ensureConnected(); } $rRedisObj = RedisManager::instance(); + if (!$rRedisObj && $rSettings['redis_handler']) { + return false; + } if (is_array($rActivityInfo)) { } else { if (!$rSettings['redis_handler']) { diff --git a/src/public/Views/admin/table.php b/src/public/Views/admin/table.php index f4f0d958..8f9da0a0 100644 --- a/src/public/Views/admin/table.php +++ b/src/public/Views/admin/table.php @@ -1262,7 +1262,7 @@ if ($rType == "lines") { if ($rSettings["streams_grouped"] == 1) { $rFailRow = $rFails[$rRow['id']] ?? []; } else { - $rFailRow = $rFailsPS[$rRow["id"]][$rRow["server_id"]]; + $rFailRow = $rFailsPS[$rRow["id"]][$rRow["server_id"]] ?? []; } if (!$rFailRow) { $rFailRow = [0, 0]; @@ -2455,6 +2455,10 @@ if ($rType == "lines") { $rRows = []; if (SettingsManager::getAll()["redis_handler"]) { $rRedis = RedisManager::instance(); + if (!$rRedis) { + echo json_encode(["draw" => intval(RequestManager::getAll()["draw"] ?? 0), "recordsTotal" => 0, "recordsFiltered" => 0, "data" => []]); + exit; + } $rOrderDirection = strtolower(RequestManager::getAll()["order"][0]["dir"]) === "desc" ? false : true; $rFilterBefore = true; if (isset(RequestManager::getAll()["refresh"])) {