Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions src/Database.php
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 2 additions & 0 deletions src/NativeClient.php
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
45 changes: 45 additions & 0 deletions tests/Integration/DatabaseMonitoringTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?php

declare(strict_types=1);

namespace CrazyGoat\FoundationDB\Tests\Integration;

use CrazyGoat\FoundationDB\Database;
use CrazyGoat\FoundationDB\FoundationDB;
use PHPUnit\Framework\Attributes\Test;
use PHPUnit\Framework\TestCase;

final class DatabaseMonitoringTest extends TestCase
{
private static bool $initialized = false;

private static Database $db;

protected function setUp(): void
{
if (!self::$initialized) {
FoundationDB::reset();
FoundationDB::apiVersion(730);
self::$db = FoundationDB::open();
self::$initialized = true;
}
}

#[Test]
public function getMainThreadBusynessReturnsNonNegativeValue(): void
{
$busyness = self::$db->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);
}
}
Loading