Merge pull request #7520 from appwrite/feat-sms-metric

Add count for messages(sms) metric
This commit is contained in:
Christy Jacob 2024-02-06 22:44:06 +05:30 committed by GitHub
commit 6a5defb91c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 21 additions and 9 deletions

View file

@ -195,6 +195,7 @@ const FUNCTION_ALLOWLIST_HEADERS_RESPONSE = ['content-type', 'content-length'];
// Usage metrics // Usage metrics
const METRIC_TEAMS = 'teams'; const METRIC_TEAMS = 'teams';
const METRIC_USERS = 'users'; const METRIC_USERS = 'users';
const METRIC_MESSAGES = 'messages';
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

@ -5,6 +5,7 @@ namespace Appwrite\Platform\Workers;
use Exception; use Exception;
use Utopia\App; use Utopia\App;
use Utopia\CLI\Console; use Utopia\CLI\Console;
use Utopia\Database\Document;
use Utopia\DSN\DSN; use Utopia\DSN\DSN;
use Utopia\Messaging\Messages\SMS; use Utopia\Messaging\Messages\SMS;
use Utopia\Messaging\Adapters\SMS\Mock; use Utopia\Messaging\Adapters\SMS\Mock;
@ -15,6 +16,7 @@ use Utopia\Messaging\Adapters\SMS\Twilio;
use Utopia\Messaging\Adapters\SMS\Vonage; use Utopia\Messaging\Adapters\SMS\Vonage;
use Utopia\Platform\Action; use Utopia\Platform\Action;
use Utopia\Queue\Message; use Utopia\Queue\Message;
use Appwrite\Event\Usage;
class Messaging extends Action class Messaging extends Action
{ {
@ -43,35 +45,39 @@ class Messaging extends Action
$this $this
->desc('Messaging worker') ->desc('Messaging worker')
->inject('message') ->inject('message')
->callback(fn($message) => $this->action($message)); ->inject('queueForUsage')
->callback(fn(Message $message, Usage $queueForUsage) => $this->action($message, $queueForUsage));
} }
/** /**
* @param Message $message * @param Message $message
* @param Usage $queueForUsage
* @return void * @return void
* @throws Exception * @throws Exception
*/ */
public function action(Message $message): void public function action(Message $message, Usage $queueForUsage): void
{ {
$payload = $message->getPayload() ?? []; $payload = $message->getPayload() ?? [];
if (empty($payload)) {
throw new Exception('Missing payload');
}
if (empty($payload['project'])) { if (empty($payload['project'])) {
throw new Exception('Project not set in payload'); throw new Exception('Project not set in payload');
} }
Console::log($payload['project']['$id']); $project = new Document($payload['project'] ?? []);
Console::log('Project: ' . $project->getId());
$denyList = App::getEnv('_APP_SMS_PROJECTS_DENY_LIST', ''); $denyList = App::getEnv('_APP_SMS_PROJECTS_DENY_LIST', '');
$denyList = explode(',', $denyList); $denyList = explode(',', $denyList);
if (in_array($payload['project']['$id'], $denyList)) { if (in_array($project->getId(), $denyList)) {
Console::error("Project is in the deny list. Skipping ..."); Console::error("Project is in the deny list. Skipping ...");
return; return;
} }
if (empty($payload)) {
Console::error('Payload arg not found');
return;
}
if (empty($payload['recipient'])) { if (empty($payload['recipient'])) {
Console::error('Recipient arg not found'); Console::error('Recipient arg not found');
return; return;
@ -112,6 +118,11 @@ class Messaging extends Action
try { try {
$sms->send($message); $sms->send($message);
$queueForUsage
->setProject($project)
->addMetric(METRIC_MESSAGES, 1)
->trigger();
} catch (\Exception $error) { } catch (\Exception $error) {
throw new Exception('Error sending message: ' . $error->getMessage(), 500); throw new Exception('Error sending message: ' . $error->getMessage(), 500);
} }