class DriveDBClient(metaclass=ABCMeta):
class Config:
DEFAULT_SEARCH_KPI = "InherentAvailability"
DEFAULT_SEARCH_COLUMN = "availability"
DRIVES_PARTITION = "drives"
DATE_COLUMN = "date"
SERIAL_NUMBER_COLUMN = "serialNumber"
KPI_NAME_COLUMN = "name"
DETAILS_COLUMN = "details"
RESULT_TYPE_COLUMN = "resultType"
DEFAULT_KPI_COLUMNS = (
SERIAL_NUMBER_COLUMN,
DATE_COLUMN,
KPI_NAME_COLUMN,
DETAILS_COLUMN,
)
KPI_DATE_FORMAT = "%Y-%m-%d"
KPI_DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"
INDEX_DATEFORMAT = "%Y%m%d"
ITEM_ID_COLUMN = "id"
@abstractmethod
def list_databases(self) -> List:
pass
@abstractmethod
def list_containers(self, database_link: Optional[str] = None) -> List:
pass
@abstractmethod
def connect_to_container(self, name: str) -> None:
pass
@abstractmethod
def connect_to_database(self, name: str) -> None:
pass
@abstractmethod
def get_nameplate_details(self, serial_number: str, **kwargs) -> Union[List, Dict]:
pass
@abstractmethod
def list_nameplate_details(self, serial_numbers: Optional[Sequence[str]] = None, **kwargs) -> List[Dict]:
pass
@abstractmethod
def list_available_serial_numbers(self, **kwargs) -> List[str]:
pass
@abstractmethod
def get_available_date_ranges(
self, serial_number: str, data_mode: str = "all", **kwargs
) -> List[Tuple[datetime.datetime, datetime.datetime]]:
pass
@abstractmethod
def get_kpi_values(
self,
serial_number: str,
kpi_name: str,
start_date: Optional[datetime.datetime] = None,
end_date: Optional[datetime.datetime] = None,
**kwargs,
) -> List[Dict]:
pass
@abstractmethod
def get_scatter_data(
self, serial_number: str, table_name: str, start_date: datetime.datetime, end_date: datetime.datetime, **kwargs
) -> List[List]:
pass
@abstractmethod
def list_column_names(
self,
serial_number: str,
table_name: str,
start_date: Optional[datetime.datetime] = None,
end_date: Optional[datetime.datetime] = None,
**kwargs,
) -> List[str]:
pass