From 8665f1c854ba784ee4529b8ea9381b0ea6c1c037 Mon Sep 17 00:00:00 2001 From: Owen Date: Fri, 10 Jan 2025 11:17:41 +0100 Subject: [PATCH] metrics sent to discord via CRON job --- config/config.exs | 3 ++- config/runtime.exs | 3 ++- lib/metrics/message.ex | 44 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 lib/metrics/message.ex diff --git a/config/config.exs b/config/config.exs index 29ca8aa..8ffa7f1 100644 --- a/config/config.exs +++ b/config/config.exs @@ -16,7 +16,8 @@ config :nostrum, config :plantid_discord_bot, PlantIdDiscordBot.Scheduler, jobs: [ {"@daily", {PlantIdDiscordBot.RateLimiter, :reset_counters, []}}, - {"@hourly", {PlantIdDiscordBot.Metrics, :write, []}} + {"@hourly", {PlantIdDiscordBot.Metrics, :write, []}}, + {"0 8 * * *", {PlantIdDiscordBot.Metrics.Message, :start, []}} ] import_config "#{config_env()}.exs" diff --git a/config/runtime.exs b/config/runtime.exs index 71a4ea7..0a780b0 100644 --- a/config/runtime.exs +++ b/config/runtime.exs @@ -5,7 +5,8 @@ config :plantid_discord_bot, guild_ids: [], api: Nostrum.Api, 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, token: System.get_env("PLANTID_DISCORD_BOT_TOKEN") diff --git a/lib/metrics/message.ex b/lib/metrics/message.ex new file mode 100644 index 0000000..0f88ceb --- /dev/null +++ b/lib/metrics/message.ex @@ -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