1
0
Fork 0
mirror of synced 2024-06-14 00:34:51 +12:00

database usage stats working via labels

This commit is contained in:
Damodar Lohani 2022-08-10 02:33:46 +00:00
parent ebf3d813cb
commit 8aa7486e71
6 changed files with 66 additions and 37 deletions

View file

@ -459,7 +459,7 @@ App::post('/v1/databases/:databaseId/collections')
->label('scope', 'collections.write')
->label('audits.resource', 'database/{request.databaseId}/collection/{response.$id}')
->label('usage.metric', 'collections.{scope}.requests.create')
->label('usage.params', ['databaseId:request.databaseId'])
->label('usage.params', ['databaseId' => 'request.databaseId'])
->label('sdk.auth', [APP_AUTH_TYPE_KEY])
->label('sdk.namespace', 'databases')
->label('sdk.method', 'createCollection')
@ -522,7 +522,7 @@ App::get('/v1/databases/:databaseId/collections')
->groups(['api', 'database'])
->label('scope', 'collections.read')
->label('usage.metric', 'collections.{scope}.requests.read')
->label('usage.params', ['databaseId:request.databaseId'])
->label('usage.params', ['databaseId' => 'request.databaseId'])
->label('sdk.auth', [APP_AUTH_TYPE_KEY])
->label('sdk.namespace', 'databases')
->label('sdk.method', 'listCollections')
@ -573,7 +573,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId')
->groups(['api', 'database'])
->label('scope', 'collections.read')
->label('usage.metric', 'collections.{scope}.requests.create')
->label('usage.params', ['databaseId:request.databaseId'])
->label('usage.params', ['databaseId' => 'request.databaseId'])
->label('sdk.auth', [APP_AUTH_TYPE_KEY])
->label('sdk.namespace', 'databases')
->label('sdk.method', 'getCollection')
@ -700,7 +700,7 @@ App::put('/v1/databases/:databaseId/collections/:collectionId')
->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}')
->label('audits-payload', true)
->label('usage.metric', 'collections.{scope}.requests.update')
->label('usage.params', ['databaseId:request.databaseId'])
->label('usage.params', ['databaseId' => 'request.databaseId'])
->label('sdk.auth', [APP_AUTH_TYPE_KEY])
->label('sdk.namespace', 'databases')
->label('sdk.method', 'updateCollection')
@ -765,7 +765,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId')
->label('event', 'databases.[databaseId].collections.[collectionId].delete')
->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}')
->label('usage.metric', 'collections.{scope}.requests.delete')
->label('usage.params', ['databaseId:request.databaseId'])
->label('usage.params', ['databaseId' => 'request.databaseId'])
->label('sdk.auth', [APP_AUTH_TYPE_KEY])
->label('sdk.namespace', 'databases')
->label('sdk.method', 'deleteCollection')
@ -824,7 +824,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/string
->label('scope', 'collections.write')
->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}')
->label('usage.metric', 'collections.{scope}.requests.update')
->label('usage.params', ['databaseId:request.databaseId'])
->label('usage.params', ['databaseId' => 'request.databaseId'])
->label('sdk.auth', [APP_AUTH_TYPE_KEY])
->label('sdk.namespace', 'databases')
->label('sdk.method', 'createStringAttribute')
@ -871,7 +871,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/email'
->label('scope', 'collections.write')
->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}')
->label('usage.metric', 'collections.{scope}.requests.update')
->label('usage.params', ['databaseId:request.databaseId'])
->label('usage.params', ['databaseId' => 'request.databaseId'])
->label('sdk.namespace', 'databases')
->label('sdk.auth', [APP_AUTH_TYPE_KEY])
->label('sdk.method', 'createEmailAttribute')
@ -912,7 +912,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/enum')
->label('scope', 'collections.write')
->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}')
->label('usage.metric', 'collections.{scope}.requests.update')
->label('usage.params', ['databaseId:request.databaseId'])
->label('usage.params', ['databaseId' => 'request.databaseId'])
->label('sdk.namespace', 'databases')
->label('sdk.auth', [APP_AUTH_TYPE_KEY])
->label('sdk.method', 'createEnumAttribute')
@ -969,7 +969,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/ip')
->label('scope', 'collections.write')
->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}')
->label('usage.metric', 'collections.{scope}.requests.update')
->label('usage.params', ['databaseId:request.databaseId'])
->label('usage.params', ['databaseId' => 'request.databaseId'])
->label('sdk.namespace', 'databases')
->label('sdk.auth', [APP_AUTH_TYPE_KEY])
->label('sdk.method', 'createIpAttribute')
@ -1010,7 +1010,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/url')
->label('scope', 'collections.write')
->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}')
->label('usage.metric', 'collections.{scope}.requests.update')
->label('usage.params', ['databaseId:request.databaseId'])
->label('usage.params', ['databaseId' => 'request.databaseId'])
->label('sdk.namespace', 'databases')
->label('sdk.auth', [APP_AUTH_TYPE_KEY])
->label('sdk.method', 'createUrlAttribute')
@ -1051,7 +1051,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/intege
->label('scope', 'collections.write')
->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}')
->label('usage.metric', 'collections.{scope}.requests.update')
->label('usage.params', ['databaseId:request.databaseId'])
->label('usage.params', ['databaseId' => 'request.databaseId'])
->label('sdk.namespace', 'databases')
->label('sdk.auth', [APP_AUTH_TYPE_KEY])
->label('sdk.method', 'createIntegerAttribute')
@ -1121,7 +1121,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/float'
->label('scope', 'collections.write')
->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}')
->label('usage.metric', 'collections.{scope}.requests.update')
->label('usage.params', ['databaseId:request.databaseId'])
->label('usage.params', ['databaseId' => 'request.databaseId'])
->label('sdk.namespace', 'databases')
->label('sdk.auth', [APP_AUTH_TYPE_KEY])
->label('sdk.method', 'createFloatAttribute')
@ -1194,7 +1194,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/boolea
->label('scope', 'collections.write')
->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}')
->label('usage.metric', 'collections.{scope}.requests.update')
->label('usage.params', ['databaseId:request.databaseId'])
->label('usage.params', ['databaseId' => 'request.databaseId'])
->label('sdk.namespace', 'databases')
->label('sdk.auth', [APP_AUTH_TYPE_KEY])
->label('sdk.method', 'createBooleanAttribute')
@ -1232,7 +1232,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/attributes')
->groups(['api', 'database'])
->label('scope', 'collections.read')
->label('usage.metric', 'collections.{scope}.requests.read')
->label('usage.params', ['databaseId:request.databaseId'])
->label('usage.params', ['databaseId' => 'request.databaseId'])
->label('sdk.auth', [APP_AUTH_TYPE_KEY])
->label('sdk.namespace', 'databases')
->label('sdk.method', 'listAttributes')
@ -1271,7 +1271,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/attributes/:key')
->groups(['api', 'database'])
->label('scope', 'collections.read')
->label('usage.metric', 'collections.{scope}.requests.read')
->label('usage.params', ['databaseId:request.databaseId'])
->label('usage.params', ['databaseId' => 'request.databaseId'])
->label('sdk.auth', [APP_AUTH_TYPE_KEY])
->label('sdk.namespace', 'databases')
->label('sdk.method', 'getAttribute')
@ -1341,7 +1341,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/attributes/:key
->label('event', 'databases.[databaseId].collections.[collectionId].attributes.[attributeId].delete')
->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}')
->label('usage.metric', 'collections.{scope}.requests.update')
->label('usage.params', ['databaseId:request.databaseId'])
->label('usage.params', ['databaseId' => 'request.databaseId'])
->label('sdk.auth', [APP_AUTH_TYPE_KEY])
->label('sdk.namespace', 'databases')
->label('sdk.method', 'deleteAttribute')
@ -1430,7 +1430,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/indexes')
->label('scope', 'collections.write')
->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}')
->label('usage.metric', 'collections.{scope}.requests.update')
->label('usage.params', ['databaseId:request.databaseId'])
->label('usage.params', ['databaseId' => 'request.databaseId'])
->label('sdk.auth', [APP_AUTH_TYPE_KEY])
->label('sdk.namespace', 'databases')
->label('sdk.method', 'createIndex')
@ -1576,7 +1576,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/indexes')
->groups(['api', 'database'])
->label('scope', 'collections.read')
->label('usage.metric', 'collections.{scope}.requests.read')
->label('usage.params', ['databaseId:request.databaseId'])
->label('usage.params', ['databaseId' => 'request.databaseId'])
->label('sdk.auth', [APP_AUTH_TYPE_KEY])
->label('sdk.namespace', 'databases')
->label('sdk.method', 'listIndexes')
@ -1615,7 +1615,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/indexes/:key')
->groups(['api', 'database'])
->label('scope', 'collections.read')
->label('usage.metric', 'collections.{scope}.requests.read')
->label('usage.params', ['databaseId:request.databaseId'])
->label('usage.params', ['databaseId' => 'request.databaseId'])
->label('sdk.auth', [APP_AUTH_TYPE_KEY])
->label('sdk.namespace', 'databases')
->label('sdk.method', 'getIndex')
@ -1665,7 +1665,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/indexes/:key')
->label('event', 'databases.[databaseId].collections.[collectionId].indexes.[indexId].delete')
->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}')
->label('usage.metric', 'collections.{scope}.requests.update')
->label('usage.params', ['databaseId:request.databaseId'])
->label('usage.params', ['databaseId' => 'request.databaseId'])
->label('sdk.auth', [APP_AUTH_TYPE_KEY])
->label('sdk.namespace', 'databases')
->label('sdk.method', 'deleteIndex')
@ -1735,7 +1735,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/documents')
->label('scope', 'documents.write')
->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}')
->label('usage.metric', 'documents.{scope}.requests.create')
->label('usage.params', ['databaseId:request.databaseId', 'collectionId:request.collectionId'])
->label('usage.params', ['databaseId' => 'request.databaseId', 'collectionId' => 'request.collectionId'])
->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_KEY, APP_AUTH_TYPE_JWT])
->label('sdk.namespace', 'databases')
->label('sdk.method', 'createDocument')
@ -1846,7 +1846,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/documents')
->groups(['api', 'database'])
->label('scope', 'documents.read')
->label('usage.metric', 'documents.{scope}.requests.read')
->label('usage.params', ['databaseId:request.databaseId', 'collectionId:request.collectionId'])
->label('usage.params', ['databaseId' => 'request.databaseId', 'collectionId' => 'request.collectionId'])
->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_KEY, APP_AUTH_TYPE_JWT])
->label('sdk.namespace', 'databases')
->label('sdk.method', 'listDocuments')
@ -1955,7 +1955,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/documents/:documen
->groups(['api', 'database'])
->label('scope', 'documents.read')
->label('usage.metric', 'documents.{scope}.requests.read')
->label('usage.params', ['databaseId:request.databaseId', 'collectionId:request.collectionId'])
->label('usage.params', ['databaseId' => 'request.databaseId', 'collectionId' => 'request.collectionId'])
->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_KEY, APP_AUTH_TYPE_JWT])
->label('sdk.namespace', 'databases')
->label('sdk.method', 'getDocument')
@ -2116,7 +2116,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/documents/:docum
->label('scope', 'documents.write')
->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}/document/{response.$id}')
->label('usage.metric', 'documents.{scope}.requests.update')
->label('usage.params', ['databaseId:request.databaseId', 'collectionId:request.collectionId'])
->label('usage.params', ['databaseId' => 'request.databaseId', 'collectionId' => 'request.collectionId'])
->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_KEY, APP_AUTH_TYPE_JWT])
->label('sdk.namespace', 'databases')
->label('sdk.method', 'updateDocument')
@ -2245,7 +2245,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/documents/:docu
->label('event', 'databases.[databaseId].collections.[collectionId].documents.[documentId].delete')
->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}/document/{request.documentId}')
->label('usage.metric', 'documents.{scope}.requests.delete')
->label('usage.params', ['databaseId:request.databaseId', 'collectionId:request.collectionId'])
->label('usage.params', ['databaseId' => 'request.databaseId', 'collectionId' => 'request.collectionId'])
->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_KEY, APP_AUTH_TYPE_JWT])
->label('sdk.namespace', 'databases')
->label('sdk.method', 'deleteDocument')

