chore(ui,agent): harden collector parsing, drop dead CSS, resilver label
Addresses final code review: - to_int/1 now returns 0 on nil or unparseable strings instead of crashing - remove unused .pool-row CSS (superseded by .pool-block) - clamp capacity bar width to [0, 100] to prevent visual overflow - pool_scrub_line/1 uses scan_function so resilver shows as "resilver..."
This commit is contained in:
parent
dd992573a1
commit
28a40a2650
5 changed files with 67 additions and 21 deletions
|
|
@ -176,7 +176,15 @@ defmodule ProxmoxAgent.Collectors.Zfs do
|
|||
end
|
||||
|
||||
defp to_int(v) when is_integer(v), do: v
|
||||
defp to_int(v) when is_binary(v), do: String.to_integer(v)
|
||||
|
||||
defp to_int(v) when is_binary(v) do
|
||||
case Integer.parse(v) do
|
||||
{n, _} -> n
|
||||
:error -> 0
|
||||
end
|
||||
end
|
||||
|
||||
defp to_int(_), do: 0
|
||||
|
||||
defp max_or_nil([]), do: nil
|
||||
defp max_or_nil(list), do: Enum.max(list)
|
||||
|
|
|
|||
|
|
@ -104,6 +104,43 @@ defmodule ProxmoxAgent.Collectors.ZfsTest do
|
|||
# log vdev is retained in the per-pool vdevs list even though it's ignored for layout classification
|
||||
assert Enum.any?(by_name["mirror_with_log"].vdevs, &(&1.type == "log"))
|
||||
end
|
||||
|
||||
test "tolerates nil and non-integer error counters" do
|
||||
list_json =
|
||||
Jason.encode!(%{
|
||||
"pools" => %{
|
||||
"weird" => %{"name" => "weird", "size" => 1, "alloc" => 0, "free" => 1,
|
||||
"frag" => 0, "cap" => 0, "health" => "ONLINE"}
|
||||
}
|
||||
})
|
||||
|
||||
status_json =
|
||||
Jason.encode!(%{
|
||||
"pools" => %{
|
||||
"weird" => %{
|
||||
"name" => "weird", "state" => "ONLINE", "error_count" => nil,
|
||||
"vdevs" => %{
|
||||
"disk-0" => %{"name" => "disk-0", "vdev_type" => "disk", "state" => "ONLINE",
|
||||
"read_errors" => nil, "write_errors" => "abc",
|
||||
"checksum_errors" => "0"}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
runner = fn
|
||||
"zpool", ["list" | _] -> {:ok, list_json}
|
||||
"zpool", ["status" | _] -> {:ok, status_json}
|
||||
end
|
||||
|
||||
sample = Zfs.collect_pools(runner: runner)
|
||||
[pool] = sample.pools
|
||||
assert pool.error_count == 0
|
||||
[vdev] = pool.vdevs
|
||||
assert vdev.read_errors == 0
|
||||
assert vdev.write_errors == 0
|
||||
assert vdev.checksum_errors == 0
|
||||
end
|
||||
end
|
||||
|
||||
describe "collect_datasets/1" do
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue