diff --git a/app/controllers/api/functions.php b/app/controllers/api/functions.php index f9bbcae801..d3913d180d 100644 --- a/app/controllers/api/functions.php +++ b/app/controllers/api/functions.php @@ -456,7 +456,7 @@ App::get('/v1/functions/:functionId/usage') ->label('sdk.method', 'getFunctionUsage') ->label('sdk.response.code', Response::STATUS_CODE_OK) ->label('sdk.response.type', Response::CONTENT_TYPE_JSON) - ->label('sdk.response.model', Response::MODEL_USAGE_FUNCTIONS) + ->label('sdk.response.model', Response::MODEL_USAGE_FUNCTION) ->param('functionId', '', new UID(), 'Function ID.') ->param('range', '30d', new WhiteList(['24h', '30d', '90d']), 'Date range.', true) ->inject('response') diff --git a/composer.json b/composer.json index b3186596c2..83bcd26468 100644 --- a/composer.json +++ b/composer.json @@ -52,7 +52,7 @@ "utopia-php/database": "0.45.*", "utopia-php/domains": "0.3.*", "utopia-php/dsn": "0.1.*", - "utopia-php/framework": "0.31.1", + "utopia-php/framework": "0.33.*", "utopia-php/image": "0.5.*", "utopia-php/locale": "0.4.*", "utopia-php/logger": "0.3.*", diff --git a/composer.lock b/composer.lock index 9a33dfbd41..2c382d9088 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c207e62c309b58f4ac0d00dc508a5fc2", + "content-hash": "1b3fd261ed93452413b8e6ba77dbab55", "packages": [ { "name": "adhocore/jwt", @@ -1353,16 +1353,16 @@ }, { "name": "utopia-php/framework", - "version": "0.31.1", + "version": "0.33.0", "source": { "type": "git", "url": "https://github.com/utopia-php/http.git", - "reference": "e50d2d16f4bc31319043f3f6d3dbea36c6fd6b68" + "reference": "e3ff6b933082d57b48e7c4267bb605c0bf2250fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/http/zipball/e50d2d16f4bc31319043f3f6d3dbea36c6fd6b68", - "reference": "e50d2d16f4bc31319043f3f6d3dbea36c6fd6b68", + "url": "https://api.github.com/repos/utopia-php/http/zipball/e3ff6b933082d57b48e7c4267bb605c0bf2250fd", + "reference": "e3ff6b933082d57b48e7c4267bb605c0bf2250fd", "shasum": "" }, "require": { @@ -1392,9 +1392,9 @@ ], "support": { "issues": "https://github.com/utopia-php/http/issues", - "source": "https://github.com/utopia-php/http/tree/0.31.1" + "source": "https://github.com/utopia-php/http/tree/0.33.0" }, - "time": "2023-12-08T18:47:29+00:00" + "time": "2024-01-08T13:30:27+00:00" }, { "name": "utopia-php/image", @@ -5133,5 +5133,5 @@ "platform-overrides": { "php": "8.0" }, - "plugin-api-version": "2.2.0" + "plugin-api-version": "2.6.0" } diff --git a/tests/e2e/General/UsageTest.php b/tests/e2e/General/UsageTest.php index 09b5e1acea..8eb1389443 100644 --- a/tests/e2e/General/UsageTest.php +++ b/tests/e2e/General/UsageTest.php @@ -2,6 +2,7 @@ namespace Tests\E2E\General; +use Appwrite\Tests\Retry; use Tests\E2E\Client; use Tests\E2E\Scopes\ProjectCustom; use Tests\E2E\Scopes\Scope; @@ -11,6 +12,7 @@ use DateTime; use Tests\E2E\Services\Functions\FunctionsBase; use Utopia\Database\Helpers\Permission; use Utopia\Database\Helpers\Role; +use Utopia\Database\Validator\Datetime as DatetimeValidator; class UsageTest extends Scope { @@ -101,6 +103,7 @@ class UsageTest extends Scope /** * @depends testPrepareUsersStats */ + #[Retry(count: 1)] public function testUsersStats(array $data): array { sleep(self::WAIT); @@ -145,9 +148,9 @@ class UsageTest extends Scope $res = $res['body']; $this->assertEquals('90d', $res['range']); - $this->assertEquals(90, count($res['usersTotal'])); - $this->assertEquals(90, count($res['sessionsTotal'])); - $this->assertEquals((self::CREATE / 2), $res['usersTotal'][array_key_last($res['usersTotal'])]['value']); + $this->assertEquals(90, count($res['users'])); + $this->assertEquals(90, count($res['sessions'])); + $this->assertEquals((self::CREATE / 2), $res['users'][array_key_last($res['users'])]['value']); return [ 'projectId' => $projectId, @@ -269,6 +272,7 @@ class UsageTest extends Scope /** * @depends testPrepareStorageStats */ + #[Retry(count: 1)] public function testStorageStats(array $data): array { $bucketId = $data['bucketId']; @@ -294,13 +298,11 @@ class UsageTest extends Scope ); $res = $res['body']; - $this->assertEquals(9, count($res)); - $this->assertEquals(30, count($res['requestsTotal'])); - $this->assertEquals(30, count($res['filesStorage'])); - $this->assertEquals($requestsTotal, $res['requestsTotal'][array_key_last($res['requestsTotal'])]['value']); - $this->validateDates($res['requestsTotal']); - $this->assertEquals($storageTotal, $res['filesStorage'][array_key_last($res['filesStorage'])]['value']); - $this->validateDates($res['filesStorage']); + $this->assertEquals(12, count($res)); + $this->assertEquals(1, count($res['requests'])); + $this->assertEquals($requestsTotal, $res['requests'][array_key_last($res['requests'])]['value']); + $this->validateDates($res['requests']); + $this->assertEquals($storageTotal, $res['filesStorageTotal']); $res = $this->client->call( Client::METHOD_GET, @@ -312,12 +314,12 @@ class UsageTest extends Scope ); $res = $res['body']; - $this->assertEquals($storageTotal, $res['filesStorage'][array_key_last($res['filesStorage'])]['value']); - $this->validateDates($res['filesStorage']); - $this->assertEquals($bucketsTotal, $res['bucketsTotal'][array_key_last($res['bucketsTotal'])]['value']); - $this->validateDates($res['bucketsTotal']); - $this->assertEquals($filesTotal, $res['filesTotal'][array_key_last($res['filesTotal'])]['value']); - $this->validateDates($res['filesTotal']); + $this->assertEquals($storageTotal, $res['storage'][array_key_last($res['storage'])]['value']); + $this->validateDates($res['storage']); + $this->assertEquals($bucketsTotal, $res['buckets'][array_key_last($res['buckets'])]['value']); + $this->validateDates($res['buckets']); + $this->assertEquals($filesTotal, $res['files'][array_key_last($res['files'])]['value']); + $this->validateDates($res['files']); $res = $this->client->call( Client::METHOD_GET, @@ -329,8 +331,8 @@ class UsageTest extends Scope ); $res = $res['body']; - $this->assertEquals($storageTotal, $res['filesStorage'][array_key_last($res['filesStorage'])]['value']); - $this->assertEquals($filesTotal, $res['filesTotal'][array_key_last($res['filesTotal'])]['value']); + $this->assertEquals($storageTotal, $res['storage'][array_key_last($res['storage'])]['value']); + $this->assertEquals($filesTotal, $res['files'][array_key_last($res['files'])]['value']); $data['requestsTotal'] = $requestsTotal; @@ -475,7 +477,7 @@ class UsageTest extends Scope } /** @depends testPrepareDatabaseStats */ - + #[Retry(count: 1)] public function testDatabaseStats(array $data): array { @@ -501,15 +503,13 @@ class UsageTest extends Scope ); $res = $res['body']; - $this->assertEquals(9, count($res)); - $this->assertEquals(30, count($res['requestsTotal'])); - $this->assertEquals(30, count($res['filesStorage'])); - $this->assertEquals($requestsTotal, $res['requestsTotal'][array_key_last($res['requestsTotal'])]['value']); - $this->validateDates($res['requestsTotal']); - $this->assertEquals($databasesTotal, $res['databasesTotal'][array_key_last($res['databasesTotal'])]['value']); - $this->validateDates($res['databasesTotal']); - $this->assertEquals($documentsTotal, $res['documentsTotal'][array_key_last($res['documentsTotal'])]['value']); - $this->validateDates($res['documentsTotal']); + $this->assertEquals(12, count($res)); + $this->assertEquals(1, count($res['requests'])); + $this->assertEquals(1, count($res['network'])); + $this->assertEquals($requestsTotal, $res['requests'][array_key_last($res['requests'])]['value']); + $this->validateDates($res['requests']); + $this->assertEquals($databasesTotal, $res['databasesTotal']); + $this->assertEquals($documentsTotal, $res['documentsTotal']); $res = $this->client->call( Client::METHOD_GET, @@ -518,12 +518,12 @@ class UsageTest extends Scope ); $res = $res['body']; - $this->assertEquals($databasesTotal, $res['databasesTotal'][array_key_last($res['databasesTotal'])]['value']); - $this->validateDates($res['databasesTotal']); - $this->assertEquals($collectionsTotal, $res['collectionsTotal'][array_key_last($res['collectionsTotal'])]['value']); - $this->validateDates($res['collectionsTotal']); - $this->assertEquals($documentsTotal, $res['documentsTotal'][array_key_last($res['documentsTotal'])]['value']); - $this->validateDates($res['documentsTotal']); + $this->assertEquals($databasesTotal, $res['databases'][array_key_last($res['databases'])]['value']); + $this->validateDates($res['databases']); + $this->assertEquals($collectionsTotal, $res['collections'][array_key_last($res['collections'])]['value']); + $this->validateDates($res['collections']); + $this->assertEquals($documentsTotal, $res['documents'][array_key_last($res['documents'])]['value']); + $this->validateDates($res['documents']); $res = $this->client->call( Client::METHOD_GET, @@ -532,17 +532,17 @@ class UsageTest extends Scope ); $res = $res['body']; - $this->assertEquals($collectionsTotal, $res['collectionsTotal'][array_key_last($res['collectionsTotal'])]['value']); - $this->validateDates($res['collectionsTotal']); + $this->assertEquals($collectionsTotal, $res['collections'][array_key_last($res['collections'])]['value']); + $this->validateDates($res['collections']); - $this->assertEquals($documentsTotal, $res['documentsTotal'][array_key_last($res['documentsTotal'])]['value']); - $this->validateDates($res['documentsTotal']); + $this->assertEquals($documentsTotal, $res['documents'][array_key_last($res['documents'])]['value']); + $this->validateDates($res['documents']); $res = $this->client->call(Client::METHOD_GET, '/databases/' . $databaseId . '/collections/' . $collectionId . '/usage?range=30d', $data['consoleHeaders']); $res = $res['body']; - $this->assertEquals($documentsTotal, $res['documentsTotal'][array_key_last($res['documentsTotal'])]['value']); - $this->validateDates($res['documentsTotal']); + $this->assertEquals($documentsTotal, $res['documents'][array_key_last($res['documents'])]['value']); + $this->validateDates($res['documents']); $data['requestsTotal'] = $requestsTotal; @@ -701,6 +701,7 @@ class UsageTest extends Scope } /** @depends testPrepareFunctionsStats */ + #[Retry(count: 1)] public function testFunctionsStats(array $data): void { $functionId = $data['functionId']; @@ -716,19 +717,19 @@ class UsageTest extends Scope ); $this->assertEquals(200, $response['headers']['status-code']); - $this->assertEquals(8, count($response['body'])); + $this->assertEquals(15, count($response['body'])); $this->assertEquals('30d', $response['body']['range']); - $this->assertIsArray($response['body']['deploymentsTotal']); + $this->assertIsArray($response['body']['deployments']); $this->assertIsArray($response['body']['deploymentsStorage']); - $this->assertIsArray($response['body']['buildsTotal']); + $this->assertIsArray($response['body']['builds']); $this->assertIsArray($response['body']['buildsTime']); - $this->assertIsArray($response['body']['executionsTotal']); + $this->assertIsArray($response['body']['executions']); $this->assertIsArray($response['body']['executionsTime']); $response = $response['body']; - $this->assertEquals($executions, $response['executionsTotal'][array_key_last($response['executionsTotal'])]['value']); - $this->validateDates($response['executionsTotal']); + $this->assertEquals($executions, $response['executions'][array_key_last($response['executions'])]['value']); + $this->validateDates($response['executions']); $this->assertEquals($executionTime, $response['executionsTime'][array_key_last($response['executionsTime'])]['value']); $this->validateDates($response['executionsTime']); @@ -739,20 +740,20 @@ class UsageTest extends Scope ); $this->assertEquals(200, $response['headers']['status-code']); - $this->assertEquals(9, count($response['body'])); + $this->assertEquals(17, count($response['body'])); $this->assertEquals($response['body']['range'], '30d'); - $this->assertIsArray($response['body']['functionsTotal']); - $this->assertIsArray($response['body']['deploymentsTotal']); + $this->assertIsArray($response['body']['functions']); + $this->assertIsArray($response['body']['deployments']); $this->assertIsArray($response['body']['deploymentsStorage']); - $this->assertIsArray($response['body']['buildsTotal']); + $this->assertIsArray($response['body']['builds']); $this->assertIsArray($response['body']['buildsTime']); - $this->assertIsArray($response['body']['executionsTotal']); + $this->assertIsArray($response['body']['executions']); $this->assertIsArray($response['body']['executionsTime']); $response = $response['body']; - $this->assertEquals($executions, $response['executionsTotal'][array_key_last($response['executionsTotal'])]['value']); - $this->validateDates($response['executionsTotal']); + $this->assertEquals($executions, $response['executions'][array_key_last($response['executions'])]['value']); + $this->validateDates($response['executions']); $this->assertEquals($executionTime, $response['executionsTime'][array_key_last($response['executionsTime'])]['value']); $this->validateDates($response['executionsTime']); $this->assertGreaterThan(0, $response['buildsTime'][array_key_last($response['buildsTime'])]['value']);