diff --git a/app/controllers/api/functions.php b/app/controllers/api/functions.php index 751480a6e5..88f7bed087 100644 --- a/app/controllers/api/functions.php +++ b/app/controllers/api/functions.php @@ -1385,6 +1385,7 @@ App::get('/v1/functions/:functionId/usage') 'functions.' . $function->getId() . '.deployments', 'functions.' . $function->getId() . '.deployments.storage', $function->getId() . '.builds', + $function->getId() . '.builds.storage', $function->getId() . '.builds.compute', $function->getId() . '.executions', $function->getId() . '.executions.compute', @@ -1432,9 +1433,10 @@ App::get('/v1/functions/:functionId/usage') 'deployments' => $usage[$metrics[0]], 'deploymentsStorage' => $usage[$metrics[1]], 'builds' => $usage[$metrics[2]], - 'buildsCompute' => $usage[$metrics[3]], - 'executions' => $usage[$metrics[4]], - 'executionsCompute' => $usage[$metrics[5]], + 'buildsStorage' => $usage[$metrics[3]], + 'buildsCompute' => $usage[$metrics[4]], + 'executions' => $usage[$metrics[5]], + 'executionsCompute' => $usage[$metrics[6]], ]), Response::MODEL_USAGE_FUNCTION); }); @@ -1461,6 +1463,7 @@ App::get('/v1/functions/usage') 'deployments', 'deployments.storage', 'builds', + 'builds.storage', 'builds.compute', 'executions', 'executions.compute', @@ -1508,8 +1511,9 @@ App::get('/v1/functions/usage') 'deployments' => $usage[$metrics[1]], 'deploymentsStorage' => $usage[$metrics[2]], 'builds' => $usage[$metrics[3]], - 'buildsCompute' => $usage[$metrics[4]], - 'executions' => $usage[$metrics[5]], - 'executionsCompute' => $usage[$metrics[6]], + 'buildsStorage' => $usage[$metrics[4]], + 'buildsCompute' => $usage[$metrics[5]], + 'executions' => $usage[$metrics[6]], + 'executionsCompute' => $usage[$metrics[7]], ]), Response::MODEL_USAGE_FUNCTIONS); }); diff --git a/app/workers/builds.php b/app/workers/builds.php index 54e8b581f8..e763326785 100644 --- a/app/workers/builds.php +++ b/app/workers/builds.php @@ -252,9 +252,11 @@ class BuildsV1 extends Worker ->getUsageQueue() ->setProject($project) ->addMetric("builds", 1) // per project - ->addMetric("builds.compute", $build->getAttribute('duration')) // per project + ->addMetric("builds.storage", $build->getAttribute('size', 0)) + ->addMetric("builds.compute", $build->getAttribute('duration', 0)) ->addMetric("{$function->getId()}" . ".builds", 1) // per function - ->addMetric("{$function->getId()}" . ".builds.compute", $build->getAttribute('duration')) // per function + ->addMetric("{$function->getId()}" . ".builds.storage", $build->getAttribute('size', 0)) + ->addMetric("{$function->getId()}" . ".builds.compute", $build->getAttribute('duration', 0)) ->trigger() ; } diff --git a/docker-compose.yml b/docker-compose.yml index c6b02784a2..095289336a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -33,6 +33,15 @@ services: - 8080:80 - 443:443 - 9500:8080 + ulimits: + nofile: + soft: 655350 + hard: 655350 + sysctls: + - net.core.somaxconn=1024 + - net.ipv4.tcp_rmem=1024 4096 16384 + - net.ipv4.tcp_wmem=1024 4096 16384 + - net.ipv4.ip_local_port_range=1025 65535 volumes: - /var/run/docker.sock:/var/run/docker.sock - appwrite-config:/storage/config:ro @@ -53,7 +62,6 @@ services: DEBUG: false TESTING: true VERSION: dev - VITE_CONSOLE_MODE: self-hosted ports: - 9501:80 networks: @@ -655,7 +663,7 @@ services: image: openruntimes/executor:0.2.0 networks: - appwrite - - runtimes + - openruntimes-runtimes volumes: - /var/run/docker.sock:/var/run/docker.sock - appwrite-builds:/storage/builds:rw @@ -811,8 +819,8 @@ networks: name: gateway appwrite: name: appwrite - runtimes: - name: runtimes + openruntimes-runtimes: + name: openruntimes-runtimes volumes: appwrite-mariadb: @@ -825,3 +833,4 @@ volumes: appwrite-config: + diff --git a/src/Appwrite/Utopia/Response/Model/UsageFunction.php b/src/Appwrite/Utopia/Response/Model/UsageFunction.php index 410db7333a..f528a3c0b4 100644 --- a/src/Appwrite/Utopia/Response/Model/UsageFunction.php +++ b/src/Appwrite/Utopia/Response/Model/UsageFunction.php @@ -37,6 +37,13 @@ class UsageFunction extends Model 'example' => [], 'array' => true ]) + ->addRule('buildsStorage', [ + 'type' => Response::MODEL_METRIC, + 'description' => 'Aggregated stats for builds storage.', + 'default' => [], + 'example' => [], + 'array' => true + ]) ->addRule('buildsCompute', [ 'type' => Response::MODEL_METRIC, 'description' => 'Aggregated stats for function build compute.', diff --git a/src/Appwrite/Utopia/Response/Model/UsageFunctions.php b/src/Appwrite/Utopia/Response/Model/UsageFunctions.php index 85ab2111e8..585eceb1ea 100644 --- a/src/Appwrite/Utopia/Response/Model/UsageFunctions.php +++ b/src/Appwrite/Utopia/Response/Model/UsageFunctions.php @@ -44,6 +44,13 @@ class UsageFunctions extends Model 'example' => [], 'array' => true ]) + ->addRule('buildsStorage', [ + 'type' => Response::MODEL_METRIC, + 'description' => 'Aggregated stats for builds storage.', + 'default' => [], + 'example' => [], + 'array' => true + ]) ->addRule('buildsCompute', [ 'type' => Response::MODEL_METRIC, 'description' => 'Aggregated stats for function build compute.', diff --git a/tests/e2e/General/UsageTest.php b/tests/e2e/General/UsageTest.php index 8c8fbd9644..f4e9c0c844 100644 --- a/tests/e2e/General/UsageTest.php +++ b/tests/e2e/General/UsageTest.php @@ -2,7 +2,6 @@ namespace Tests\E2E\General; -use Appwrite\Tests\Retry; use Tests\E2E\Client; use Tests\E2E\Scopes\ProjectCustom; use Tests\E2E\Scopes\Scope; @@ -693,7 +692,7 @@ class UsageTest extends Scope ); $this->assertEquals(200, $response['headers']['status-code']); - $this->assertEquals(7, count($response['body'])); + $this->assertEquals(8, count($response['body'])); $this->assertEquals('30d', $response['body']['range']); $this->assertIsArray($response['body']['deployments']); $this->assertIsArray($response['body']['deploymentsStorage']); @@ -717,7 +716,7 @@ class UsageTest extends Scope ); $this->assertEquals(200, $response['headers']['status-code']); - $this->assertEquals(8, count($response['body'])); + $this->assertEquals(9, count($response['body'])); $this->assertEquals($response['body']['range'], '30d'); $this->assertIsArray($response['body']['functions']); $this->assertIsArray($response['body']['deployments']); @@ -737,7 +736,7 @@ class UsageTest extends Scope $this->validateDates($response['buildsCompute']); } - protected function tearDown(): void + public function tearDown(): void { $this->usersCount = 0; $this->requestsCount = 0;