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
|
end
|
||||||
|
|
||||||
defp put_telemetry_fields(map, data_extended) do
|
defp put_telemetry_fields(map, data_extended) do
|
||||||
# Check for telemetry data in various locations
|
|
||||||
telemetry = data_extended[:telemetry] || data_extended["telemetry"] || data_extended
|
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
|
map
|
||||||
|> maybe_put(:telemetry_seq, telemetry_seq)
|
|> maybe_put(:telemetry_seq, parse_telemetry_seq(telemetry))
|
||||||
|> maybe_put(:telemetry_vals, telemetry_vals)
|
|> maybe_put(:telemetry_vals, parse_telemetry_vals(telemetry))
|
||||||
|> maybe_put(:telemetry_bits, telemetry[:bits] || telemetry["bits"])
|
|> maybe_put(:telemetry_bits, telemetry[:bits] || telemetry["bits"])
|
||||||
end
|
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
|
# Extract data from MicE packets
|
||||||
defp extract_from_mic_e(mic_e) do
|
defp extract_from_mic_e(mic_e) do
|
||||||
%{}
|
%{}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue