[#55] Adapting to the new backend

This commit is contained in:
Felipe Ripoll 2018-07-03 09:50:59 -06:00
parent fc104e7bf1
commit 3f5b2b3af8
10 changed files with 74 additions and 24 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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()

View File

@ -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

View File

@ -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,

View File

@ -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