diff --git a/src/Database.php b/src/Database.php index ddd4da5..4265c64 100644 --- a/src/Database.php +++ b/src/Database.php @@ -261,6 +261,24 @@ public function getRangeSplitPoints(string $begin, string $end, int $chunkSize): ); } + public function getMainThreadBusyness(): float + { + /** @var float $busyness */ + $busyness = $this->client->fdb->fdb_database_get_main_thread_busyness($this->dpointer); + + return $busyness; + } + + public function getClientStatus(): string + { + $future = new Future\FutureKey( + $this->client->fdb->fdb_database_get_client_status($this->dpointer), + $this->client, + ); + + return $future->await(); + } + public function options(): DatabaseOptions { return new DatabaseOptions($this); diff --git a/src/NativeClient.php b/src/NativeClient.php index f336006..260bda0 100644 --- a/src/NativeClient.php +++ b/src/NativeClient.php @@ -61,6 +61,8 @@ final class NativeClient const char* connection_string, FDBDatabase** out_database ); void fdb_database_destroy(FDBDatabase* d); + double fdb_database_get_main_thread_busyness(FDBDatabase* d); + FDBFuture* fdb_database_get_client_status(FDBDatabase* d); fdb_error_t fdb_database_set_option(FDBDatabase* d, int option, const void* value, int value_length); fdb_error_t fdb_database_create_transaction(FDBDatabase* d, FDBTransaction** out_transaction); fdb_error_t fdb_database_open_tenant( diff --git a/tests/Integration/DatabaseMonitoringTest.php b/tests/Integration/DatabaseMonitoringTest.php new file mode 100644 index 0000000..c50be73 --- /dev/null +++ b/tests/Integration/DatabaseMonitoringTest.php @@ -0,0 +1,45 @@ +getMainThreadBusyness(); + + self::assertGreaterThanOrEqual(0.0, $busyness); + } + + #[Test] + public function getClientStatusReturnsValidJson(): void + { + $status = self::$db->getClientStatus(); + + self::assertNotEmpty($status); + $decoded = json_decode($status, true); + self::assertIsArray($decoded); + } +}