[#55] Adapting to the new backend
This commit is contained in:
parent
fc104e7bf1
commit
3f5b2b3af8
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue