Skip to content

Commit

Permalink
Convert messages to string (#10)
Browse files Browse the repository at this point in the history
  • Loading branch information
svetob authored Aug 26, 2016
1 parent 06f6845 commit c55600b
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 31 deletions.
19 changes: 4 additions & 15 deletions lib/logstash_json/event.ex
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ defmodule LogstashJson.Event do
Map.merge(fields, %{
"@timestamp": timestamp(ts),
level: level,
message: msg,
message: to_string(msg),
metadata: metadata,
module: md[:module],
function: md[:function],
Expand Down Expand Up @@ -49,21 +49,10 @@ defmodule LogstashJson.Event do
:binary.copy("0", count - byte_size(num)) <> num
end


# Traverse complex objects and inspect PID's to string representation
defp print_pids(it) when it == [], do: []
defp print_pids(it) when is_list(it), do: [print_pids(hd it) | print_pids(tail it)]
defp print_pids(it) when is_tuple(it), do: List.to_tuple(print_pids(Tuple.to_list(it)))
# Traverse complex objects and inspect PID's to their string representation
defp print_pids(it) when is_pid(it), do: inspect(it)
defp print_pids(it) when is_list(it), do: Enum.map it, &print_pids/1
defp print_pids(it) when is_tuple(it), do: List.to_tuple(print_pids(Tuple.to_list(it)))
defp print_pids(it) when is_map(it), do: Enum.into(it, %{}, fn {k, v} -> {k, print_pids(v)} end)
defp print_pids(it), do: it

# Handle the odd construct [1, 2 | 3] by converting it to [1, 2, 3]
defp tail(it) do
if (is_list(tl it)) do
tl it
else
[tl it]
end
end
end
45 changes: 29 additions & 16 deletions test/event_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -5,38 +5,51 @@ defmodule EventTest do
test "Creates and serializes event" do
message = "Meow meow"
event = log(message)
|> Poison.decode!()

assert Map.get(event, "message") == message
assert Map.get(event, "level") == "info"
assert Map.get(event, "metadata") == []
assert String.length(Map.get(event, "@timestamp")) == 29
time = Map.get(event, :"@timestamp")

assert Map.get(event, :message) == message
assert Map.get(event, :level) == :info
assert Map.get(event, :metadata) == []
assert String.length(time) == 29
end

test "Joins extra fields but does not overwrite existing fields" do
message = "Meow the second"
event = log(message, %{foo: "bar", level: "fail", message: "fail"})
|> Poison.decode!()

assert Map.get(event, :message) == message
assert Map.get(event, :level) == :info
assert Map.get(event, :foo) == "bar"
end

test "Converts event to json" do
message = "Meowson the third"
event = log_json(message) |> Poison.decode!()

assert Map.get(event, "message") == message
assert Map.get(event, "level") == "info"
assert Map.get(event, "foo") == "bar"
end

test "Handle construct [1, 2 | 3]" do
assert log(["a", "b" | "c"])
|> Poison.decode!()
|> Map.get("message") == ["a", "b", "c"]
test "Formats message" do
assert log(["Hello", 32, 'wo', ["rl", 'd!']])
|> Map.get(:message) == "Hello world!"
end

defp log(msg) do
log(msg, %{})
test "Handle lists such as [1, 2 | 3]" do
assert log(["a", "b" | "c"])
|> Map.get(:message) == "abc"
end
defp log(msg, fields) do
{:ok, l} = Event.event(:info, msg, {{2015,1,1},{0,0,0,0}}, [], %{

defp log(msg, fields \\ %{}) do
Event.event(:info, msg, {{2015,1,1},{0,0,0,0}}, [], %{
metadata: [],
fields: fields
}) |> Event.json()
})
end

defp log_json(msg, fields \\ %{}) do
{:ok, l} = Event.json(log(msg, fields))
l
end
end

0 comments on commit c55600b

Please sign in to comment.