feature: allow the user to pass a delimiter to as_influx

This commit is contained in:
Brett Rowan
2025-03-04 20:14:55 -07:00
parent ec1b2ca162
commit 8852fab3ee
3 changed files with 17 additions and 10 deletions

View File

@@ -361,7 +361,9 @@ class MinerData(BaseModel):
data_list = [str(data[item]) for item in data] data_list = [str(data[item]) for item in data]
return ",".join(data_list) return ",".join(data_list)
def as_influxdb(self, measurement_name: str = "miner_data") -> str: def as_influxdb(
self, measurement_name: str = "miner_data", level_delimiter: str = "."
) -> str:
"""Get this dataclass as [influxdb line protocol](https://docs.influxdata.com/influxdb/v2.4/reference/syntax/line-protocol/). """Get this dataclass as [influxdb line protocol](https://docs.influxdata.com/influxdb/v2.4/reference/syntax/line-protocol/).
Parameters: Parameters:
@@ -392,7 +394,8 @@ class MinerData(BaseModel):
lambda x: x is not None, lambda x: x is not None,
[ [
serialization_map.get(type(v), lambda _k, _v: None)( serialization_map.get(type(v), lambda _k, _v: None)(
f"{key}.{i}", v level_delimiter.join([key, i]),
v,
) )
for i, v in enumerate(value) for i, v in enumerate(value)
], ],
@@ -401,16 +404,16 @@ class MinerData(BaseModel):
) )
def serialize_fan(key: str, value: Fan) -> str: def serialize_fan(key: str, value: Fan) -> str:
return f"{key}.speed={value.speed}" return f"{key}{level_delimiter}speed={value.speed}"
def serialize_hashboard(key: str, value: HashBoard) -> str: def serialize_hashboard(key: str, value: HashBoard) -> str:
return value.as_influxdb(key) return value.as_influxdb(key, level_delimiter=level_delimiter)
def serialize_bool(key: str, value: bool): def serialize_bool(key: str, value: bool):
return f"{key}={str(value).lower()}" return f"{key}={str(value).lower()}"
def serialize_pool_metrics(key: str, value: PoolMetrics): def serialize_pool_metrics(key: str, value: PoolMetrics):
return value.as_influxdb(key) return value.as_influxdb(key, level_delimiter=level_delimiter)
include = [ include = [
"uptime", "uptime",

View File

@@ -72,7 +72,7 @@ class HashBoard(BaseModel):
except AttributeError: except AttributeError:
raise KeyError(f"{item}") raise KeyError(f"{item}")
def as_influxdb(self, key_root: str) -> str: def as_influxdb(self, key_root: str, level_delimiter: str = ".") -> str:
def serialize_int(key: str, value: int) -> str: def serialize_int(key: str, value: int) -> str:
return f"{key}={value}" return f"{key}={value}"
@@ -116,7 +116,9 @@ class HashBoard(BaseModel):
serialization_func = serialization_map.get( serialization_func = serialization_map.get(
type(field_val), lambda _k, _v: None type(field_val), lambda _k, _v: None
) )
serialized = serialization_func(f"{key_root}.{field}", field_val) serialized = serialization_func(
f"{key_root}{level_delimiter}{field}", field_val
)
if serialized is not None: if serialized is not None:
field_data.append(serialized) field_data.append(serialized)
continue continue
@@ -124,7 +126,7 @@ class HashBoard(BaseModel):
if serialized is None: if serialized is None:
if isinstance(field_val, datatype): if isinstance(field_val, datatype):
serialized = serialization_map_instance[datatype]( serialized = serialization_map_instance[datatype](
f"{key_root}.{field}", field_val f"{key_root}{level_delimiter}{field}", field_val
) )
if serialized is not None: if serialized is not None:
field_data.append(serialized) field_data.append(serialized)

View File

@@ -93,7 +93,7 @@ class PoolMetrics(BaseModel):
return 0 return 0
return (value / total) * 100 return (value / total) * 100
def as_influxdb(self, key_root: str) -> str: def as_influxdb(self, key_root: str, level_delimiter: str = ".") -> str:
def serialize_int(key: str, value: int) -> str: def serialize_int(key: str, value: int) -> str:
return f"{key}={value}" return f"{key}={value}"
@@ -133,7 +133,9 @@ class PoolMetrics(BaseModel):
serialization_func = serialization_map.get( serialization_func = serialization_map.get(
type(field_val), lambda _k, _v: None type(field_val), lambda _k, _v: None
) )
serialized = serialization_func(f"{key_root}.{field}", field_val) serialized = serialization_func(
f"{key_root}{level_delimiter}{field}", field_val
)
if serialized is not None: if serialized is not None:
field_data.append(serialized) field_data.append(serialized)