Skip to content

Commit

Permalink
Use tracing in mining
Browse files Browse the repository at this point in the history
  • Loading branch information
samuelmanzanera committed Apr 2, 2024
1 parent 9f6a638 commit b876c91
Show file tree
Hide file tree
Showing 11 changed files with 429 additions and 141 deletions.
16 changes: 15 additions & 1 deletion lib/archethic.ex
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ defmodule Archethic do
alias Archethic.TransactionChain.TransactionInput

require Logger
require OpenTelemetry.Tracer

@doc """
Returns true if a node is up and false if it is down
Expand Down Expand Up @@ -123,10 +124,23 @@ defmodule Archethic do
contract_context: contract_context
}

mining_span = OpenTelemetry.Tracer.start_span("mining")
OpenTelemetry.Tracer.set_current_span(mining_span)
OpenTelemetry.Span.set_attribute(mining_span, "address", Base.encode16(tx.address))

OpenTelemetry.Span.set_attribute(
mining_span,
"node",
welcome_node_key |> P2P.get_node_info!() |> Node.endpoint()
)

trace = Archethic.Utils.inject_propagated_context()
:persistent_term.put({:initial_mining_span, tx.address}, mining_span)

Task.Supervisor.async_stream_nolink(
Archethic.TaskSupervisor,
validation_nodes,
&P2P.send_message(&1, message),
&P2P.send_message(&1, message, trace: trace),
ordered: false,
on_timeout: :kill_task,
timeout: Message.get_timeout(message) + 2000
Expand Down
25 changes: 21 additions & 4 deletions lib/archethic/mining.ex
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,24 @@ defmodule Archethic.Mining do
transaction :: Transaction.t(),
welcome_node_public_key :: Crypto.key(),
validation_node_public_keys :: list(Crypto.key()),
contract_context :: nil | Contract.Context.t()
contract_context :: nil | Contract.Context.t(),
request_metadata :: %{}
) :: {:ok, pid()}
def start(tx = %Transaction{}, welcome_node_public_key, [_ | []], contract_context) do
def start(
tx,
welcome_node_public_key,
validation_node_keys,
contract_context,
request_metadata \\ %{}
)

def start(
tx = %Transaction{},
welcome_node_public_key,
[_ | []],
contract_context,
_
) do
StandaloneWorkflow.start_link(
transaction: tx,
welcome_node: P2P.get_node_info!(welcome_node_public_key),
Expand All @@ -61,7 +76,8 @@ defmodule Archethic.Mining do
tx = %Transaction{},
welcome_node_public_key,
validation_node_public_keys,
contract_context
contract_context,
request_metadata
)
when is_binary(welcome_node_public_key) and is_list(validation_node_public_keys) do
DynamicSupervisor.start_child(WorkerSupervisor, {
Expand All @@ -70,7 +86,8 @@ defmodule Archethic.Mining do
welcome_node: P2P.get_node_info!(welcome_node_public_key),
validation_nodes: Enum.map(validation_node_public_keys, &P2P.get_node_info!/1),
node_public_key: Crypto.last_node_public_key(),
contract_context: contract_context
contract_context: contract_context,
request_metadata: request_metadata
})
end

Expand Down
Loading

0 comments on commit b876c91

Please sign in to comment.