-
Notifications
You must be signed in to change notification settings - Fork 0
/
repl.exs
59 lines (52 loc) · 1.37 KB
/
repl.exs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
alias FlyNatsEx.Logs
alias FlyNatsEx.Subscription
token = System.get_env("FLY_API_TOKEN")
{:ok, gnat} = Logs.start_link(token, "devsnorte")
{:ok, sub} = Subscription.start_link(gnat, %{}, self())
database_path = Application.get_env(:fly_nats_ex, :database_path)
{:ok, conn} = Exqlite.Sqlite3.open(database_path)
:ok = Exqlite.Sqlite3.execute(conn, """
create table if not exists app_logs (
id integer primary key,
datetime datetime,
message text,
level text,
app_name text,
machine text,
host text,
region text,
provider text
)
""")
defmodule Repl do
require Logger
def loop(_conn, 0), do: :ok
def loop(conn, limit) do
receive do
msg ->
Logger.info(inspect(msg))
insert_log(conn, msg)
loop(conn, limit - 1)
end
end
def insert_log(conn, log) do
{:ok, statement} = Exqlite.Sqlite3.prepare(conn, """
insert into app_logs (
datetime, message, level, app_name, machine, host, region, provider
) values (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8)
""")
:ok = Exqlite.Sqlite3.bind(conn, statement, [
DateTime.to_iso8601(log.datetime),
log.message,
log.level,
log.app_name,
log.machine,
log.host,
log.region,
log.provider
])
# Step is used to run statements
:done = Exqlite.Sqlite3.step(conn, statement)
end
end
Repl.loop(conn, 500)