metrics sent to discord via CRON job

This commit is contained in:
Owen
2025-01-10 11:17:41 +01:00
parent 68df89b5e0
commit 8665f1c854
3 changed files with 48 additions and 2 deletions
+2 -1
View File
@@ -16,7 +16,8 @@ config :nostrum,
config :plantid_discord_bot, PlantIdDiscordBot.Scheduler, config :plantid_discord_bot, PlantIdDiscordBot.Scheduler,
jobs: [ jobs: [
{"@daily", {PlantIdDiscordBot.RateLimiter, :reset_counters, []}}, {"@daily", {PlantIdDiscordBot.RateLimiter, :reset_counters, []}},
{"@hourly", {PlantIdDiscordBot.Metrics, :write, []}} {"@hourly", {PlantIdDiscordBot.Metrics, :write, []}},
{"0 8 * * *", {PlantIdDiscordBot.Metrics.Message, :start, []}}
] ]
import_config "#{config_env()}.exs" import_config "#{config_env()}.exs"
+2 -1
View File
@@ -5,7 +5,8 @@ config :plantid_discord_bot,
guild_ids: [], guild_ids: [],
api: Nostrum.Api, api: Nostrum.Api,
plantnet_api_key: System.get_env("PLANTNET_API_KEY"), plantnet_api_key: System.get_env("PLANTNET_API_KEY"),
fileserver_url: System.get_env("PLANTID_FILESERVER_URL", "http://localhost:4321") fileserver_url: System.get_env("PLANTID_FILESERVER_URL", "http://localhost:4321"),
metrics_webhook_url: System.get_env("PLANTID_LOGS_DISCORD_WEBHOOK_URL")
config :nostrum, config :nostrum,
token: System.get_env("PLANTID_DISCORD_BOT_TOKEN") token: System.get_env("PLANTID_DISCORD_BOT_TOKEN")
+44
View File
@@ -0,0 +1,44 @@
defmodule PlantIdDiscordBot.Metrics.Message do
@webhook_url Application.compile_env(:plantid_discord_bot, :metrics_webhook_url)
def start() do
PlantIdDiscordBot.Metrics.get_all()
|> format_message()
|> send_message()
end
def format_message(data) do
embeds =
Enum.map(data, fn {guild_id, metrics} ->
first_request_at =
DateTime.truncate(metrics.first_request_at, :second)
|> DateTime.to_string()
last_request_at =
DateTime.truncate(metrics.last_request_at, :second)
|> DateTime.to_string()
%{
title: metrics.guild_name,
fields: [
%{name: "Guild ID", value: guild_id, inline: true},
%{name: "First Request At", value: first_request_at, inline: true},
%{name: "Last Request At", value: last_request_at, inline: true},
%{name: "Total Requests", value: metrics.total_requests, inline: true}
]
}
end)
%{embeds: embeds}
end
def send_message(data) do
body = Jason.encode!(data)
headers = [
{"Content-Type", "application/json"}
]
HTTPoison.post!(@webhook_url, body, headers)
end
end