summaryrefslogtreecommitdiff
path: root/lib/plugins/logger.ex
diff options
context:
space:
mode:
authorJordan Bracco <href@random.sh>2022-12-20 02:19:42 +0000
committerJordan Bracco <href@random.sh>2022-12-20 19:29:41 +0100
commit9958e90eb5eb5a2cc171c40860745e95a96bd429 (patch)
treeb49cdb1d0041b9c0a81a14950d38c0203896f527 /lib/plugins/logger.ex
parentRename to Nola (diff)
Actually do not prefix folders with nola_ refs T77
Diffstat (limited to 'lib/plugins/logger.ex')
-rw-r--r--lib/plugins/logger.ex71
1 files changed, 71 insertions, 0 deletions
diff --git a/lib/plugins/logger.ex b/lib/plugins/logger.ex
new file mode 100644
index 0000000..69cac66
--- /dev/null
+++ b/lib/plugins/logger.ex
@@ -0,0 +1,71 @@
+defmodule Nola.Plugins.Logger do
+ require Logger
+
+ @couch_db "bot-logs"
+
+ def irc_doc(), do: nil
+
+ def start_link() do
+ GenServer.start_link(__MODULE__, [], name: __MODULE__)
+ end
+
+ def init([]) do
+ regopts = [plugin: __MODULE__]
+ {:ok, _} = Registry.register(IRC.PubSub, "triggers", regopts)
+ {:ok, _} = Registry.register(IRC.PubSub, "messages", regopts)
+ {:ok, _} = Registry.register(IRC.PubSub, "messages:telegram", regopts)
+ {:ok, _} = Registry.register(IRC.PubSub, "irc:outputs", regopts)
+ {:ok, _} = Registry.register(IRC.PubSub, "messages:private", regopts)
+ {:ok, nil}
+ end
+
+ def handle_info({:irc, :trigger, _, m}, state) do
+ {:noreply, log(m, state)}
+ end
+
+ def handle_info({:irc, :text, m}, state) do
+ {:noreply, log(m, state)}
+ end
+
+ def handle_info(info, state) do
+ Logger.debug("logger_plugin: unhandled info: #{info}")
+ {:noreply, state}
+ end
+
+ def log(entry, state) do
+ case Couch.post(@couch_db, format_to_db(entry)) do
+ {:ok, id, _rev} ->
+ Logger.debug("logger_plugin: saved: #{inspect id}")
+ state
+ error ->
+ Logger.error("logger_plugin: save failed: #{inspect error}")
+ end
+ rescue
+ e ->
+ Logger.error("logger_plugin: rescued processing for #{inspect entry}: #{inspect e}")
+ Logger.error(Exception.format(:error, e, __STACKTRACE__))
+ state
+ catch
+ e, b ->
+ Logger.error("logger_plugin: catched processing for #{inspect entry}: #{inspect e}")
+ Logger.error(Exception.format(e, b, __STACKTRACE__))
+ state
+ end
+
+ def format_to_db(msg = %IRC.Message{id: id}) do
+ msg
+ |> Poison.encode!()
+ |> Map.drop("id")
+
+ %{"_id" => id || FlakeId.get(),
+ "type" => "irc.message/v1",
+ "object" => msg}
+ end
+
+ def format_to_db(anything) do
+ %{"_id" => FlakeId.get(),
+ "type" => "object",
+ "object" => anything}
+ end
+
+end