This commit is contained in:
freek 2018-12-04 00:00:35 +01:00
parent 6c96bb8edc
commit fd2203c8bb
4 changed files with 28 additions and 15 deletions

View File

@ -42,10 +42,19 @@ return [
*/ */
'max_request_size_in_kb' => 250, 'max_request_size_in_kb' => 250,
'statistics' => [
/* /*
* This model will be used to store the statistics of the WebSocketsServer * This model will be used to store the statistics of the WebSocketsServer.
* The only requirement is that the model should be or extend
* `WebSocketsStatisticsEntry` provided by this package.
*/ */
'statistics_model' => \BeyondCode\LaravelWebSockets\Statistics\Models\WebSocketsStatisticsEntry::class, 'model' => \BeyondCode\LaravelWebSockets\Statistics\Models\WebSocketsStatisticsEntry::class,
/*
* Here you can specify the interval in seconds at which statistics should be logged.
*/
'interval_in_seconds' => 60,
],
/* /*
* Define the optional SSL context for your WebSocket connections. * Define the optional SSL context for your WebSocket connections.

View File

@ -57,7 +57,7 @@ class StartWebSocketServer extends Command
return new HttpStatisticsLogger(app(ChannelManager::class), $browser); return new HttpStatisticsLogger(app(ChannelManager::class), $browser);
}); });
$this->loop->addPeriodicTimer(5, function() { $this->loop->addPeriodicTimer(config('websockets.statistics.interval_in_seconds'), function() {
StatisticsLogger::save(); StatisticsLogger::save();
}); });

View File

@ -3,6 +3,7 @@
namespace BeyondCode\LaravelWebsockets\Statistics\Events; namespace BeyondCode\LaravelWebsockets\Statistics\Events;
use BeyondCode\LaravelWebSockets\Dashboard\DashboardLogger; use BeyondCode\LaravelWebSockets\Dashboard\DashboardLogger;
use BeyondCode\LaravelWebSockets\Statistics\Models\WebSocketsStatisticsEntry;
use Illuminate\Broadcasting\PrivateChannel; use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast; use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Queue\SerializesModels; use Illuminate\Queue\SerializesModels;
@ -11,27 +12,30 @@ class StatisticsUpdated implements ShouldBroadcast
{ {
use SerializesModels; use SerializesModels;
protected $statisticModel; /** @var \BeyondCode\LaravelWebSockets\Statistics\Models\WebSocketsStatisticsEntry */
protected $webSocketsStatisticsEntry;
public function __construct($statisticModel) public function __construct(WebSocketsStatisticsEntry $webSocketsStatisticsEntry)
{ {
$this->statisticModel = $statisticModel; $this->webSocketsStatisticsEntry = $webSocketsStatisticsEntry;
} }
public function broadcastWith() public function broadcastWith()
{ {
return [ return [
'time' => $this->statisticModel->created_at->timestamp, 'time' => $this->webSocketsStatisticsEntry->created_at->timestamp,
'app_id' => $this->statisticModel->appId, 'app_id' => $this->webSocketsStatisticsEntry->appId,
'peak_connection_count' => $this->statisticModel->peakConnectionCount, 'peak_connection_count' => $this->webSocketsStatisticsEntry->peakConnectionCount,
'websocket_message_count' => $this->statisticModel->webSocketMessageCount, 'websocket_message_count' => $this->webSocketsStatisticsEntry->webSocketMessageCount,
'api_message_count' => $this->statisticModel->apiMessageCount, 'api_message_count' => $this->webSocketsStatisticsEntry->apiMessageCount,
]; ];
} }
public function broadcastOn() public function broadcastOn()
{ {
return new PrivateChannel(str_after(DashboardLogger::LOG_CHANNEL_PREFIX . 'statistics', 'private-')); $channelName = str_after(DashboardLogger::LOG_CHANNEL_PREFIX . 'statistics', 'private-');
return new PrivateChannel($channelName);
} }
public function broadcastAs() public function broadcastAs()

View File

@ -17,7 +17,7 @@ class WebSocketStatisticsEntriesController
'api_message_count' => 'required|integer', 'api_message_count' => 'required|integer',
]); ]);
$webSocketsStatisticsEntryModelClass = config('websockets.statistics_model'); $webSocketsStatisticsEntryModelClass = config('websockets.statistics.model');
$statisticModel = $webSocketsStatisticsEntryModelClass::create($validatedAttributes); $statisticModel = $webSocketsStatisticsEntryModelClass::create($validatedAttributes);