feature: allow the user to pass a delimiter to as_influx
This commit is contained in:
@@ -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",
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user