1
0
Fork 0
mirror of synced 2024-07-12 18:05:55 +12:00

fix aggregrator

This commit is contained in:
Damodar Lohani 2022-10-23 02:20:26 +00:00
parent e75dfa882b
commit 084b4e8c08

View file

@ -9,7 +9,7 @@ use Utopia\Database\Query;
class Aggregator extends Database class Aggregator extends Database
{ {
protected function aggregateDatabaseMetrics(Document $project): void protected function aggregateDatabaseMetrics(UtopiaDatabase $database, Document $project): void
{ {
$databasesGeneralMetrics = [ $databasesGeneralMetrics = [
'databases.$all.requests.create', 'databases.$all.requests.create',
@ -27,8 +27,8 @@ class Aggregator extends Database
]; ];
foreach ($databasesGeneralMetrics as $metric) { foreach ($databasesGeneralMetrics as $metric) {
$this->aggregateDailyMetric($project, $metric); $this->aggregateDailyMetric($database, $project, $metric);
$this->aggregateMonthlyMetric($project, $metric); $this->aggregateMonthlyMetric($database, $project, $metric);
} }
$databasesDatabaseMetrics = [ $databasesDatabaseMetrics = [
@ -42,12 +42,12 @@ class Aggregator extends Database
'documents.databaseId.requests.delete', 'documents.databaseId.requests.delete',
]; ];
$this->foreachDocument($project, 'databases', [], function (Document $database) use ($databasesDatabaseMetrics, $project) { $this->foreachDocument($project, 'databases', [], function (Document $db) use ($databasesDatabaseMetrics, $project, $database) {
$databaseId = $database->getId(); $databaseId = $db->getId();
foreach ($databasesDatabaseMetrics as $metric) { foreach ($databasesDatabaseMetrics as $metric) {
$metric = str_replace('databaseId', $databaseId, $metric); $metric = str_replace('databaseId', $databaseId, $metric);
$this->aggregateDailyMetric($project, $metric); $this->aggregateDailyMetric($database, $project, $metric);
$this->aggregateMonthlyMetric($project, $metric); $this->aggregateMonthlyMetric($database, $project, $metric);
} }
$databasesCollectionMetrics = [ $databasesCollectionMetrics = [
@ -57,18 +57,18 @@ class Aggregator extends Database
'documents.' . $databaseId . '/collectionId.requests.delete', 'documents.' . $databaseId . '/collectionId.requests.delete',
]; ];
$this->foreachDocument($project, 'database_' . $database->getInternalId(), [], function (Document $collection) use ($databasesCollectionMetrics, $project) { $this->foreachDocument($project, 'database_' . $db->getInternalId(), [], function (Document $collection) use ($databasesCollectionMetrics, $project, $database) {
$collectionId = $collection->getId(); $collectionId = $collection->getId();
foreach ($databasesCollectionMetrics as $metric) { foreach ($databasesCollectionMetrics as $metric) {
$metric = str_replace('collectionId', $collectionId, $metric); $metric = str_replace('collectionId', $collectionId, $metric);
$this->aggregateDailyMetric($project, $metric); $this->aggregateDailyMetric($database, $project, $metric);
$this->aggregateMonthlyMetric($project, $metric); $this->aggregateMonthlyMetric($database, $project, $metric);
} }
}); });
}); });
} }
protected function aggregateStorageMetrics(Document $project): void protected function aggregateStorageMetrics(UtopiaDatabase $database, Document $project): void
{ {
$storageGeneralMetrics = [ $storageGeneralMetrics = [
'buckets.$all.requests.create', 'buckets.$all.requests.create',
@ -82,8 +82,8 @@ class Aggregator extends Database
]; ];
foreach ($storageGeneralMetrics as $metric) { foreach ($storageGeneralMetrics as $metric) {
$this->aggregateDailyMetric($project, $metric); $this->aggregateDailyMetric($database, $project, $metric);
$this->aggregateMonthlyMetric($project, $metric); $this->aggregateMonthlyMetric($database, $project, $metric);
} }
$storageBucketMetrics = [ $storageBucketMetrics = [
@ -93,17 +93,17 @@ class Aggregator extends Database
'files.bucketId.requests.delete', 'files.bucketId.requests.delete',
]; ];
$this->foreachDocument($project, 'buckets', [], function (Document $bucket) use ($storageBucketMetrics, $project) { $this->foreachDocument($project, 'buckets', [], function (Document $bucket) use ($storageBucketMetrics, $project, $database) {
$bucketId = $bucket->getId(); $bucketId = $bucket->getId();
foreach ($storageBucketMetrics as $metric) { foreach ($storageBucketMetrics as $metric) {
$metric = str_replace('bucketId', $bucketId, $metric); $metric = str_replace('bucketId', $bucketId, $metric);
$this->aggregateDailyMetric($project, $metric); $this->aggregateDailyMetric($database, $project, $metric);
$this->aggregateMonthlyMetric($project, $metric); $this->aggregateMonthlyMetric($database, $project, $metric);
} }
}); });
} }
protected function aggregateFunctionMetrics(Document $project): void protected function aggregateFunctionMetrics(UtopiaDatabase $database, Document $project): void
{ {
$functionsGeneralMetrics = [ $functionsGeneralMetrics = [
'project.$all.compute.total', 'project.$all.compute.total',
@ -119,8 +119,8 @@ class Aggregator extends Database
]; ];
foreach ($functionsGeneralMetrics as $metric) { foreach ($functionsGeneralMetrics as $metric) {
$this->aggregateDailyMetric($project, $metric); $this->aggregateDailyMetric($database, $project, $metric);
$this->aggregateMonthlyMetric($project, $metric); $this->aggregateMonthlyMetric($database, $project, $metric);
} }
$functionMetrics = [ $functionMetrics = [
@ -134,17 +134,17 @@ class Aggregator extends Database
'builds.functionId.compute.time', 'builds.functionId.compute.time',
]; ];
$this->foreachDocument($project, 'functions', [], function (Document $function) use ($functionMetrics, $project) { $this->foreachDocument($project, 'functions', [], function (Document $function) use ($functionMetrics, $project, $database) {
$functionId = $function->getId(); $functionId = $function->getId();
foreach ($functionMetrics as $metric) { foreach ($functionMetrics as $metric) {
$metric = str_replace('functionId', $functionId, $metric); $metric = str_replace('functionId', $functionId, $metric);
$this->aggregateDailyMetric($project, $metric); $this->aggregateDailyMetric($database, $project, $metric);
$this->aggregateMonthlyMetric($project, $metric); $this->aggregateMonthlyMetric($database, $project, $metric);
} }
}); });
} }
protected function aggregateUsersMetrics(Document $project): void protected function aggregateUsersMetrics(UtopiaDatabase $database, Document $project): void
{ {
$metrics = [ $metrics = [
'users.$all.requests.create', 'users.$all.requests.create',
@ -156,24 +156,24 @@ class Aggregator extends Database
]; ];
foreach ($metrics as $metric) { foreach ($metrics as $metric) {
$this->aggregateDailyMetric($project, $metric); $this->aggregateDailyMetric($database, $project, $metric);
$this->aggregateMonthlyMetric($project, $metric); $this->aggregateMonthlyMetric($database, $project, $metric);
} }
} }
protected function aggregateGeneralMetrics(Document $project): void protected function aggregateGeneralMetrics(UtopiaDatabase $database, Document $project): void
{ {
$this->aggregateDailyMetric($project, 'project.$all.network.requests'); $this->aggregateDailyMetric($database, $project, 'project.$all.network.requests');
$this->aggregateDailyMetric($project, 'project.$all.network.bandwidth'); $this->aggregateDailyMetric($database, $project, 'project.$all.network.bandwidth');
$this->aggregateDailyMetric($project, 'project.$all.network.inbound'); $this->aggregateDailyMetric($database, $project, 'project.$all.network.inbound');
$this->aggregateDailyMetric($project, 'project.$all.network.outbound'); $this->aggregateDailyMetric($database, $project, 'project.$all.network.outbound');
$this->aggregateMonthlyMetric($project, 'project.$all.network.requests'); $this->aggregateMonthlyMetric($database, $project, 'project.$all.network.requests');
$this->aggregateMonthlyMetric($project, 'project.$all.network.bandwidth'); $this->aggregateMonthlyMetric($database, $project, 'project.$all.network.bandwidth');
$this->aggregateMonthlyMetric($project, 'project.$all.network.inbound'); $this->aggregateMonthlyMetric($database, $project, 'project.$all.network.inbound');
$this->aggregateMonthlyMetric($project, 'project.$all.network.outbound'); $this->aggregateMonthlyMetric($database, $project, 'project.$all.network.outbound');
} }
protected function aggregateDailyMetric(Document $project, string $metric): void protected function aggregateDailyMetric(UtopiaDatabase $database, Document $project, string $metric): void
{ {
$beginOfDay = DateTime::createFromFormat('Y-m-d\TH:i:s.v', \date('Y-m-d\T00:00:00.000'))->format(DateTime::RFC3339); $beginOfDay = DateTime::createFromFormat('Y-m-d\TH:i:s.v', \date('Y-m-d\T00:00:00.000'))->format(DateTime::RFC3339);
$endOfDay = DateTime::createFromFormat('Y-m-d\TH:i:s.v', \date('Y-m-d\T23:59:59.999'))->format(DateTime::RFC3339); $endOfDay = DateTime::createFromFormat('Y-m-d\TH:i:s.v', \date('Y-m-d\T23:59:59.999'))->format(DateTime::RFC3339);
@ -188,7 +188,7 @@ class Aggregator extends Database
$this->createOrUpdateMetric($database, $project->getId(), $metric, '1d', $beginOfDay, $value); $this->createOrUpdateMetric($database, $project->getId(), $metric, '1d', $beginOfDay, $value);
} }
protected function aggregateMonthlyMetric(Document $project, string $metric): void protected function aggregateMonthlyMetric(UtopiaDatabase $database, Document $project, string $metric): void
{ {
$beginOfMonth = DateTime::createFromFormat('Y-m-d\TH:i:s.v', \date('Y-m-01\T00:00:00.000'))->format(DateTime::RFC3339); $beginOfMonth = DateTime::createFromFormat('Y-m-d\TH:i:s.v', \date('Y-m-01\T00:00:00.000'))->format(DateTime::RFC3339);
$endOfMonth = DateTime::createFromFormat('Y-m-d\TH:i:s.v', \date('Y-m-t\T23:59:59.999'))->format(DateTime::RFC3339); $endOfMonth = DateTime::createFromFormat('Y-m-d\TH:i:s.v', \date('Y-m-t\T23:59:59.999'))->format(DateTime::RFC3339);
@ -211,11 +211,12 @@ class Aggregator extends Database
public function collect(): void public function collect(): void
{ {
$this->foreachDocument(new Document(['$id' => 'console']), 'projects', [], function (Document $project) { $this->foreachDocument(new Document(['$id' => 'console']), 'projects', [], function (Document $project) {
$this->aggregateGeneralMetrics($project); $database = call_user_func($this->getProjectDB, $project);
$this->aggregateFunctionMetrics($project); $this->aggregateGeneralMetrics($database, $project);
$this->aggregateDatabaseMetrics($project); $this->aggregateFunctionMetrics($database, $project);
$this->aggregateStorageMetrics($project); $this->aggregateDatabaseMetrics($database, $project);
$this->aggregateUsersMetrics($project); $this->aggregateStorageMetrics($database, $project);
$this->aggregateUsersMetrics($database, $project);
}); });
} }
} }