1
0
Fork 0
mirror of synced 2024-10-05 12:43:13 +13:00

refactor usage worker

This commit is contained in:
shimon 2022-12-22 15:02:41 +02:00
parent 18f7b3adbb
commit 20f9b0c655
5 changed files with 78 additions and 61 deletions

View file

@ -2411,8 +2411,8 @@ App::get('/v1/databases/:databaseId/usage')
$stats = $usage = []; $stats = $usage = [];
$days = $periods[$range]; $days = $periods[$range];
$metrics = [ $metrics = [
$database->getId() . '.collections', $database->getInternalId() . '.collections',
$database->getId() . '.documents', $database->getInternalId() . '.documents',
]; ];
Authorization::skip(function () use ($dbForProject, $days, $metrics, &$stats) { Authorization::skip(function () use ($dbForProject, $days, $metrics, &$stats) {
@ -2490,7 +2490,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/usage')
$stats = $usage = []; $stats = $usage = [];
$days = $periods[$range]; $days = $periods[$range];
$metrics = [ $metrics = [
$collection->getId() . '.documents', $collectionDocument->getInternalId() . '.documents',
]; ];
Authorization::skip(function () use ($dbForProject, $days, $metrics, &$stats) { Authorization::skip(function () use ($dbForProject, $days, $metrics, &$stats) {

View file

@ -1384,11 +1384,11 @@ App::get('/v1/functions/:functionId/usage')
$metrics = [ $metrics = [
'functions.' . $function->getId() . '.deployments', 'functions.' . $function->getId() . '.deployments',
'functions.' . $function->getId() . '.deployments.storage', 'functions.' . $function->getId() . '.deployments.storage',
$function->getId() . '.builds', $function->getInternalId() . '.builds',
$function->getId() . '.builds.storage', $function->getInternalId() . '.builds.storage',
$function->getId() . '.builds.compute', $function->getInternalId() . '.builds.compute',
$function->getId() . '.executions', $function->getInternalId() . '.executions',
$function->getId() . '.executions.compute', $function->getInternalId() . '.executions.compute',
]; ];
Authorization::skip(function () use ($dbForProject, $days, $metrics, &$stats) { Authorization::skip(function () use ($dbForProject, $days, $metrics, &$stats) {

View file

@ -1439,8 +1439,8 @@ App::get('/v1/storage/:bucketId/usage')
$stats = $usage = []; $stats = $usage = [];
$days = $periods[$range]; $days = $periods[$range];
$metrics = [ $metrics = [
$bucket->getId() . '.files', $bucket->getInternalId() . '.files',
$bucket->getId() . '.files.storage', $bucket->getInternalId() . '.files.storage',
]; ];
Authorization::skip(function () use ($dbForProject, $days, $metrics, &$stats) { Authorization::skip(function () use ($dbForProject, $days, $metrics, &$stats) {

View file

@ -75,8 +75,10 @@ $databaseListener = function (string $event, Document $document, Document $proje
//Project level sessions deduction //Project level sessions deduction
if ($event === Database::EVENT_DOCUMENT_DELETE) { if ($event === Database::EVENT_DOCUMENT_DELETE) {
$sessions = count($document->getAttribute('sessions')); $sessions = count($document->getAttribute('sessions'));
$queueForUsage if (!empty($sessions)) {
->addMetric("sessions", ($sessions * -1)); // per project $queueForUsage
->addMetric("sessions", ($sessions * -1)); // per project
}
} }
break; break;
case $document->getCollection() === 'sessions': // sessions case $document->getCollection() === 'sessions': // sessions
@ -89,12 +91,13 @@ $databaseListener = function (string $event, Document $document, Document $proje
if ($event === Database::EVENT_DOCUMENT_DELETE) { if ($event === Database::EVENT_DOCUMENT_DELETE) {
//Project level collections/documents deduction //Project level collections/documents deduction
$collections = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getAttribute('$internalId')}" . ".collections")); $collections = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getInternalId()}" . ".collections"));
$documents = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getAttribute('$internalId')}" . ".documents")); $documents = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getInternalId()}" . ".documents"));
$queueForUsage if (!empty($collections['value'])) {
->addMetric("collections", ($collections['value'] * -1)) $queueForUsage
->addMetric("documents", ($documents['value'] * -1)) ->addMetric("collections", ($collections['value'] * -1))
; ->addMetric("documents", ($documents['value'] * -1));
}
} }
break; break;
case str_starts_with($document->getCollection(), 'database_') && !str_contains($document->getCollection(), 'collection'): //collections case str_starts_with($document->getCollection(), 'database_') && !str_contains($document->getCollection(), 'collection'): //collections
@ -108,9 +111,10 @@ $databaseListener = function (string $event, Document $document, Document $proje
if ($event === Database::EVENT_DOCUMENT_DELETE) { if ($event === Database::EVENT_DOCUMENT_DELETE) {
//Project documents deduction //Project documents deduction
$documents = $dbForProject->getDocument('stats', md5("_inf_" . "{$databaseId}" . ".documents")); $documents = $dbForProject->getDocument('stats', md5("_inf_" . "{$databaseId}" . ".documents"));
$queueForUsage if (!empty($documents['value'])) {
->addMetric("documents", ($documents['value'] * -1)) $queueForUsage
; ->addMetric("documents", ($documents['value'] * -1));
}
} }
break; break;
case str_starts_with($document->getCollection(), 'database_') && str_contains($document->getCollection(), '_collection_'): //documents case str_starts_with($document->getCollection(), 'database_') && str_contains($document->getCollection(), '_collection_'): //documents
@ -128,22 +132,25 @@ $databaseListener = function (string $event, Document $document, Document $proje
->addMetric("buckets", $value); // per project ->addMetric("buckets", $value); // per project
if ($event === Database::EVENT_DOCUMENT_DELETE) { if ($event === Database::EVENT_DOCUMENT_DELETE) {
$files = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getAttribute('$internalId')}" . ".files")); //Project files/files.storage deduction
$storage = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getAttribute('$internalId')}" . ".files.storage")); $files = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getInternalId()}" . ".files"));
$storage = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getInternalId()}" . ".files.storage"));
//Project level function deduction if (!empty($files['value'])) {
$queueForUsage $queueForUsage
->addMetric("files", ($files['value'] * -1)) ->addMetric("files", ($files['value'] * -1))
->addMetric("files.storage", ($storage['value'] * -1)) ->addMetric("files.storage", ($storage['value'] * -1));
; }
} }
break; break;
case str_starts_with($document->getCollection(), 'bucket_'): // files case str_starts_with($document->getCollection(), 'bucket_'): // files
$parts = explode('_', $document->getCollection());
$bucketId = $parts[1];
$queueForUsage $queueForUsage
->addMetric("files", $value) // per project ->addMetric("files", $value) // per project
->addMetric("files.storage", $document->getAttribute('sizeOriginal') * $value) // per project ->addMetric("files.storage", $document->getAttribute('sizeOriginal') * $value) // per project
->addMetric("{$document->getAttribute('bucketId')}" . ".files", $value) // per bucket ->addMetric("{$bucketId}" . ".files", $value) // per bucket
->addMetric("{$document->getAttribute('bucketId')}" . ".files.storage", $document->getAttribute('sizeOriginal') * $value)// per bucket ->addMetric("{$bucketId}" . ".files.storage", $document->getAttribute('sizeOriginal') * $value)// per bucket
; ;
break; break;
case $document->getCollection() === 'functions': case $document->getCollection() === 'functions':
@ -151,24 +158,36 @@ $databaseListener = function (string $event, Document $document, Document $proje
->addMetric("functions", $value); // per project ->addMetric("functions", $value); // per project
if ($event === Database::EVENT_DOCUMENT_DELETE) { if ($event === Database::EVENT_DOCUMENT_DELETE) {
//Project level function deduction //Project level function/builds/executions deduction
$deployments = $dbForProject->getDocument('stats', md5("_inf_function." . "{$document->getAttribute('$internalId')}" . ".deployments")); $deployments = $dbForProject->getDocument('stats', md5("_inf_function." . "{$document->getInternalId()}" . ".deployments"));
$deploymentsStorage = $dbForProject->getDocument('stats', md5("_inf_function." . "{$document->getAttribute('$internalId')}" . ".deployments.storage")); $deploymentsStorage = $dbForProject->getDocument('stats', md5("_inf_function." . "{$document->getInternalId()}" . ".deployments.storage"));
$builds = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getAttribute('$internalId')}" . ".builds")); $builds = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getInternalId()}" . ".builds"));
$buildsStorage = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getAttribute('$internalId')}" . ".builds.storage")); $buildsStorage = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getInternalId()}" . ".builds.storage"));
$buildsCompute = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getAttribute('$internalId')}" . ".builds.compute")); $buildsCompute = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getInternalId()}" . ".builds.compute"));
$executions = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getAttribute('$internalId')}" . ".executions")); $executions = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getInternalId()}" . ".executions"));
$executionsCompute = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getAttribute('$internalId')}" . ".executions.compute")); $executionsCompute = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getInternalId()}" . ".executions.compute"));
$queueForUsage if (!empty($deployments['value'])) {
->addMetric("deployments", ($deployments['value'] * -1)) $queueForUsage
->addMetric("deployments.storage", ($deploymentsStorage['value'] * -1)) ->addMetric("deployments", ($deployments['value'] * -1))
->addMetric("builds", ($builds['value'] * -1)) ->addMetric("deployments.storage", ($deploymentsStorage['value'] * -1))
->addMetric("builds.storage", ($buildsStorage['value'] * -1)) ;
->addMetric("builds.compute", ($buildsCompute['value'] * -1)) }
->addMetric("executions", ($executions['value'] * -1))
->addMetric("executions.compute", ($executionsCompute['value'] * -1)) if (!empty($builds['value'])) {
; $queueForUsage
->addMetric("builds", ($builds['value'] * -1))
->addMetric("builds.storage", ($buildsStorage['value'] * -1))
->addMetric("builds.compute", ($buildsCompute['value'] * -1))
;
}
if (!empty($executions['value'])) {
$queueForUsage
->addMetric("executions", ($executions['value'] * -1))
->addMetric("executions.compute", ($executionsCompute['value'] * -1))
;
}
} }
break; break;
case $document->getCollection() === 'deployments': case $document->getCollection() === 'deployments':
@ -556,7 +575,7 @@ App::shutdown()
if ( if (
$project->getId() !== 'console' $project->getId() !== 'console'
//&& $mode !== APP_MODE_ADMIN && $mode !== APP_MODE_ADMIN
) { ) {
$fileSize = 0; $fileSize = 0;
$file = $request->getFiles('file'); $file = $request->getFiles('file');

View file

@ -111,11 +111,7 @@ class UsageTest extends Scope
$consoleHeaders $consoleHeaders
); );
$res = $res['body']; $res = $res['body'];
var_dump($res['users']);
var_dump(array_key_last($res['users']));
var_dump($res['users'][array_key_last($res['users'])]['value']);
exit;
$this->assertEquals('24h', $res['range']); $this->assertEquals('24h', $res['range']);
$this->assertEquals(9, count($res)); $this->assertEquals(9, count($res));
$this->assertEquals(24, count($res['requests'])); $this->assertEquals(24, count($res['requests']));
@ -162,7 +158,9 @@ class UsageTest extends Scope
'/storage/buckets', '/storage/buckets',
array_merge( array_merge(
$headers, $headers,
['content-type' => 'multipart/form-data'] [
'content-type' => 'multipart/form-data'
]
), ),
[ [
'bucketId' => 'unique()', 'bucketId' => 'unique()',
@ -517,14 +515,14 @@ class UsageTest extends Scope
$this->assertEquals($collectionsCount, $res['collectionsCount'][array_key_last($res['collectionsCount'])]['value']); $this->assertEquals($collectionsCount, $res['collectionsCount'][array_key_last($res['collectionsCount'])]['value']);
$this->validateDates($res['collectionsCount']); $this->validateDates($res['collectionsCount']);
// $this->assertEquals($documentsCount, $res['documentsCount'][array_key_last($res['documentsCount'])]['value']); $this->assertEquals($documentsCount, $res['documentsCount'][array_key_last($res['documentsCount'])]['value']);
// $this->validateDates($res['documentsCount']); $this->validateDates($res['documentsCount']);
//
// $res = $this->client->call(Client::METHOD_GET, '/databases/' . $databaseId . '/collections/' . $collectionId . '/usage?range=30d', $data['consoleHeaders']); $res = $this->client->call(Client::METHOD_GET, '/databases/' . $databaseId . '/collections/' . $collectionId . '/usage?range=30d', $data['consoleHeaders']);
// $res = $res['body']; $res = $res['body'];
//
// $this->assertEquals($documentsCount, $res['documentsCount'][array_key_last($res['documentsCount'])]['value']); $this->assertEquals($documentsCount, $res['documentsCount'][array_key_last($res['documentsCount'])]['value']);
// $this->validateDates($res['documentsCount']); $this->validateDates($res['documentsCount']);
$data['requestsCount'] = $requestsCount; $data['requestsCount'] = $requestsCount;