Reset app traces if no activity was found since last save
This commit is contained in:
parent
8d1369ee02
commit
9a0d56d6d3
|
|
@ -66,4 +66,13 @@ interface StatisticsCollector
|
|||
* @return PromiseInterface[\BeyondCode\LaravelWebSockets\Statistics\Statistic|null]
|
||||
*/
|
||||
public function getAppStatistics($appId): PromiseInterface;
|
||||
|
||||
/**
|
||||
* Remove all app traces from the database if no connections have been set
|
||||
* in the meanwhile since last save.
|
||||
*
|
||||
* @param string|int $appId
|
||||
* @return void
|
||||
*/
|
||||
public function resetAppTraces($appId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -92,6 +92,12 @@ class MemoryCollector implements StatisticsCollector
|
|||
continue;
|
||||
}
|
||||
|
||||
if ($statistic->shouldHaveTracesRemoved()) {
|
||||
$this->resetAppTraces($appId);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
$this->createRecord($statistic, $appId);
|
||||
|
||||
$this->channelManager->getGlobalConnectionsCount($appId)->then(function ($connections) use ($statistic) {
|
||||
|
|
@ -136,6 +142,18 @@ class MemoryCollector implements StatisticsCollector
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove all app traces from the database if no connections have been set
|
||||
* in the meanwhile since last save.
|
||||
*
|
||||
* @param string|int $appId
|
||||
* @return void
|
||||
*/
|
||||
public function resetAppTraces($appId)
|
||||
{
|
||||
unset($this->statistics[$appId]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find or create a defined statistic for an app.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -161,6 +161,10 @@ class RedisCollector extends MemoryCollector
|
|||
$appId, Helpers::redisListToArray($list)
|
||||
);
|
||||
|
||||
if ($statistic->shouldHaveTracesRemoved()) {
|
||||
return $this->resetAppTraces($appId);
|
||||
}
|
||||
|
||||
$this->createRecord($statistic, $appId);
|
||||
|
||||
$this->channelManager
|
||||
|
|
@ -272,6 +276,8 @@ class RedisCollector extends MemoryCollector
|
|||
*/
|
||||
public function resetAppTraces($appId)
|
||||
{
|
||||
parent::resetAppTraces($appId);
|
||||
|
||||
$this->channelManager->getPublishClient()->hdel(
|
||||
$this->channelManager->getRedisKey($appId, null, ['stats']),
|
||||
'current_connections_count'
|
||||
|
|
|
|||
|
|
@ -183,6 +183,18 @@ class Statistic
|
|||
$this->apiMessagesCount = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the current statistic entry is empty. This means
|
||||
* that the statistic entry can be easily deleted if no activity
|
||||
* occured for a while.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function shouldHaveTracesRemoved(): bool
|
||||
{
|
||||
return $this->currentConnectionsCount === 0 && $this->peakConnectionsCount === 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transform the statistic to array.
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in New Issue