users usage

This commit is contained in:
shimon
2022-12-11 11:06:19 +02:00
parent ba04f845da
commit 52c2cefdb5
2 changed files with 50 additions and 127 deletions
+48 -84
View File
@@ -1080,96 +1080,60 @@ App::get('/v1/users/usage')
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
->label('sdk.response.model', Response::MODEL_USAGE_USERS)
->param('range', '30d', new WhiteList(['24h', '7d', '30d', '90d'], true), 'Date range.', true)
->param('provider', '', new WhiteList(\array_merge(['email', 'anonymous'], \array_map(fn ($value) => "oauth-" . $value, \array_keys(Config::getParam('providers', [])))), true), 'Provider Name.', true)
->inject('response')
->inject('dbForProject')
->inject('register')
->action(function (string $range, string $provider, Response $response, Database $dbForProject) {
->action(function (string $range, Response $response, Database $dbForProject) {
// $usage = [];
// if (App::getEnv('_APP_USAGE_STATS', 'enabled') == 'enabled') {
// $periods = [
// '24h' => [
// 'period' => '1h',
// 'limit' => 24,
// ],
// '7d' => [
// 'period' => '1d',
// 'limit' => 7,
// ],
// '30d' => [
// 'period' => '1d',
// 'limit' => 30,
// ],
// '90d' => [
// 'period' => '1d',
// 'limit' => 90,
// ],
// ];
$periods = Config::getParam('usage', []);
$stats = $usage = [];
$days = $periods[$range];
$metrics = [
'users',
'sessions',
];
// $metrics = [
// 'users.$all.count.total',
// 'users.$all.requests.create',
// 'users.$all.requests.read',
// 'users.$all.requests.update',
// 'users.$all.requests.delete',
// 'sessions.$all.requests.create',
// 'sessions.$all.requests.delete',
// "sessions.$provider.requests.create",
// ];
Authorization::skip(function () use ($dbForProject, $days, $metrics, &$stats) {
foreach ($metrics as $metric) {
$limit = $days['limit'];
$period = $days['period'];
$results = $dbForProject->find('stats', [
Query::equal('period', [$period]),
Query::equal('metric', [$metric]),
Query::limit($limit),
Query::orderDesc('time'),
]);
$stats[$metric] = [];
foreach ($results as $result) {
$stats[$metric][$result->getAttribute('time')] = [
'value' => $result->getAttribute('value'),
];
}
}
});
// $stats = [];
$format = match ($days['period']) {
'1h' => 'Y-m-d\TH:00:00.000P',
'1d' => 'Y-m-d\T00:00:00.000P',
};
// Authorization::skip(function () use ($dbForProject, $periods, $range, $metrics, &$stats) {
// foreach ($metrics as $metric) {
// $limit = $periods[$range]['limit'];
// $period = $periods[$range]['period'];
foreach ($metrics as $metric) {
$usage[$metric] = [];
$leap = time() - ($days['limit'] * $days['factor']);
while ($leap < time()) {
$leap += $days['factor'];
$formatDate = date($format, $leap);
$usage[$metric][] = [
'value' => $stats[$metric][$formatDate]['value'] ?? 0,
'date' => $formatDate,
];
}
$usage[$metric] = array_reverse($usage[$metric]);
}
// $requestDocs = $dbForProject->find('stats', [
// Query::equal('period', [$period]),
// Query::equal('metric', [$metric]),
// Query::limit($limit),
// Query::orderDesc('time'),
// ]);
// $stats[$metric] = [];
// foreach ($requestDocs as $requestDoc) {
// $stats[$metric][] = [
// 'value' => $requestDoc->getAttribute('value'),
// 'date' => $requestDoc->getAttribute('time'),
// ];
// }
// // backfill metrics with empty values for graphs
// $backfill = $limit - \count($requestDocs);
// while ($backfill > 0) {
// $last = $limit - $backfill - 1; // array index of last added metric
// $diff = match ($period) { // convert period to seconds for unix timestamp math
// '1h' => 3600,
// '1d' => 86400,
// };
// $stats[$metric][] = [
// 'value' => 0,
// 'date' => DateTime::formatTz(DateTime::addSeconds(new \DateTime($stats[$metric][$last]['date'] ?? null), -1 * $diff)),
// ];
// $backfill--;
// }
// $stats[$metric] = array_reverse($stats[$metric]);
// }
// });
// $usage = new Document([
// 'range' => $range,
// 'usersCount' => $stats['users.$all.count.total'] ?? [],
// 'usersCreate' => $stats['users.$all.requests.create'] ?? [],
// 'usersRead' => $stats['users.$all.requests.read'] ?? [],
// 'usersUpdate' => $stats['users.$all.requests.update'] ?? [],
// 'usersDelete' => $stats['users.$all.requests.delete'] ?? [],
// 'sessionsCreate' => $stats['sessions.$all.requests.create'] ?? [],
// 'sessionsProviderCreate' => $stats["sessions.$provider.requests.create"] ?? [],
// 'sessionsDelete' => $stats['sessions.$all.requests.delete' ?? []]
// ]);
// }
// $response->dynamic($usage, Response::MODEL_USAGE_USERS);
$response->dynamic(new Document([
'range' => $range,
'usersCount' => $usage[$metrics[0]],
'sessionsCount' => $usage[$metrics[1]],
]), Response::MODEL_USAGE_USERS);
});
@@ -23,55 +23,14 @@ class UsageUsers extends Model
'example' => [],
'array' => true
])
->addRule('usersCreate', [
'type' => Response::MODEL_METRIC,
'description' => 'Aggregated stats for users created.',
'default' => [],
'example' => [],
'array' => true
])
->addRule('usersRead', [
'type' => Response::MODEL_METRIC,
'description' => 'Aggregated stats for users read.',
'default' => [],
'example' => [],
'array' => true
])
->addRule('usersUpdate', [
'type' => Response::MODEL_METRIC,
'description' => 'Aggregated stats for users updated.',
'default' => [],
'example' => [],
'array' => true
])
->addRule('usersDelete', [
'type' => Response::MODEL_METRIC,
'description' => 'Aggregated stats for users deleted.',
'default' => [],
'example' => [],
'array' => true
])
->addRule('sessionsCreate', [
->addRule('sessionsCount', [
'type' => Response::MODEL_METRIC,
'description' => 'Aggregated stats for sessions created.',
'default' => [],
'example' => [],
'array' => true
])
->addRule('sessionsProviderCreate', [
'type' => Response::MODEL_METRIC,
'description' => 'Aggregated stats for sessions created for a provider ( email, anonymous or oauth2 ).',
'default' => [],
'example' => [],
'array' => true
])
->addRule('sessionsDelete', [
'type' => Response::MODEL_METRIC,
'description' => 'Aggregated stats for sessions deleted.',
'default' => [],
'example' => [],
'array' => true
])
;
}