onQueue('high');
$this->tokenName = $token->name;
$this->manageUrl = base_url().'/security/api-tokens';
}
public function via(object $notifiable): array
{
return $notifiable->getEnabledChannels('api_token_failing');
}
private function summary(): string
{
return "API token '{$this->tokenName}' sent {$this->failedRequests} failed requests in one minute. Coolify now answers its requests with 429 (Too Many Requests) until the failures stop.";
}
private function action(): string
{
return 'Find the client that uses this token and fix its requests, give the token the permissions it needs, or revoke the token.';
}
public function toMail(): MailMessage
{
$mail = new MailMessage;
$mail->subject("Coolify: API token '{$this->tokenName}' sends many failed requests");
$mail->view('emails.api-token-failing', [
'summary' => $this->summary(),
'action' => $this->action(),
'lastRequest' => $this->lastRequest,
'manageUrl' => $this->manageUrl,
]);
return $mail;
}
public function toDiscord(): DiscordMessage
{
$message = new DiscordMessage(
title: '🔑 API token sends many failed requests',
description: $this->summary()."\n\n**Action Required:** ".$this->action(),
color: DiscordMessage::warningColor(),
);
$message->addField('Last failed request', $this->lastRequest);
$message->addField('Manage tokens', "[Open API Tokens]({$this->manageUrl})");
return $message;
}
public function toTelegram(): array
{
return [
'message' => "Coolify: {$this->summary()}\n\nLast failed request: {$this->lastRequest}\n\nAction Required: {$this->action()}",
'buttons' => [
[
'text' => 'Manage API tokens',
'url' => $this->manageUrl,
],
],
];
}
public function toPushover(): PushoverMessage
{
$message = e($this->summary()).'
';
$message .= 'Last failed request: '.e($this->lastRequest).'
';
$message .= 'Action Required: '.e($this->action());
return new PushoverMessage(
title: 'API token sends many failed requests',
level: 'warning',
message: $message,
buttons: [
[
'text' => 'Manage API tokens',
'url' => $this->manageUrl,
],
],
);
}
public function toSlack(): SlackMessage
{
$description = $this->summary()."\n\n";
$description .= "Last failed request: {$this->lastRequest}\n\n";
$description .= '*Action Required:* '.$this->action()."\n\n";
$description .= "Manage tokens: {$this->manageUrl}";
return new SlackMessage(
title: '🔑 API token sends many failed requests',
description: $description,
color: SlackMessage::warningColor(),
);
}
public function toWebhook(): array
{
return [
'success' => false,
'message' => $this->summary(),
'event' => 'api_token_failing',
'token_name' => $this->tokenName,
'failed_requests' => $this->failedRequests,
'last_request' => $this->lastRequest,
'url' => $this->manageUrl,
];
}
}