View file

@ -346,6 +346,34 @@ App::shutdown()
// && $mode !== APP_MODE_ADMIN // TODO: add check to make sure user is admin
&& !empty($route->getLabel('sdk.namespace', null))
) { // Don't calculate console usage on admin mode
$metric = $route->getLabel('usage.metric', '');
$params = $route->getLabel('usage.params', []);
if(!empty($metric)) {
$usage->setParam($metric, 1);
foreach ($params as $param => $value) {
$parts = explode('.',$value);
$namespace = $parts[0];
$key = $parts[1];
switch ($namespace) {
case 'response':
$params = $responsePayload;
break;
case 'request':
$params = $getRequestParams();
break;
default:
$params = $responsePayload;
}
if(array_key_exists($key, $params)){
$usage->setParam($param, $params[$key]);
}
}
}
$usage
->setParam('networkRequestSize', $request->getSize() + $usage->getParam('storage'))
->setParam('networkResponseSize', $response->getSize())

View file

@ -2,6 +2,7 @@
namespace Appwrite\Usage;
abstract class Calculator {
abstract class Calculator
{
abstract public function collect(): void;
}
}

View file

@ -6,8 +6,8 @@ use Utopia\Database\Database as UtopiaDatabase;
use Utopia\Database\Document;
use Utopia\Database\Query;
class Aggregator extends Database {
class Aggregator extends Database
{
protected function aggregateDatabaseMetrics(string $projectId): void
{
$this->database->setNamespace('_' . $projectId);
@ -123,7 +123,7 @@ class Aggregator extends Database {
'builds.$all.compute.time',
];
foreach ($functionsGeneralMetrics as $metric) {
foreach ($functionsGeneralMetrics as $metric) {
$this->aggregateDailyMetric($projectId, $metric);
$this->aggregateMonthlyMetric($projectId, $metric);
}
@ -226,4 +226,4 @@ class Aggregator extends Database {
$this->aggregateUsersMetrics($projectId);
});
}
}
}

View file

@ -157,7 +157,7 @@ class Database extends Calculator
$sum = $this->database->sum($collection, $attribute);
$sum = (int) ($sum * $multiplier);
if(!is_null($metric)) {
if (!is_null($metric)) {
$this->createPerPeriodMetric($projectId, $metric, $sum);
}
return $sum;
@ -187,7 +187,7 @@ class Database extends Calculator
try {
$count = $this->database->count($collection);
if(!is_null($metric)) {
if (!is_null($metric)) {
$this->createPerPeriodMetric($projectId, (string) $metric, $count);
}
return $count;

View file

@ -8,8 +8,8 @@ use Utopia\Database\Document;
use InfluxDB\Database as InfluxDatabase;
use DateTime;
class TimeSeries extends Calculator {
class TimeSeries extends Calculator
{
protected InfluxDatabase $influxDB;
protected Database $database;
protected $errorHandler;
@ -158,7 +158,7 @@ class TimeSeries extends Calculator {
'files.$all.requests.delete' => [
'table' => 'appwrite_usage_files_{scope}_requests_delete',
],
'files.bucketId.requests.create' => [
'table' => 'appwrite_usage_files_{scope}_requests_create',
'groupBy' => ['bucketId'],
@ -423,4 +423,4 @@ class TimeSeries extends Calculator {
}
}
}
}
}