From 5c4ef575e36856c17c7995e7c3e554ea7b10ee5e Mon Sep 17 00:00:00 2001 From: Ferry van Zeelst Date: Mon, 24 Oct 2016 18:58:11 +0000 Subject: [PATCH] Removed synology directory --- synology/__init__.py | 1 - synology/synology.py | 314 ------------------------------------------- 2 files changed, 315 deletions(-) delete mode 100644 synology/__init__.py delete mode 100644 synology/synology.py diff --git a/synology/__init__.py b/synology/__init__.py deleted file mode 100644 index e61e5f9..0000000 --- a/synology/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .synology import SynologyApi diff --git a/synology/synology.py b/synology/synology.py deleted file mode 100644 index 70f374d..0000000 --- a/synology/synology.py +++ /dev/null @@ -1,314 +0,0 @@ -# -*- coding:utf-8 -*- -import requests -from requests.compat import json - - -# Define Static Classes -class SynoFormatHelper(object): - @staticmethod - def bytesToReadable(num): - if num < 512: - return "0 Kb" - elif num < 1024: - return "1 Kb" - - for unit in ['', 'Kb', 'Mb', 'Gb', 'Tb', 'Pb', 'Eb', 'Zb']: - if abs(num) < 1024.0: - return "%3.1f%s" % (num, unit) - num /= 1024.0 - return "%.1f%s" % (num, 'Yb') - - -# Define Classes -class SynoUtilization(object): - def __init__(self, raw_input): - self._data = None - self.update(raw_input) - - def update(self, raw_input): - if raw_input is not None: - self._data = raw_input["data"] - - @property - def cpu_other_load(self): - if self._data is not None: - return self._data["cpu"]["other_load"] - - @property - def cpu_user_load(self): - if self._data is not None: - return self._data["cpu"]["user_load"] - - @property - def cpu_system_load(self): - if self._data is not None: - return self._data["cpu"]["system_load"] - - @property - def cpu_total_load(self): - return self.cpu_system_load + self.cpu_user_load + self.cpu_other_load - - @property - def cpu_1min_load(self): - if self._data is not None: - return self._data["cpu"]["1min_load"] - - @property - def cpu_5min_load(self): - if self._data is not None: - return self._data["cpu"]["5min_load"] - - @property - def cpu_15min_load(self): - if self._data is not None: - return self._data["cpu"]["15min_load"] - - @property - def memory_real_usage(self): - if self._data is not None: - return str(self._data["memory"]["real_usage"]) + "%" - - @property - def memory_size(self): - if self._data is not None: - # Memory is actually returned in KB's so multiply before converting - return SynoFormatHelper.bytesToReadable( - int(self._data["memory"]["memory_size"]) * 1024) - - @property - def memory_available_swap(self): - if self._data is not None: - # Memory is actually returned in KB's so multiply before converting - return SynoFormatHelper.bytesToReadable( - int(self._data["memory"]["avail_swap"]) * 1024) - - @property - def memory_cached(self): - if self._data is not None: - # Memory is actually returned in KB's so multiply before converting - return SynoFormatHelper.bytesToReadable( - int(self._data["memory"]["cached"]) * 1024) - - @property - def memory_available_real(self): - if self._data is not None: - # Memory is actually returned in KB's so multiply before converting - return SynoFormatHelper.bytesToReadable( - int(self._data["memory"]["avail_real"]) * 1024) - - @property - def memory_total_real(self): - if self._data is not None: - # Memory is actually returned in KB's so multiply before converting - return SynoFormatHelper.bytesToReadable( - int(self._data["memory"]["total_real"]) * 1024) - - @property - def memory_total_swap(self): - if self._data is not None: - # Memory is actually returned in KB's so multiply before converting - return SynoFormatHelper.bytesToReadable( - int(self._data["memory"]["total_swap"]) * 1024) - - def _get_network(self, network_id): - if self._data is not None: - for network in self._data["network"]: - if network["device"] == network_id: - return network - - @property - def network_up(self): - network = self._get_network("total") - if network is not None: - return SynoFormatHelper.bytesToReadable( - int(network["tx"])) - - @property - def network_down(self): - network = self._get_network("total") - if network is not None: - return SynoFormatHelper.bytesToReadable( - int(network["rx"])) - - -class SynoStorage(object): - def __init__(self, raw_input): - self._data = None - self.update(raw_input) - - def update(self, raw_input): - if raw_input is not None: - self._data = raw_input["data"] - - @property - def volumes(self): - if self._data is not None: - volumes = [] - for volume in self._data["volumes"]: - volumes.append(volume["id"]) - return volumes - - def _get_volume(self, volume_id): - if self._data is not None: - for volume in self._data["volumes"]: - if volume["id"] == volume_id: - return volume - - def volume_status(self, volume): - volume = self._get_volume(volume) - if volume is not None: - return volume["status"] - - def volume_device_type(self, volume): - volume = self._get_volume(volume) - if volume is not None: - return volume["device_type"] - - def volume_size_total(self, volume): - volume = self._get_volume(volume) - if volume is not None: - return SynoFormatHelper.bytesToReadable( - int(volume["size"]["total"])) - - def volume_size_used(self, volume): - volume = self._get_volume(volume) - if volume is not None: - return SynoFormatHelper.bytesToReadable( - int(volume["size"]["used"])) - - @property - def disks(self): - if self._data is not None: - disks = [] - for disk in self._data["disks"]: - disks.append(disk["id"]) - return disks - - def _get_disk(self, disk_id): - if self._data is not None: - for disk in self._data["disks"]: - if disk["id"] == disk_id: - return disk - - def disk_name(self, disk): - disk = self._get_disk(disk) - if disk is not None: - return disk["name"] - - def disk_device(self, disk): - disk = self._get_disk(disk) - if disk is not None: - return disk["device"] - - def disk_smart_status(self, disk): - disk = self._get_disk(disk) - if disk is not None: - return disk["status"] - - def disk_status(self, disk): - disk = self._get_disk(disk) - if disk is not None: - return disk["status"] - - def disk_exceed_bad_sector_thr(self, disk): - disk = self._get_disk(disk) - if disk is not None: - return disk["exceed_bad_sector_thr"] - - def disk_below_remain_life_thr(self, disk): - disk = self._get_disk(disk) - if disk is not None: - return disk["below_remain_life_thr"] - - def disk_temp(self, disk): - disk = self._get_disk(disk) - if disk is not None: - return disk["temp"] - - -class SynologyApi(object): - def __init__(self, ip, port, username, password): - # Store Variables - self.ip = ip - self.port = port - self.username = username - self.password = password - - # Class Variables - self.access_token = None - self._utilisation = None - self._storage = None - - # Build Variables - self.base_url = "http://%s:%s/webapi" % (self.ip, self.port) - - # Login to get our access token - self._login() - - def _login(self): - # Build login url and request - api = "SYNO.API.Auth" - url = "%s/auth.cgi?api=%s&version=2&method=login&account=%s&passwd=%s&session=Core&format=cookie" % ( # noqa: ignore=E501 - self.base_url, - api, - self.username, - self.password) - result = self._getUrl(url) - - # Parse Result if valid - if result is not None: - self.access_token = result["data"]["sid"] - - def _getUrl(self, url, retryOnError=True): - try: - resp = requests.get(url) - if resp.status_code == 200: - json_data = json.loads(resp.text) - if json_data["success"]: - return json_data - else: - print(json_data) - if retryOnError: - return self._getUrl(url, False) - else: - return None - except: - return None - - def update(self): - if(self._utilisation is not None): - api = "SYNO.Core.System.Utilization" - url = "%s/entry.cgi?api=%s&version=1&method=get&_sid=%s" % ( - self.base_url, - api, - self.access_token) - self._utilisation.update(self._getUrl(url)) - if self._storage is not None: - api = "SYNO.Storage.CGI.Storage" - url = "%s/entry.cgi?api=%s&version=1&method=load_info&_sid=%s" % ( - self.base_url, - api, - self.access_token) - self._storage.update(self._getUrl(url)) - - @property - def Utilisation(self): - if self._utilisation is None: - api = "SYNO.Core.System.Utilization" - url = "%s/entry.cgi?api=%s&version=1&method=get&_sid=%s" % ( - self.base_url, - api, - self.access_token) - self._utilisation = SynoUtilization(self._getUrl(url)) - return self._utilisation - - @property - def Storage(self): - if self._storage is None: - api = "SYNO.Storage.CGI.Storage" - url = "%s/entry.cgi?api=%s&version=1&method=load_info&_sid=%s" % ( - self.base_url, - api, - self.access_token) - self._storage = SynoStorage(self._getUrl(url)) - return self._storage