bug: fix error code handling in list

This commit is contained in:
Upstream Data
2025-03-06 11:45:38 -07:00
parent 11012b310b
commit 4694c0f774
2 changed files with 31 additions and 16 deletions

View File

@@ -388,20 +388,30 @@ class MinerData(BaseModel):
def serialize_list(key: str, value: list[Any]) -> str | None: def serialize_list(key: str, value: list[Any]) -> str | None:
if len(value) == 0: if len(value) == 0:
return None return None
return ",".join(
list( list_field_data = []
filter( for idx, list_field_val in enumerate(value):
lambda x: x is not None, item_serialization_func = serialization_map.get(
[ type(list_field_val), lambda _k, _v: None
serialization_map.get(type(v), lambda _k, _v: None)(
f"{key}{level_delimiter}{i}",
v,
)
for i, v in enumerate(value)
],
)
) )
) item_serialized = item_serialization_func(
f"{key}{level_delimiter}{idx}", list_field_val
)
if item_serialized is not None:
list_field_data.append(item_serialized)
continue
for dt in serialization_map_instance:
if item_serialized is None:
if isinstance(list_field_val, dt):
item_serialized = serialization_map_instance[dt](
f"{key}{level_delimiter}{idx}", list_field_val
)
if item_serialized is not None:
list_field_data.append(item_serialized)
return ",".join(list_field_data)
def serialize_miner_error(key: str, value: BaseMinerError):
return value.as_influxdb(key, level_delimiter=level_delimiter)
def serialize_fan(key: str, value: Fan) -> str: def serialize_fan(key: str, value: Fan) -> str:
return f"{key}{level_delimiter}speed={value.speed}" return f"{key}{level_delimiter}speed={value.speed}"
@@ -438,6 +448,7 @@ class MinerData(BaseModel):
serialization_map_instance = { serialization_map_instance = {
AlgoHashRateType: serialize_algo_hash_rate, AlgoHashRateType: serialize_algo_hash_rate,
BaseMinerError: serialize_miner_error,
} }
serialization_map = { serialization_map = {
int: serialize_int, int: serialize_int,

View File

@@ -17,12 +17,16 @@ class BaseMinerError(BaseModel):
""" """
return self.asdict() return self.asdict()
def as_influxdb(self, root_key: str) -> str: def as_influxdb(self, root_key: str, level_delimiter: str = ".") -> str:
field_data = [] field_data = []
if self.error_code is not None: if self.error_code is not None:
field_data.append(f"{root_key}.error_code={self.error_code}") field_data.append(
f"{root_key}{level_delimiter}error_code={self.error_code}"
)
if self.error_message is not None: if self.error_message is not None:
field_data.append(f'{root_key}.error_code="{self.error_message}"') field_data.append(
f'{root_key}{level_delimiter}error_message="{self.error_message}"'
)
return ",".join(field_data) return ",".join(field_data)