From 806a775663c7cb2eeacf46b5651e20f640db5604 Mon Sep 17 00:00:00 2001 From: shimon Date: Fri, 9 Dec 2022 13:01:17 +0200 Subject: [PATCH] Switch to decreaseDocumentAttribute --- app/controllers/shared/api.php | 108 ++++++++++++++++++++++++--------- app/workers/usage.php | 8 ++- 2 files changed, 85 insertions(+), 31 deletions(-) diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index c3faf1ead1..01720b5d86 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -73,14 +73,24 @@ $databaseListener = function (string $event, Document $document, Document $proje $dbCollections = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getId()}" . ".collections")); $projectCollections = $dbForProject->getDocument('stats', md5("_inf_collections")); if (!$dbCollections->isEmpty()) { - $dbForProject->decreaseDocumentAttribute('stats', $projectCollections->getId(), 'value', $dbCollections['value']); + $dbForProject->decreaseDocumentAttribute( + 'stats', + $projectCollections->getId(), + 'value', + $dbCollections['value'] + ); } // Documents $dbDocuments = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getId()}" . ".documents")); $projectDocuments = $dbForProject->getDocument('stats', md5("_inf_documents")); if (!$dbDocuments->isEmpty()) { - $dbForProject->decreaseDocumentAttribute('stats', $projectDocuments->getId(), 'value', $dbDocuments['value']); + $dbForProject->decreaseDocumentAttribute( + 'stats', + $projectDocuments->getId(), + 'value', + $dbDocuments['value'] + ); } } break; @@ -89,9 +99,11 @@ $databaseListener = function (string $event, Document $document, Document $proje $queueForUsage->addMetric("collections", $value); // per project break; case $document->getCollection() === 'documents': - $queueForUsage->addMetric("{$document['databaseId']}" . "." . "{$document['collectionId']}" . ".documents", $value); // per collection - $queueForUsage->addMetric("{$document['databaseId']}" . ".documents", $value); // per database - $queueForUsage->addMetric("documents", $value); // per project + $queueForUsage + ->addMetric("{$document['databaseId']}" . "." . "{$document['collectionId']}" . ".documents", $value) // per collection + ->addMetric("{$document['databaseId']}" . ".documents", $value) // per database + ->addMetric("documents", $value) // per project + ; break; case $document->getCollection() === 'buckets': $queueForUsage->addMetric("buckets", $value); // per project @@ -100,21 +112,33 @@ $databaseListener = function (string $event, Document $document, Document $proje $bucketFiles = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getId()}" . ".files")); $projectFiles = $dbForProject->getDocument('stats', md5("_inf_files")); if (!$bucketFiles->isEmpty()) { - $dbForProject->decreaseDocumentAttribute('stats', $projectFiles->getId(), 'value', $bucketFiles['value']); + $dbForProject->decreaseDocumentAttribute( + 'stats', + $projectFiles->getId(), + 'value', + $bucketFiles['value'] + ); } // bucket Storage $bucketStorage = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getId()}" . ".files.storage")); $projectStorage = $dbForProject->getDocument('stats', md5("_inf_files.storage")); if (!$bucketStorage->isEmpty()) { - $dbForProject->decreaseDocumentAttribute('stats', $projectStorage->getId(), 'value', $bucketStorage['value']); + $dbForProject->decreaseDocumentAttribute( + 'stats', + $projectStorage->getId(), + 'value', + $bucketStorage['value'] + ); } } break; case str_starts_with($document->getCollection(), 'bucket_'): // files - $queueForUsage->addMetric("{$document['bucketId']}" . ".files", $value); // per bucket - $queueForUsage->addMetric("{$document['bucketId']}" . ".files.storage", $document->getAttribute('sizeOriginal') * $value); // per bucket - $queueForUsage->addMetric("files", $value); // per project - $queueForUsage->addMetric("files.storage", $document->getAttribute('sizeOriginal') * $value); // per project + $queueForUsage + ->addMetric("{$document['bucketId']}" . ".files", $value) // per bucket + ->addMetric("{$document['bucketId']}" . ".files.storage", $document->getAttribute('sizeOriginal') * $value)// per bucket + ->addMetric("files", $value) // per project + ->addMetric("files.storage", $document->getAttribute('sizeOriginal') * $value) // per project + ; break; case $document->getCollection() === 'functions': $queueForUsage->addMetric("functions", $value); // per project @@ -123,48 +147,74 @@ $databaseListener = function (string $event, Document $document, Document $proje $functionDeployments = $dbForProject->getDocument('stats', md5("_inf_function." . "{$document->getId()}" . ".deployments")); $projectDeployments = $dbForProject->getDocument('stats', md5("_inf_deployments")); if (!$functionDeployments->isEmpty()) { - $dbForProject->decreaseDocumentAttribute('stats', $projectDeployments->getId(), 'value', $functionDeployments['value']); + $dbForProject->decreaseDocumentAttribute( + 'stats', + $projectDeployments->getId(), + 'value', + $functionDeployments['value'] + ); } // Deployments Storage $functionDeploymentsStorage = $dbForProject->getDocument('stats', md5("_inf_function." . "{$document->getId()}" . ".deployments.storage")); $projectDeploymentsStorage = $dbForProject->getDocument('stats', md5("_inf_function.deployments.storage")); if (!$functionDeployments->isEmpty()) { - $dbForProject->decreaseDocumentAttribute('stats', $projectDeploymentsStorage->getId(), 'value', $functionDeploymentsStorage['value']); + $dbForProject->decreaseDocumentAttribute( + 'stats', + $projectDeploymentsStorage->getId(), + 'value', + $functionDeploymentsStorage['value'] + ); } - //TODO needs to find a solution for builds + //TODO Missing solution for builds (functionId) // Executions $functionExecutions = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getId()}" . ".executions")); $projectExecutions = $dbForProject->getDocument('stats', md5("_inf_executions")); if (!$functionExecutions->isEmpty()) { - $dbForProject->decreaseDocumentAttribute('stats', $projectExecutions->getId(), 'value', $functionExecutions['value']); + $dbForProject->decreaseDocumentAttribute( + 'stats', + $projectExecutions->getId(), + 'value', + $functionExecutions['value'] + ); } // Executions Compute $functionExecutionsCompute = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getId()}" . ".executions.compute")); $projectExecutionsCompute = $dbForProject->getDocument('stats', md5("_inf_executions.compute")); if (!$functionExecutionsCompute->isEmpty()) { - $dbForProject->decreaseDocumentAttribute('stats', $projectExecutionsCompute->getId(), 'value', $functionExecutionsCompute['value']); + $dbForProject->decreaseDocumentAttribute( + 'stats', + $projectExecutionsCompute->getId(), + 'value', + $functionExecutionsCompute['value'] + ); } } break; case $document->getCollection() === 'deployments': - $queueForUsage->addMetric("{$document['resourceType']}" . "." . "{$document['resourceId']}" . ".deployments", $value); // per function - $queueForUsage->addMetric("{$document['resourceType']}" . "." . "{$document['resourceId']}" . ".deployments.storage", $document->getAttribute('size') * $value); // per function - $queueForUsage->addMetric("deployments", $value); // per project - $queueForUsage->addMetric("deployments.storage", $document->getAttribute('size') * $value); // per project + $queueForUsage + ->addMetric("{$document['resourceType']}" . "." . "{$document['resourceId']}" . ".deployments", $value)// per function + ->addMetric("{$document['resourceType']}" . "." . "{$document['resourceId']}" . ".deployments.storage", $document->getAttribute('size') * $value) // per function + ->addMetric("deployments", $value) // per project + ->addMetric("deployments.storage", $document->getAttribute('size') * $value) // per project + ; break; - case $document->getCollection() === 'builds': // needs to extract functionId - $queueForUsage->addMetric("{$document['functionId']}" . ".builds", $value); // per function - $queueForUsage->addMetric("{$document['functionId']}" . ".builds.storage", $document->getAttribute('size') * $value); // per function - $queueForUsage->addMetric("builds", $value); // per project - $queueForUsage->addMetric("builds.storage", $document->getAttribute('size') * $value); // per project + case $document->getCollection() === 'builds': // todo needs to extract functionId + $queueForUsage + ->addMetric("{$document['functionId']}" . ".builds", $value) // per function + ->addMetric("{$document['functionId']}" . ".builds.storage", $document->getAttribute('size') * $value) // per function + ->addMetric("builds", $value) // per project + ->addMetric("builds.storage", $document->getAttribute('size') * $value) // per project + ; break; case $document->getCollection() === 'executions': - $queueForUsage->addMetric("{$document['functionId']}" . ".executions", $value); // per function - $queueForUsage->addMetric("{$document['functionId']}" . ".executions.compute", $document->getAttribute('duration') * $value); // per function - $queueForUsage->addMetric("executions", $value); // per project - $queueForUsage->addMetric("executions.compute", $document->getAttribute('duration') * $value); // per project + $queueForUsage + ->addMetric("{$document['functionId']}" . ".executions", $value) // per function + ->addMetric("{$document['functionId']}" . ".executions.compute", $document->getAttribute('duration') * $value) // per function + ->addMetric("executions", $value) // per project + ->addMetric("executions.compute", $document->getAttribute('duration') * $value) // per project + ; break; default: break; diff --git a/app/workers/usage.php b/app/workers/usage.php index f48cac9a6d..2b0c6f80c8 100644 --- a/app/workers/usage.php +++ b/app/workers/usage.php @@ -78,12 +78,16 @@ $server 'time' => $time, 'metric' => $metric['key'], 'value' => $metric['value'], - 'type' => 0, 'region' => App::getEnv('_APP_REGION', 'default'), ])); } else { //console::info("{$document->getAttribute('period')}, {$document->getAttribute('time')}, {$document->getAttribute('metric')} = {$value}"); - $adapter->decreaseDocumentAttribute('stats', $document->getId(), 'value', $metric['value']); + $adapter->decreaseDocumentAttribute( + 'stats', + $document->getId(), + 'value', + $metric['value'] + ); } } catch (\Exception $e) { console::error($e->getMessage());