From 3f5b2b3af8bf883ee219a0ae82bf9010703eaf39 Mon Sep 17 00:00:00 2001 From: Felipe Ripoll Date: Tue, 3 Jul 2018 09:50:59 -0600 Subject: [PATCH] [#55] Adapting to the new backend --- lib/poa_agent/entity/ethereum/block.ex | 2 + lib/poa_agent/entity/ethereum/history.ex | 3 +- lib/poa_agent/entity/ethereum/statistics.ex | 2 + lib/poa_agent/entity/host/information.ex | 2 + lib/poa_agent/entity/host/latency.ex | 37 +++++++++++++++++++ .../plugins/collectors/eth/information.ex | 7 +--- lib/poa_agent/plugins/transfers/http/rest.ex | 19 ++++------ test/poa_agent/entity/protocol_test.exs | 22 +++++++++-- .../plugins/collectors/eth/stats_test.exs | 2 +- test/poa_agent/transfers/rest_test.exs | 2 +- 10 files changed, 74 insertions(+), 24 deletions(-) create mode 100644 lib/poa_agent/entity/host/latency.ex diff --git a/lib/poa_agent/entity/ethereum/block.ex b/lib/poa_agent/entity/ethereum/block.ex index 0ed581f..ae87961 100644 --- a/lib/poa_agent/entity/ethereum/block.ex +++ b/lib/poa_agent/entity/ethereum/block.ex @@ -2,6 +2,7 @@ defmodule POAAgent.Entity.Ethereum.Block do @moduledoc false alias POAAgent.Format.Literal alias POAAgent.Format.POAProtocol.Data + alias POAAgent.Entity @type t :: %__MODULE__{ author: Literal.Hex.t(), @@ -110,6 +111,7 @@ defmodule POAAgent.Entity.Ethereum.Block do defimpl Data.Format do def to_data(x) do + x = Entity.NameConvention.from_elixir_to_node(x) Data.new("block", x) end end diff --git a/lib/poa_agent/entity/ethereum/history.ex b/lib/poa_agent/entity/ethereum/history.ex index f8f5d9c..79d0cb1 100644 --- a/lib/poa_agent/entity/ethereum/history.ex +++ b/lib/poa_agent/entity/ethereum/history.ex @@ -2,6 +2,7 @@ defmodule POAAgent.Entity.Ethereum.History do @moduledoc false alias POAAgent.Format.POAProtocol.Data + alias POAAgent.Entity @type t :: %__MODULE__{ history: [POAAgent.Entity.Ethereum.Block.t()] @@ -14,7 +15,7 @@ defmodule POAAgent.Entity.Ethereum.History do defimpl Data.Format do def to_data(x) do history = for i <- x.history do - Map.from_struct(i) + Entity.NameConvention.from_elixir_to_node(i) end Data.new("history", %{history: history}) end diff --git a/lib/poa_agent/entity/ethereum/statistics.ex b/lib/poa_agent/entity/ethereum/statistics.ex index d472aac..8f02ced 100644 --- a/lib/poa_agent/entity/ethereum/statistics.ex +++ b/lib/poa_agent/entity/ethereum/statistics.ex @@ -3,6 +3,7 @@ defmodule POAAgent.Entity.Ethereum.Statistics do alias POAAgent.Format.Literal alias POAAgent.Format.POAProtocol.Data + alias POAAgent.Entity @type t :: %__MODULE__{ active?: boolean, @@ -39,6 +40,7 @@ defmodule POAAgent.Entity.Ethereum.Statistics do defimpl Data.Format do def to_data(x) do + x = Entity.NameConvention.from_elixir_to_node(x) Data.new("statistics", x) end end diff --git a/lib/poa_agent/entity/host/information.ex b/lib/poa_agent/entity/host/information.ex index 02dc558..5e8f1f9 100644 --- a/lib/poa_agent/entity/host/information.ex +++ b/lib/poa_agent/entity/host/information.ex @@ -2,6 +2,7 @@ defmodule POAAgent.Entity.Host.Information do @moduledoc false alias POAAgent.Format.Literal alias POAAgent.Format.POAProtocol.Data + alias POAAgent.Entity @type t :: %__MODULE__{ name: String.t(), @@ -83,6 +84,7 @@ defmodule POAAgent.Entity.Host.Information do defimpl Data.Format do def to_data(x) do + x = Entity.NameConvention.from_elixir_to_node(x) Data.new("information", x) end end diff --git a/lib/poa_agent/entity/host/latency.ex b/lib/poa_agent/entity/host/latency.ex new file mode 100644 index 0000000..0443cae --- /dev/null +++ b/lib/poa_agent/entity/host/latency.ex @@ -0,0 +1,37 @@ +defmodule POAAgent.Entity.Host.Latency do + @moduledoc false + + alias POAAgent.Format.POAProtocol.Data + + @type t :: %__MODULE__{ + latency: non_neg_integer + } + + defstruct [ + latency: 0 + ] + + @spec new(non_neg_integer) :: t + def new(latency) when is_integer(latency) and latency >= 0 do + %__MODULE__{latency: latency} + end + + def new(latency) when is_float(latency) do + latency + |> round() + |> new() + end + + defimpl POAAgent.Entity.NameConvention do + def from_elixir_to_node(x) do + Map.from_struct(x) + end + end + + defimpl Data.Format do + def to_data(x) do + Data.new("latency", x) + end + end + +end \ No newline at end of file diff --git a/lib/poa_agent/plugins/collectors/eth/information.ex b/lib/poa_agent/plugins/collectors/eth/information.ex index 858a86e..d377b1d 100644 --- a/lib/poa_agent/plugins/collectors/eth/information.ex +++ b/lib/poa_agent/plugins/collectors/eth/information.ex @@ -33,12 +33,7 @@ defmodule POAAgent.Plugins.Collectors.Eth.Information do @doc false @spec collect(internal_state()) :: term() def collect(%{information: information, args: args} = state) do - case information(args) do - ^information -> - {:notransfer, state} - information -> - {:transfer, information, %{state | information: information}} - end + {:transfer, information(args), %{state | information: information}} end @doc false diff --git a/lib/poa_agent/plugins/transfers/http/rest.ex b/lib/poa_agent/plugins/transfers/http/rest.ex index 801d233..3875496 100644 --- a/lib/poa_agent/plugins/transfers/http/rest.ex +++ b/lib/poa_agent/plugins/transfers/http/rest.ex @@ -5,6 +5,7 @@ defmodule POAAgent.Plugins.Transfers.HTTP.REST do alias __MODULE__ alias POAAgent.Format.POAProtocol.Data + alias POAAgent.Entity.Host.Latency require Logger @@ -62,7 +63,7 @@ defmodule POAAgent.Plugins.Transfers.HTTP.REST do case post(state.address <> url, event) do {:ok, %HTTPoison.Response{status_code: 200}} -> latency = (POAAgent.Utils.system_time() - before_ping) / 1 - send_latency(state, latency) + send_latency(latency, state) {:ok, %HTTPoison.Response{status_code: error}} -> Logger.warn("Error sending a ping code #{inspect error}") {:error, %HTTPoison.Error{reason: reason}} -> @@ -74,22 +75,18 @@ defmodule POAAgent.Plugins.Transfers.HTTP.REST do {:ok, %{state | ping_timer_ref: ping_timer_ref}} end - defp send_latency(state, latency) do - url = "/latency" + defp send_latency(latency, state) do - event = %{} - |> Map.put(:id, state.identifier) - |> Map.put(:secret, state.secret) - |> Map.put(:latency, latency) - |> Jason.encode!() - - post(state.address <> url, event) + latency + |> Latency.new + |> send_metric(state) end defp send_metric(metric, state) do url = "/data" - data = metric + data = + metric |> Data.Format.to_data() |> Map.from_struct() diff --git a/test/poa_agent/entity/protocol_test.exs b/test/poa_agent/entity/protocol_test.exs index 1966ee3..35e70a5 100644 --- a/test/poa_agent/entity/protocol_test.exs +++ b/test/poa_agent/entity/protocol_test.exs @@ -7,17 +7,19 @@ defmodule POAAgent.Entity.ProtocolTest do alias POAAgent.Entity.Ethereum.Pending alias POAAgent.Entity.Ethereum.Statistics alias POAAgent.Entity.Host.Information + alias POAAgent.Entity.Host.Latency + alias POAAgent.Entity test "Data protocol test for block entity" do entity = %Block{} - formated_entity = Map.from_struct(entity) + formated_entity = format_entity(entity) assert %Data{type: "block", body: formated_entity} == Data.Format.to_data(entity) end test "Data protocol test for information entity" do entity = %Information{} - formated_entity = Map.from_struct(entity) + formated_entity = format_entity(entity) assert %Data{type: "information", body: formated_entity} == Data.Format.to_data(entity) end @@ -31,16 +33,28 @@ defmodule POAAgent.Entity.ProtocolTest do test "Data protocol test for pending entity" do entity = %Pending{} - formated_entity = Map.from_struct(entity) + formated_entity = format_entity(entity) assert %Data{type: "pending", body: formated_entity} == Data.Format.to_data(entity) end test "Data protocol test for statistics entity" do entity = %Statistics{} - formated_entity = Map.from_struct(entity) + formated_entity = format_entity(entity) assert %Data{type: "statistics", body: formated_entity} == Data.Format.to_data(entity) end + test "Data protocol test for latency entity" do + entity = %Latency{} + formated_entity = format_entity(entity) + + assert %Data{type: "latency", body: formated_entity} == Data.Format.to_data(entity) + end + + defp format_entity(entity) do + entity + |> Entity.NameConvention.from_elixir_to_node() + end + end \ No newline at end of file diff --git a/test/poa_agent/plugins/collectors/eth/stats_test.exs b/test/poa_agent/plugins/collectors/eth/stats_test.exs index 6bca053..8c2a503 100644 --- a/test/poa_agent/plugins/collectors/eth/stats_test.exs +++ b/test/poa_agent/plugins/collectors/eth/stats_test.exs @@ -8,7 +8,7 @@ defmodule POAAgent.Plugins.Collectors.Eth.StatsTest do test "stats sent to the transfer when the collectors starts" do echo_transfer = :echo_transfer - {:ok, _echo} = EchoTransfer.start(echo_transfer) + _ = EchoTransfer.start(echo_transfer) args = %{ name: :eth_pending, diff --git a/test/poa_agent/transfers/rest_test.exs b/test/poa_agent/transfers/rest_test.exs index 80ddd7c..927af0f 100644 --- a/test/poa_agent/transfers/rest_test.exs +++ b/test/poa_agent/transfers/rest_test.exs @@ -29,7 +29,7 @@ defmodule POAAgent.Transfers.RestTest do ]}]) do {:ok, _pid} = REST.start_link(args) - assert_receive {"localhost/latency", _}, 20_000 + assert_receive {"localhost/data", "{\"data\":{\"body\":{\"latency\"" <> _}, 20_000 assert_receive {"localhost/ping", _}, 20_000 end end