From 83d093805ffd7cd251fbf6ac9f411aaba47f504d Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Tue, 11 Jun 2024 14:14:38 +0900 Subject: [PATCH] Implement deploymentsStorage metric for projects API --- app/controllers/api/project.php | 23 +++++++++++++++++-- .../Utopia/Response/Model/UsageProject.php | 13 +++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/app/controllers/api/project.php b/app/controllers/api/project.php index a3e07927d6..6bdff48587 100644 --- a/app/controllers/api/project.php +++ b/app/controllers/api/project.php @@ -44,7 +44,8 @@ App::get('/v1/project/usage') METRIC_DATABASES, METRIC_USERS, METRIC_BUCKETS, - METRIC_FILES_STORAGE + METRIC_FILES_STORAGE, + METRIC_DEPLOYMENTS_STORAGE ], 'period' => [ METRIC_NETWORK_REQUESTS, @@ -144,6 +145,22 @@ App::get('/v1/project/usage') ]; }, $dbForProject->find('buckets')); + $deploymentsBreakdown = array_map(function ($function) use ($dbForProject) { + $id = $function->getId(); + $name = $function->getAttribute('name'); + $metric = str_replace(['{resourceType}', '{resourceInternalId}'], ['functions', $function->getInternalId()], METRIC_FUNCTION_ID_DEPLOYMENTS_STORAGE); + $value = $dbForProject->findOne('stats', [ + Query::equal('metric', [$metric]), + Query::equal('period', ['inf']) + ]); + + return [ + 'resourceId' => $id, + 'name' => $name, + 'value' => $value['value'] ?? 0, + ]; + }, $dbForProject->find('functions')); + // merge network inbound + outbound $projectBandwidth = []; foreach ($usage[METRIC_NETWORK_INBOUND] as $item) { @@ -176,8 +193,10 @@ App::get('/v1/project/usage') 'usersTotal' => $total[METRIC_USERS], 'bucketsTotal' => $total[METRIC_BUCKETS], 'filesStorageTotal' => $total[METRIC_FILES_STORAGE], + 'deploymentsStorageTotal' => $total[METRIC_DEPLOYMENTS_STORAGE], 'executionsBreakdown' => $executionsBreakdown, - 'bucketsBreakdown' => $bucketsBreakdown + 'bucketsBreakdown' => $bucketsBreakdown, + 'deploymentsStorageBreakdown' => $deploymentsBreakdown, ]), Response::MODEL_USAGE_PROJECT); }); diff --git a/src/Appwrite/Utopia/Response/Model/UsageProject.php b/src/Appwrite/Utopia/Response/Model/UsageProject.php index b3aaac2a6c..b2cbe3479c 100644 --- a/src/Appwrite/Utopia/Response/Model/UsageProject.php +++ b/src/Appwrite/Utopia/Response/Model/UsageProject.php @@ -40,6 +40,12 @@ class UsageProject extends Model 'default' => 0, 'example' => 0, ]) + ->addRule('deploymentsStorageTotal', [ + 'type' => self::TYPE_INTEGER, + 'description' => 'Total aggregated sum of deployments storage size (in bytes).', + 'default' => 0, + 'example' => 0, + ]) ->addRule('bucketsTotal', [ 'type' => self::TYPE_INTEGER, 'description' => 'Total aggregated number of buckets.', @@ -88,6 +94,13 @@ class UsageProject extends Model 'example' => [], 'array' => true ]) + ->addRule('deploymentsStorageBreakdown', [ + 'type' => Response::MODEL_METRIC_BREAKDOWN, + 'description' => 'Aggregated breakdown in totals of storage used by deployments.', + 'default' => [], + 'example' => [], + 'array' => true + ]) ; }