85 lines
2.6 KiB
Python
85 lines
2.6 KiB
Python
# ------------------------------------------------------------------------------
|
|
# Copyright 2022 Upstream Data Inc -
|
|
# -
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); -
|
|
# you may not use this file except in compliance with the License. -
|
|
# You may obtain a copy of the License at -
|
|
# -
|
|
# http://www.apache.org/licenses/LICENSE-2.0 -
|
|
# -
|
|
# Unless required by applicable law or agreed to in writing, software -
|
|
# distributed under the License is distributed on an "AS IS" BASIS, -
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -
|
|
# See the License for the specific language governing permissions and -
|
|
# limitations under the License. -
|
|
# ------------------------------------------------------------------------------
|
|
|
|
from dataclasses import dataclass, field, make_dataclass
|
|
from enum import Enum
|
|
from typing import List, Union
|
|
|
|
|
|
class DataOptions(Enum):
|
|
MAC = "mac"
|
|
API_VERSION = "api_ver"
|
|
FW_VERSION = "fw_ver"
|
|
HOSTNAME = "hostname"
|
|
HASHRATE = "hashrate"
|
|
EXPECTED_HASHRATE = "expected_hashrate"
|
|
HASHBOARDS = "hashboards"
|
|
ENVIRONMENT_TEMP = "env_temp"
|
|
WATTAGE = "wattage"
|
|
WATTAGE_LIMIT = "wattage_limit"
|
|
FANS = "fans"
|
|
FAN_PSU = "fan_psu"
|
|
ERRORS = "errors"
|
|
FAULT_LIGHT = "fault_light"
|
|
IS_MINING = "is_mining"
|
|
UPTIME = "uptime"
|
|
CONFIG = "config"
|
|
|
|
def __str__(self):
|
|
return self.value
|
|
|
|
def default_command(self):
|
|
if str(self.value) == "config":
|
|
return "get_config"
|
|
elif str(self.value) == "is_mining":
|
|
return "_is_mining"
|
|
else:
|
|
return f"_get_{str(self.value)}"
|
|
|
|
|
|
@dataclass
|
|
class RPCAPICommand:
|
|
name: str
|
|
cmd: str
|
|
|
|
|
|
@dataclass
|
|
class WebAPICommand:
|
|
name: str
|
|
cmd: str
|
|
|
|
|
|
@dataclass
|
|
class DataFunction:
|
|
cmd: str
|
|
kwargs: List[Union[RPCAPICommand, WebAPICommand]] = field(default_factory=list)
|
|
|
|
def __call__(self, *args, **kwargs):
|
|
return self
|
|
|
|
|
|
DataLocations = make_dataclass(
|
|
"DataLocations",
|
|
[
|
|
(
|
|
enum_value.value,
|
|
DataFunction,
|
|
field(default_factory=DataFunction(enum_value.default_command())),
|
|
)
|
|
for enum_value in DataOptions
|
|
],
|
|
)
|