1
0
Fork 0
mirror of synced 2024-09-28 15:31:43 +12:00

Merge pull request #8672 from appwrite/extrnal-messaging-usage

External messaging usage count
This commit is contained in:
Christy Jacob 2024-09-17 19:24:39 +04:00 committed by GitHub
commit 154993dafd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 31 additions and 5 deletions

View file

@ -223,8 +223,18 @@ const API_KEY_DYNAMIC = 'dynamic';
// Usage metrics // Usage metrics
const METRIC_TEAMS = 'teams'; const METRIC_TEAMS = 'teams';
const METRIC_USERS = 'users'; const METRIC_USERS = 'users';
const METRIC_AUTH_METHOD_PHONE = 'auth.method.phone'; const METRIC_AUTH_METHOD_PHONE = 'auth.method.phone';
const METRIC_AUTH_METHOD_PHONE_COUNTRY_CODE = METRIC_AUTH_METHOD_PHONE . '.{countryCode}'; const METRIC_AUTH_METHOD_PHONE_COUNTRY_CODE = METRIC_AUTH_METHOD_PHONE . '.{countryCode}';
const METRIC_MESSAGES = 'messages';
const METRIC_MESSAGES_SENT = METRIC_MESSAGES . '.sent';
const METRIC_MESSAGES_FAILED = METRIC_MESSAGES . '.failed';
const METRIC_MESSAGES_TYPE = METRIC_MESSAGES . '.{type}';
const METRIC_MESSAGES_TYPE_SENT = METRIC_MESSAGES . '.{type}.sent';
const METRIC_MESSAGES_TYPE_FAILED = METRIC_MESSAGES . '.{type}.failed';
const METRIC_MESSAGES_TYPE_PROVIDER = METRIC_MESSAGES . '.{type}.{provider}';
const METRIC_MESSAGES_TYPE_PROVIDER_SENT = METRIC_MESSAGES . '.{type}.{provider}.sent';
const METRIC_MESSAGES_TYPE_PROVIDER_FAILED = METRIC_MESSAGES . '.{type}.{provider}.failed';
const METRIC_SESSIONS = 'sessions'; const METRIC_SESSIONS = 'sessions';
const METRIC_DATABASES = 'databases'; const METRIC_DATABASES = 'databases';
const METRIC_COLLECTIONS = 'collections'; const METRIC_COLLECTIONS = 'collections';

View file

@ -101,7 +101,7 @@ class Messaging extends Action
case MESSAGE_SEND_TYPE_EXTERNAL: case MESSAGE_SEND_TYPE_EXTERNAL:
$message = $dbForProject->getDocument('messages', $payload['messageId']); $message = $dbForProject->getDocument('messages', $payload['messageId']);
$this->sendExternalMessage($dbForProject, $message, $deviceForFiles, $project); $this->sendExternalMessage($dbForProject, $message, $deviceForFiles, $project, $queueForUsage);
break; break;
default: default:
throw new \Exception('Unknown message type: ' . $type); throw new \Exception('Unknown message type: ' . $type);
@ -113,6 +113,7 @@ class Messaging extends Action
Document $message, Document $message,
Device $deviceForFiles, Device $deviceForFiles,
Document $project, Document $project,
Usage $queueForUsage
): void { ): void {
$topicIds = $message->getAttribute('topics', []); $topicIds = $message->getAttribute('topics', []);
$targetIds = $message->getAttribute('targets', []); $targetIds = $message->getAttribute('targets', []);
@ -218,8 +219,8 @@ class Messaging extends Action
/** /**
* @var array<array> $results * @var array<array> $results
*/ */
$results = batch(\array_map(function ($providerId) use ($identifiers, &$providers, $default, $message, $dbForProject, $deviceForFiles, $project) { $results = batch(\array_map(function ($providerId) use ($identifiers, &$providers, $default, $message, $dbForProject, $deviceForFiles, $project, $queueForUsage) {
return function () use ($providerId, $identifiers, &$providers, $default, $message, $dbForProject, $deviceForFiles, $project) { return function () use ($providerId, $identifiers, &$providers, $default, $message, $dbForProject, $deviceForFiles, $project, $queueForUsage) {
if (\array_key_exists($providerId, $providers)) { if (\array_key_exists($providerId, $providers)) {
$provider = $providers[$providerId]; $provider = $providers[$providerId];
} else { } else {
@ -246,8 +247,8 @@ class Messaging extends Action
$adapter->getMaxMessagesPerRequest() $adapter->getMaxMessagesPerRequest()
); );
return batch(\array_map(function ($batch) use ($message, $provider, $adapter, $dbForProject, $deviceForFiles, $project) { return batch(\array_map(function ($batch) use ($message, $provider, $adapter, $dbForProject, $deviceForFiles, $project, $queueForUsage) {
return function () use ($batch, $message, $provider, $adapter, $dbForProject, $deviceForFiles, $project) { return function () use ($batch, $message, $provider, $adapter, $dbForProject, $deviceForFiles, $project, $queueForUsage) {
$deliveredTotal = 0; $deliveredTotal = 0;
$deliveryErrors = []; $deliveryErrors = [];
$messageData = clone $message; $messageData = clone $message;
@ -286,6 +287,20 @@ class Messaging extends Action
} catch (\Throwable $e) { } catch (\Throwable $e) {
$deliveryErrors[] = 'Failed sending to targets with error: ' . $e->getMessage(); $deliveryErrors[] = 'Failed sending to targets with error: ' . $e->getMessage();
} finally { } finally {
$queueForUsage
->setProject($project)
->addMetric(METRIC_MESSAGES, ($deliveredTotal + $deliveryErrors))
->addMetric(METRIC_MESSAGES_SENT, $deliveredTotal)
->addMetric(METRIC_MESSAGES_FAILED, $deliveryErrors)
->addMetric(str_replace('{type}', $provider->getAttribute('type'), METRIC_MESSAGES_TYPE), ($deliveredTotal + $deliveryErrors))
->addMetric(str_replace('{type}', $provider->getAttribute('type'), METRIC_MESSAGES_TYPE_SENT), $deliveredTotal)
->addMetric(str_replace('{type}', $provider->getAttribute('type'), METRIC_MESSAGES_TYPE_FAILED), $deliveryErrors)
->addMetric(str_replace(['{type}', '{provider}'], [$provider->getAttribute('type'), $this->getSmsAdapter($provider)], METRIC_MESSAGES_TYPE_PROVIDER), ($deliveredTotal + $deliveryErrors))
->addMetric(str_replace(['{type}', '{provider}'], [$provider->getAttribute('type'), $this->getSmsAdapter($provider)], METRIC_MESSAGES_TYPE_PROVIDER_SENT), $deliveredTotal)
->addMetric(str_replace(['{type}', '{provider}'], [$provider->getAttribute('type'), $this->getSmsAdapter($provider)], METRIC_MESSAGES_TYPE_PROVIDER_FAILED), $deliveryErrors)
->trigger();
return [ return [
'deliveredTotal' => $deliveredTotal, 'deliveredTotal' => $deliveredTotal,
'deliveryErrors' => $deliveryErrors, 'deliveryErrors' => $deliveryErrors,
@ -318,6 +333,7 @@ class Messaging extends Action
$message->setAttribute('status', MessageStatus::SENT); $message->setAttribute('status', MessageStatus::SENT);
} }
$message->removeAttribute('to'); $message->removeAttribute('to');
foreach ($providers as $provider) { foreach ($providers as $provider) {