Reduce cyclomatic complexity in packet telemetry parsing
Extract telemetry parsing logic into separate helper functions: - parse_telemetry_seq: Handle sequence number parsing - parse_telemetry_vals: Handle values array parsing - normalize_telemetry_value: Normalize individual value types - parse_integer_string: Parse integer from string Co-Authored-By: Graham <noreply@anthropic.com>
This commit is contained in:
parent
0b5b50a13b
commit
386cd756bb
1 changed files with 38 additions and 50 deletions
|
|
@ -521,62 +521,50 @@ defmodule Aprsme.Packet do
|
|||
end
|
||||
|
||||
defp put_telemetry_fields(map, data_extended) do
|
||||
# Check for telemetry data in various locations
|
||||
telemetry = data_extended[:telemetry] || data_extended["telemetry"] || data_extended
|
||||
|
||||
# Convert telemetry_seq to integer if it's a string
|
||||
telemetry_seq =
|
||||
case telemetry[:seq] || telemetry["seq"] do
|
||||
nil ->
|
||||
nil
|
||||
|
||||
seq when is_binary(seq) ->
|
||||
case Integer.parse(seq) do
|
||||
{num, _} -> num
|
||||
_ -> nil
|
||||
end
|
||||
|
||||
seq when is_integer(seq) ->
|
||||
seq
|
||||
|
||||
_ ->
|
||||
nil
|
||||
end
|
||||
|
||||
# Convert telemetry_vals from strings to integers
|
||||
telemetry_vals =
|
||||
case telemetry[:vals] || telemetry["vals"] do
|
||||
nil ->
|
||||
nil
|
||||
|
||||
vals when is_list(vals) ->
|
||||
Enum.map(vals, fn
|
||||
val when is_binary(val) ->
|
||||
case Float.parse(val) do
|
||||
{num, _} -> round(num)
|
||||
_ -> 0
|
||||
end
|
||||
|
||||
val when is_integer(val) ->
|
||||
val
|
||||
|
||||
val when is_float(val) ->
|
||||
round(val)
|
||||
|
||||
_ ->
|
||||
0
|
||||
end)
|
||||
|
||||
_ ->
|
||||
nil
|
||||
end
|
||||
|
||||
map
|
||||
|> maybe_put(:telemetry_seq, telemetry_seq)
|
||||
|> maybe_put(:telemetry_vals, telemetry_vals)
|
||||
|> maybe_put(:telemetry_seq, parse_telemetry_seq(telemetry))
|
||||
|> maybe_put(:telemetry_vals, parse_telemetry_vals(telemetry))
|
||||
|> maybe_put(:telemetry_bits, telemetry[:bits] || telemetry["bits"])
|
||||
end
|
||||
|
||||
defp parse_telemetry_seq(telemetry) do
|
||||
case telemetry[:seq] || telemetry["seq"] do
|
||||
nil -> nil
|
||||
seq when is_integer(seq) -> seq
|
||||
seq when is_binary(seq) -> parse_integer_string(seq)
|
||||
_ -> nil
|
||||
end
|
||||
end
|
||||
|
||||
defp parse_telemetry_vals(telemetry) do
|
||||
case telemetry[:vals] || telemetry["vals"] do
|
||||
nil -> nil
|
||||
vals when is_list(vals) -> Enum.map(vals, &normalize_telemetry_value/1)
|
||||
_ -> nil
|
||||
end
|
||||
end
|
||||
|
||||
defp parse_integer_string(str) do
|
||||
case Integer.parse(str) do
|
||||
{num, _} -> num
|
||||
_ -> nil
|
||||
end
|
||||
end
|
||||
|
||||
defp normalize_telemetry_value(val) when is_integer(val), do: val
|
||||
defp normalize_telemetry_value(val) when is_float(val), do: round(val)
|
||||
|
||||
defp normalize_telemetry_value(val) when is_binary(val) do
|
||||
case Float.parse(val) do
|
||||
{num, _} -> round(num)
|
||||
_ -> 0
|
||||
end
|
||||
end
|
||||
|
||||
defp normalize_telemetry_value(_), do: 0
|
||||
|
||||
# Extract data from MicE packets
|
||||
defp extract_from_mic_e(mic_e) do
|
||||
%{}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue