1
0
Fork 0
mirror of synced 2024-07-06 23:21:05 +12: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 = [];
$days = $periods[$range];
$metrics = [
$database->getId() . '.collections',
$database->getId() . '.documents',
$database->getInternalId() . '.collections',
$database->getInternalId() . '.documents',
];
Authorization::skip(function () use ($dbForProject, $days, $metrics, &$stats) {
@ -2490,7 +2490,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/usage')
$stats = $usage = [];
$days = $periods[$range];
$metrics = [
$collection->getId() . '.documents',
$collectionDocument->getInternalId() . '.documents',
];
Authorization::skip(function () use ($dbForProject, $days, $metrics, &$stats) {

View file

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

View file

@ -1439,8 +1439,8 @@ App::get('/v1/storage/:bucketId/usage')
$stats = $usage = [];
$days = $periods[$range];
$metrics = [
$bucket->getId() . '.files',
$bucket->getId() . '.files.storage',
$bucket->getInternalId() . '.files',
$bucket->getInternalId() . '.files.storage',
];
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
if ($event === Database::EVENT_DOCUMENT_DELETE) {
$sessions = count($document->getAttribute('sessions'));
$queueForUsage
->addMetric("sessions", ($sessions * -1)); // per project
if (!empty($sessions)) {
$queueForUsage
->addMetric("sessions", ($sessions * -1)); // per project
}
}
break;
case $document->getCollection() === 'sessions': // sessions
@ -89,12 +91,13 @@ $databaseListener = function (string $event, Document $document, Document $proje
if ($event === Database::EVENT_DOCUMENT_DELETE) {
//Project level collections/documents deduction
$collections = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getAttribute('$internalId')}" . ".collections"));
$documents = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getAttribute('$internalId')}" . ".documents"));
$queueForUsage
->addMetric("collections", ($collections['value'] * -1))
->addMetric("documents", ($documents['value'] * -1))
;
$collections = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getInternalId()}" . ".collections"));
$documents = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getInternalId()}" . ".documents"));
if (!empty($collections['value'])) {
$queueForUsage
->addMetric("collections", ($collections['value'] * -1))
->addMetric("documents", ($documents['value'] * -1));
}
}
break;
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) {
//Project documents deduction
$documents = $dbForProject->getDocument('stats', md5("_inf_" . "{$databaseId}" . ".documents"));
$queueForUsage
->addMetric("documents", ($documents['value'] * -1))
;
if (!empty($documents['value'])) {
$queueForUsage
->addMetric("documents", ($documents['value'] * -1));
}
}
break;
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
if ($event === Database::EVENT_DOCUMENT_DELETE) {
$files = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getAttribute('$internalId')}" . ".files"));
$storage = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getAttribute('$internalId')}" . ".files.storage"));
//Project files/files.storage deduction
$files = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getInternalId()}" . ".files"));
$storage = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getInternalId()}" . ".files.storage"));
//Project level function deduction
$queueForUsage
->addMetric("files", ($files['value'] * -1))
->addMetric("files.storage", ($storage['value'] * -1))
;
if (!empty($files['value'])) {
$queueForUsage
->addMetric("files", ($files['value'] * -1))
->addMetric("files.storage", ($storage['value'] * -1));
}
}
break;
case str_starts_with($document->getCollection(), 'bucket_'): // files
$parts = explode('_', $document->getCollection());
$bucketId = $parts[1];
$queueForUsage
->addMetric("files", $value) // per project
->addMetric("files.storage", $document->getAttribute('sizeOriginal') * $value) // per project
->addMetric("{$document->getAttribute('bucketId')}" . ".files", $value) // per bucket
->addMetric("{$document->getAttribute('bucketId')}" . ".files.storage", $document->getAttribute('sizeOriginal') * $value)// per bucket
->addMetric("{$bucketId}" . ".files", $value) // per bucket
->addMetric("{$bucketId}" . ".files.storage", $document->getAttribute('sizeOriginal') * $value)// per bucket
;
break;
case $document->getCollection() === 'functions':
@ -151,24 +158,36 @@ $databaseListener = function (string $event, Document $document, Document $proje
->addMetric("functions", $value); // per project
if ($event === Database::EVENT_DOCUMENT_DELETE) {
//Project level function deduction
$deployments = $dbForProject->getDocument('stats', md5("_inf_function." . "{$document->getAttribute('$internalId')}" . ".deployments"));
$deploymentsStorage = $dbForProject->getDocument('stats', md5("_inf_function." . "{$document->getAttribute('$internalId')}" . ".deployments.storage"));
$builds = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getAttribute('$internalId')}" . ".builds"));
$buildsStorage = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getAttribute('$internalId')}" . ".builds.storage"));
$buildsCompute = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getAttribute('$internalId')}" . ".builds.compute"));
$executions = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getAttribute('$internalId')}" . ".executions"));
$executionsCompute = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getAttribute('$internalId')}" . ".executions.compute"));
//Project level function/builds/executions deduction
$deployments = $dbForProject->getDocument('stats', md5("_inf_function." . "{$document->getInternalId()}" . ".deployments"));
$deploymentsStorage = $dbForProject->getDocument('stats', md5("_inf_function." . "{$document->getInternalId()}" . ".deployments.storage"));
$builds = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getInternalId()}" . ".builds"));
$buildsStorage = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getInternalId()}" . ".builds.storage"));
$buildsCompute = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getInternalId()}" . ".builds.compute"));
$executions = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getInternalId()}" . ".executions"));
$executionsCompute = $dbForProject->getDocument('stats', md5("_inf_" . "{$document->getInternalId()}" . ".executions.compute"));
$queueForUsage
->addMetric("deployments", ($deployments['value'] * -1))
->addMetric("deployments.storage", ($deploymentsStorage['value'] * -1))
->addMetric("builds", ($builds['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($deployments['value'])) {
$queueForUsage
->addMetric("deployments", ($deployments['value'] * -1))
->addMetric("deployments.storage", ($deploymentsStorage['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;
case $document->getCollection() === 'deployments':
@ -556,7 +575,7 @@ App::shutdown()
if (
$project->getId() !== 'console'
//&& $mode !== APP_MODE_ADMIN
&& $mode !== APP_MODE_ADMIN
) {
$fileSize = 0;
$file = $request->getFiles('file');

View file

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