From da92c5e2be88769561cd96504bc7256fcf7cb5d1 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Thu, 19 Aug 2021 11:41:08 +0200 Subject: [PATCH 1/2] fix(realtime): proper permission handling for realtime stats --- app/realtime.php | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/app/realtime.php b/app/realtime.php index 7ed13f04c..9fb9f189f 100644 --- a/app/realtime.php +++ b/app/realtime.php @@ -88,23 +88,23 @@ $server->onWorkerStart(function (int $workerId) use ($server, $register, $stats, * Sending current connections to project channels on the console project every 5 seconds. */ if ($realtime->hasSubscriber('console', 'role:member', 'project')) { - $payload = []; foreach ($stats as $projectId => $value) { - $payload[$projectId] = $value['connectionsTotal']; + $payload = [ + 'projectId' => $value['connectionsTotal'] + ]; + $event = [ + 'project' => 'console', + 'roles' => ['team:'.$projectId], + 'data' => [ + 'event' => 'stats.connections', + 'channels' => ['project'], + 'timestamp' => time(), + 'payload' => $payload + ] + ]; + + $server->send($realtime->getSubscribers($event), json_encode($event['data'])); } - - $event = [ - 'project' => 'console', - 'roles' => ['role:member'], - 'data' => [ - 'event' => 'stats.connections', - 'channels' => ['project'], - 'timestamp' => time(), - 'payload' => $payload - ] - ]; - - $server->send($realtime->getSubscribers($event), json_encode($event['data'])); } /** * Sending test message for SDK E2E tests every 5 seconds. From 10cdb33585b68fca9bc6215974792fac9a88c64f Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Thu, 19 Aug 2021 12:14:19 +0200 Subject: [PATCH 2/2] fix permission handling for stats --- app/realtime.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/app/realtime.php b/app/realtime.php index 9fb9f189f..ea0e5a5f7 100644 --- a/app/realtime.php +++ b/app/realtime.php @@ -34,6 +34,7 @@ $connections = []; $stats = new Table(4096, 1); $stats->column('projectId', Table::TYPE_STRING, 64); +$stats->column('teamId', Table::TYPE_STRING, 64); $stats->column('connections', Table::TYPE_INT); $stats->column('connectionsTotal', Table::TYPE_INT); $stats->column('messages', Table::TYPE_INT); @@ -64,7 +65,6 @@ $server->onStart(function () use ($stats) { ->setParam('networkResponseSize', 0); $stats->set($projectId, [ - 'projectId' => $projectId, 'messages' => 0, 'connections' => 0 ]); @@ -90,11 +90,11 @@ $server->onWorkerStart(function (int $workerId) use ($server, $register, $stats, if ($realtime->hasSubscriber('console', 'role:member', 'project')) { foreach ($stats as $projectId => $value) { $payload = [ - 'projectId' => $value['connectionsTotal'] + $projectId => $value['connectionsTotal'] ]; $event = [ 'project' => 'console', - 'roles' => ['team:'.$projectId], + 'roles' => ['team:'.$value['teamId']], 'data' => [ 'event' => 'stats.connections', 'channels' => ['project'], @@ -298,6 +298,10 @@ $server->onOpen(function (int $connection, SwooleRequest $request) use ($server, $server->send([$connection], json_encode($channels)); + $stats->set($project->getId(), [ + 'projectId' => $project->getId(), + 'teamId' => $project->getAttribute('teamId') + ]); $stats->incr($project->getId(), 'connections'); $stats->incr($project->getId(), 'connectionsTotal'); } catch (\Throwable $th) {