Removed controller that sends out the statistics
This commit is contained in:
parent
ed96e24f6a
commit
99b55411c1
|
|
@ -239,37 +239,6 @@ return [
|
|||
|
||||
'delete_statistics_older_than_days' => 60,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| DNS Lookup
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Use an DNS resolver to make the requests to the statistics logger
|
||||
| default is to resolve everything to 127.0.0.1.
|
||||
|
|
||||
*/
|
||||
|
||||
'perform_dns_lookup' => false,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| DNS Lookup TLS Settings
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| You can configure the DNS Lookup Connector the TLS settings.
|
||||
| Check the available options here:
|
||||
| https://github.com/reactphp/socket/blob/master/src/Connector.php#L29
|
||||
|
|
||||
*/
|
||||
|
||||
'tls' => [
|
||||
|
||||
'verify_peer' => env('APP_ENV') === 'production',
|
||||
|
||||
'verify_peer_name' => env('APP_ENV') === 'production',
|
||||
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
];
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ use BeyondCode\LaravelWebSockets\Server\Logger\HttpLogger;
|
|||
use BeyondCode\LaravelWebSockets\Server\Logger\WebsocketsLogger;
|
||||
use BeyondCode\LaravelWebSockets\Server\WebSocketServerFactory;
|
||||
use BeyondCode\LaravelWebSockets\Statistics\DnsResolver;
|
||||
use BeyondCode\LaravelWebSockets\Statistics\Drivers\StatisticsDriver;
|
||||
use BeyondCode\LaravelWebSockets\Statistics\Logger\StatisticsLogger as StatisticsLoggerInterface;
|
||||
use BeyondCode\LaravelWebSockets\WebSockets\Channels\ChannelManager;
|
||||
use Clue\React\Buzz\Browser;
|
||||
|
|
@ -103,19 +104,12 @@ class StartWebSocketServer extends Command
|
|||
*/
|
||||
protected function configureStatisticsLogger()
|
||||
{
|
||||
$connector = new Connector($this->loop, [
|
||||
'dns' => $this->getDnsResolver(),
|
||||
'tls' => config('websockets.statistics.tls'),
|
||||
]);
|
||||
|
||||
$browser = new Browser($this->loop, $connector);
|
||||
|
||||
$this->laravel->singleton(StatisticsLoggerInterface::class, function () use ($browser) {
|
||||
$this->laravel->singleton(StatisticsLoggerInterface::class, function () {
|
||||
$class = config('websockets.statistics.logger', \BeyondCode\LaravelWebSockets\Statistics\Logger\MemoryStatisticsLogger::class);
|
||||
|
||||
return new $class(
|
||||
$this->laravel->make(ChannelManager::class),
|
||||
$browser
|
||||
$this->laravel->make(StatisticsDriver::class)
|
||||
);
|
||||
});
|
||||
|
||||
|
|
@ -273,27 +267,6 @@ class StartWebSocketServer extends Command
|
|||
->createServer();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a DNS resolver for the stats manager.
|
||||
*
|
||||
* @return \React\Dns\Resolver\ResolverInterface
|
||||
*/
|
||||
protected function getDnsResolver(): ResolverInterface
|
||||
{
|
||||
if (! config('websockets.statistics.perform_dns_lookup')) {
|
||||
return new DnsResolver;
|
||||
}
|
||||
|
||||
$dnsConfig = DnsConfig::loadSystemConfigBlocking();
|
||||
|
||||
return (new DnsFactory)->createCached(
|
||||
$dnsConfig->nameservers
|
||||
? reset($dnsConfig->nameservers)
|
||||
: '1.1.1.1',
|
||||
$this->loop
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the last time the server restarted.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -1,34 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace BeyondCode\LaravelWebSockets\Statistics\Http\Controllers;
|
||||
|
||||
use BeyondCode\LaravelWebSockets\Statistics\Drivers\StatisticsDriver;
|
||||
use BeyondCode\LaravelWebSockets\Statistics\Events\StatisticsUpdated;
|
||||
use BeyondCode\LaravelWebSockets\Statistics\Rules\AppId;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class WebSocketStatisticsEntriesController
|
||||
{
|
||||
/**
|
||||
* Store the entry.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \BeyondCode\LaravelWebSockets\Statistics\Drivers\StatisticsDriver $driver
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function store(Request $request, StatisticsDriver $driver)
|
||||
{
|
||||
$validatedAttributes = $request->validate([
|
||||
'app_id' => ['required', new AppId()],
|
||||
'peak_connection_count' => 'required|integer',
|
||||
'websocket_message_count' => 'required|integer',
|
||||
'api_message_count' => 'required|integer',
|
||||
]);
|
||||
|
||||
broadcast(new StatisticsUpdated(
|
||||
$driver::create($validatedAttributes)
|
||||
));
|
||||
|
||||
return 'ok';
|
||||
}
|
||||
}
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace BeyondCode\LaravelWebSockets\Statistics\Http\Middleware;
|
||||
|
||||
use BeyondCode\LaravelWebSockets\Apps\App;
|
||||
|
||||
class Authorize
|
||||
{
|
||||
/**
|
||||
* Authorize the request by app secret.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function handle($request, $next)
|
||||
{
|
||||
return is_null(App::findBySecret($request->secret))
|
||||
? abort(403)
|
||||
: $next($request);
|
||||
}
|
||||
}
|
||||
|
|
@ -3,6 +3,8 @@
|
|||
namespace BeyondCode\LaravelWebSockets\Statistics\Logger;
|
||||
|
||||
use BeyondCode\LaravelWebSockets\Apps\App;
|
||||
use BeyondCode\LaravelWebSockets\Statistics\Drivers\StatisticsDriver;
|
||||
use BeyondCode\LaravelWebSockets\Statistics\Events\StatisticsUpdated;
|
||||
use BeyondCode\LaravelWebSockets\Statistics\Http\Controllers\WebSocketStatisticsEntriesController;
|
||||
use BeyondCode\LaravelWebSockets\Statistics\Statistic;
|
||||
use BeyondCode\LaravelWebSockets\WebSockets\Channels\ChannelManager;
|
||||
|
|
@ -27,23 +29,23 @@ class MemoryStatisticsLogger implements StatisticsLogger
|
|||
protected $channelManager;
|
||||
|
||||
/**
|
||||
* The Browser instance.
|
||||
* The statistics driver instance.
|
||||
*
|
||||
* @var \Clue\React\Buzz\Browser
|
||||
* @var \BeyondCode\LaravelWebSockets\Statistics\Drivers\StatisticsDriver
|
||||
*/
|
||||
protected $browser;
|
||||
protected $driver;
|
||||
|
||||
/**
|
||||
* Initialize the logger.
|
||||
*
|
||||
* @param \BeyondCode\LaravelWebSockets\WebSockets\Channels\ChannelManager $channelManager
|
||||
* @param \Clue\React\Buzz\Browser $browser
|
||||
* @param \BeyondCode\LaravelWebSockets\Statistics\Drivers\StatisticsDriver $driver
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(ChannelManager $channelManager, Browser $browser)
|
||||
public function __construct(ChannelManager $channelManager, StatisticsDriver $driver)
|
||||
{
|
||||
$this->channelManager = $channelManager;
|
||||
$this->browser = $browser;
|
||||
$this->driver = $driver;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -106,16 +108,9 @@ class MemoryStatisticsLogger implements StatisticsLogger
|
|||
continue;
|
||||
}
|
||||
|
||||
$postData = array_merge($statistic->toArray(), [
|
||||
'secret' => App::findById($appId)->secret,
|
||||
]);
|
||||
|
||||
$this->browser
|
||||
->post(
|
||||
action([WebSocketStatisticsEntriesController::class, 'store']),
|
||||
['Content-Type' => 'application/json'],
|
||||
stream_for(json_encode($postData))
|
||||
);
|
||||
broadcast(new StatisticsUpdated(
|
||||
$this->driver::create($statistic->toArray())
|
||||
));
|
||||
|
||||
$currentConnectionCount = $this->channelManager->getConnectionCount($appId);
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ namespace BeyondCode\LaravelWebSockets\Statistics\Logger;
|
|||
use BeyondCode\LaravelWebSockets\WebSockets\Channels\ChannelManager;
|
||||
use Clue\React\Buzz\Browser;
|
||||
use Ratchet\ConnectionInterface;
|
||||
use BeyondCode\LaravelWebSockets\Statistics\Drivers\StatisticsDriver;
|
||||
|
||||
class NullStatisticsLogger implements StatisticsLogger
|
||||
{
|
||||
|
|
@ -16,23 +17,23 @@ class NullStatisticsLogger implements StatisticsLogger
|
|||
protected $channelManager;
|
||||
|
||||
/**
|
||||
* The Browser instance.
|
||||
* The statistics driver instance.
|
||||
*
|
||||
* @var \Clue\React\Buzz\Browser
|
||||
* @var \BeyondCode\LaravelWebSockets\Statistics\Drivers\StatisticsDriver
|
||||
*/
|
||||
protected $browser;
|
||||
protected $driver;
|
||||
|
||||
/**
|
||||
* Initialize the logger.
|
||||
*
|
||||
* @param \BeyondCode\LaravelWebSockets\WebSockets\Channels\ChannelManager $channelManager
|
||||
* @param \Clue\React\Buzz\Browser $browser
|
||||
* @param \BeyondCode\LaravelWebSockets\Statistics\Drivers\StatisticsDriver $driver
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(ChannelManager $channelManager, Browser $browser)
|
||||
public function __construct(ChannelManager $channelManager, StatisticsDriver $driver)
|
||||
{
|
||||
$this->channelManager = $channelManager;
|
||||
$this->browser = $browser;
|
||||
$this->driver = $driver;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ use BeyondCode\LaravelWebSockets\PubSub\Broadcasters\RedisPusherBroadcaster;
|
|||
use BeyondCode\LaravelWebSockets\Server\Router;
|
||||
use BeyondCode\LaravelWebSockets\Statistics\Drivers\StatisticsDriver;
|
||||
use BeyondCode\LaravelWebSockets\Statistics\Http\Controllers\WebSocketStatisticsEntriesController;
|
||||
use BeyondCode\LaravelWebSockets\Statistics\Http\Middleware\Authorize as AuthorizeStatistics;
|
||||
use BeyondCode\LaravelWebSockets\WebSockets\Channels\ChannelManager;
|
||||
use BeyondCode\LaravelWebSockets\WebSockets\Channels\ChannelManagers\ArrayChannelManager;
|
||||
use Illuminate\Broadcasting\BroadcastManager;
|
||||
|
|
@ -127,10 +126,6 @@ class WebSocketsServiceProvider extends ServiceProvider
|
|||
Route::post('auth', AuthenticateDashboard::class);
|
||||
Route::post('event', SendMessage::class);
|
||||
});
|
||||
|
||||
Route::middleware(AuthorizeStatistics::class)->group(function () {
|
||||
Route::post('statistics', [WebSocketStatisticsEntriesController::class, 'store']);
|
||||
});
|
||||
});
|
||||
|
||||
return $this;
|
||||
|
|
|
|||
|
|
@ -1,42 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace BeyondCode\LaravelWebSockets\Tests\Statistics\Controllers;
|
||||
|
||||
use BeyondCode\LaravelWebSockets\Statistics\Http\Controllers\WebSocketStatisticsEntriesController;
|
||||
use BeyondCode\LaravelWebSockets\Statistics\Models\WebSocketsStatisticsEntry;
|
||||
use BeyondCode\LaravelWebSockets\Tests\TestCase;
|
||||
|
||||
class WebSocketsStatisticsControllerTest extends TestCase
|
||||
{
|
||||
/** @test */
|
||||
public function it_can_store_statistics()
|
||||
{
|
||||
$this->post(
|
||||
action([WebSocketStatisticsEntriesController::class, 'store']),
|
||||
array_merge($this->payload(), [
|
||||
'secret' => config('websockets.apps.0.secret'),
|
||||
])
|
||||
);
|
||||
|
||||
$entries = WebSocketsStatisticsEntry::get();
|
||||
|
||||
$this->assertCount(1, $entries);
|
||||
|
||||
$actual = $entries->first()->attributesToArray();
|
||||
|
||||
foreach ($this->payload() as $key => $value) {
|
||||
$this->assertArrayHasKey($key, $actual);
|
||||
$this->assertSame($value, $actual[$key]);
|
||||
}
|
||||
}
|
||||
|
||||
protected function payload(): array
|
||||
{
|
||||
return [
|
||||
'app_id' => config('websockets.apps.0.id'),
|
||||
'peak_connection_count' => '1',
|
||||
'websocket_message_count' => '2',
|
||||
'api_message_count' => '3',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
@ -6,6 +6,7 @@ use BeyondCode\LaravelWebSockets\Facades\StatisticsLogger;
|
|||
use BeyondCode\LaravelWebSockets\PubSub\Drivers\LocalClient;
|
||||
use BeyondCode\LaravelWebSockets\PubSub\Drivers\RedisClient;
|
||||
use BeyondCode\LaravelWebSockets\PubSub\ReplicationInterface;
|
||||
use BeyondCode\LaravelWebSockets\Statistics\Drivers\StatisticsDriver;
|
||||
use BeyondCode\LaravelWebSockets\Tests\Mocks\Connection;
|
||||
use BeyondCode\LaravelWebSockets\Tests\Mocks\Message;
|
||||
use BeyondCode\LaravelWebSockets\Tests\Statistics\Logger\FakeStatisticsLogger;
|
||||
|
|
@ -45,7 +46,7 @@ abstract class TestCase extends \Orchestra\Testbench\TestCase
|
|||
|
||||
StatisticsLogger::swap(new FakeStatisticsLogger(
|
||||
$this->channelManager,
|
||||
Mockery::mock(Browser::class)
|
||||
app(StatisticsDriver::class)
|
||||
));
|
||||
|
||||
$this->loadMigrationsFrom(__DIR__.'/../database/migrations');
|
||||
|
|
@ -94,8 +95,6 @@ abstract class TestCase extends \Orchestra\Testbench\TestCase
|
|||
],
|
||||
]);
|
||||
|
||||
$app['config']->set('websockets.statistics.perform_dns_lookup', true);
|
||||
|
||||
$app['config']->set('database.redis.default', [
|
||||
'host' => env('REDIS_HOST', '127.0.0.1'),
|
||||
'password' => env('REDIS_PASSWORD', null),
|
||||
|
|
|
|||
Loading…
Reference in New Issue