def get_stat(self, name, type=None): results = [] # sum(value) as value, name, type, round(bucket / %s) * %s AS bucket find_name = name.replace("%", "#") if type is None or type is "counter": for bucket in self._counters: for stat in pattern_search(find_name, self._counters[bucket]): too_add = self._counters[bucket][stat] new_result = {"name": stat, "value": too_add["value"], "type": "counter", "bucket": bucket} results.append(new_result) if type is None or type is "average": for bucket in self._averages: for stat in pattern_search(find_name, self._averages[bucket]): too_add = self._averages[bucket][stat] new_result = {"name": stat, "value": too_add["value"], "type": "average", "bucket": bucket} results.append(new_result) if type is None or type is "datapoint": for bucket in self._datapoints: for stat in pattern_search(find_name, self._datapoints[bucket]): too_add = self._datapoints[bucket][stat] new_result = {"name": stat, "value": too_add["value"], "type": "datapoint", "bucket": bucket} results.append(new_result) return results
def get(self, key=None, human=None, full=None): """ Get the value of a given state (key). :param key: Name of state to get. :return: Value of state """ logger.debug('states:get: {key} = {value}', key=key) if key is None: raise YomboWarning("Key cannot be none") self._Statistics.increment("lib.atoms.get", bucket_time=15, anon=True) search_chars = ['#', '+'] if any(s in key for s in search_chars): results = pattern_search(key, self.__States) if len(results) > 1: values = {} for item in results: values[item] = self.__States[item] return values else: raise KeyError("Searched for atoms, none found.") if human is True: return self.__States[key]['value'] elif full is True: return self.__States[key] else: return self.__States[key]['value_human']
def get( self, key, human=None, full=None, gateway_id=None, default='eEryLOZESKJf7cqQZv2bFlh04Hrf3NxLazV5KEuvyXFtkgxpq70vWsIz9xwr' ): """ Get the value of a given state (key). :raises YomboWarning: Raised when request is malformed. :raises KeyError: Raised when request is not found. :param key: Name of state to get. :type key: string :param human: If true, returns a state for human consumption. :type human: bool :param full: If true, Returns all data about the state. If false, just the value. :type full: bool :param gateway_id: The gateway id to lookup. If 'self', will be converted to local gateway ID. :param default: If set, will return a this value if it's not set. Otherwise, will raise KeyError if not set. :type default: str :return: Value of state """ # logger.debug("states:get: {key} = {value}", key=key) if gateway_id is None or gateway_id.lower() == 'self': gateway_id = self.gateway_id if self._Loader.operating_mode != "run": gateway_id = "local" self._Statistics.increment("lib.states.get", bucket_size=15, anon=True) search_chars = ["#", "+"] if any(s in key for s in search_chars): if gateway_id not in self.states: return {} results = pattern_search(key, self.states[gateway_id]) if len(results) > 1: values = {} for item in results: if human is True: values[item] = self.states[gateway_id][item][ "value_human"] elif full is True: values[item] = self.states[gateway_id][item] else: values[item] = self.states[gateway_id][item]["value"] return values else: raise KeyError("Searched for atoms, none found.") # print(f"States get...... gateway_id: {gateway_id}") # print(f"States key: {key}") # print(self.states) if human is True: return self.states[gateway_id][key]["value_human"] elif full is True: return self.states[gateway_id][key] else: return self.states[gateway_id][key]["value"]
def get_stat(self, bucket_name, bucket_type=None): results = [] # sum(value) as value, bucket_name, type, round(bucket / %s) * %s AS bucket find_name = bucket_name.replace('%', '#') if bucket_type is None or bucket_type is 'counter': for bucket in self._counters: for stat in pattern_search(find_name, self._counters[bucket]): too_add = self._counters[bucket][stat] new_result = { 'name': stat, 'value': too_add['value'], 'type': 'counter', 'bucket': bucket, } results.append(new_result) if bucket_type is None or bucket_type is 'average': for bucket in self._averages: for stat in pattern_search(find_name, self._averages[bucket]): too_add = self._averages[bucket][stat] new_result = { 'name': stat, 'value': too_add['value'], 'type': 'average', 'bucket': bucket, } results.append(new_result) if bucket_type is None or bucket_type is 'datapoint': for bucket in self._datapoints: for stat in pattern_search(find_name, self._datapoints[bucket]): too_add = self._datapoints[bucket][stat] new_result = { 'name': stat, 'value': too_add['value'], 'type': 'datapoint', 'bucket': bucket, } results.append(new_result) return results
def get_stat(self, bucket_name, bucket_type=None): results = [] # sum(value) as value, bucket_name, type, round(bucket / %s) * %s AS bucket find_name = bucket_name.replace("%", "#") if bucket_type is None or bucket_type is "counter": for bucket in self._counters: for stat in pattern_search(find_name, self._counters[bucket]): too_add = self._counters[bucket][stat] new_result = { "name": stat, "value": too_add["value"], "type": "counter", "bucket": bucket, } results.append(new_result) if bucket_type is None or bucket_type is "average": for bucket in self._averages: for stat in pattern_search(find_name, self._averages[bucket]): too_add = self._averages[bucket][stat] new_result = { "name": stat, "value": too_add["value"], "type": "average", "bucket": bucket, } results.append(new_result) if bucket_type is None or bucket_type is "datapoint": for bucket in self._datapoints: for stat in pattern_search(find_name, self._datapoints[bucket]): too_add = self._datapoints[bucket][stat] new_result = { "name": stat, "value": too_add["value"], "type": "datapoint", "bucket": bucket, } results.append(new_result) return results
def get(self, key, human=None, full=None, gateway_id=None): """ Get the value of a given state (key). :raises YomboWarning: Raised when request is malformed. :raises KeyError: Raised when request is not found. :param key: Name of state to get. :type key: string :param human: If true, returns a state for human consumption. :type human: bool :param full: If true, Returns all data about the state. If false, just the value. :type full: bool :return: Value of state """ # logger.debug('states:get: {key} = {value}', key=key) if gateway_id is None: gateway_id = self.gateway_id self._Statistics.increment("lib.states.get", bucket_size=15, anon=True) search_chars = ['#', '+'] if any(s in key for s in search_chars): if gateway_id not in self.__States: return {} results = pattern_search(key, self.__States[gateway_id]) if len(results) > 1: values = {} for item in results: values[item] = self.__States[gateway_id][item] return values else: raise KeyError("Searched for atoms, none found.") if human is True: return self.__States[gateway_id][key]['value_human'] elif full is True: return self.__States[gateway_id][key] else: return self.__States[gateway_id][key]['value']
def get(self, item_requested: str, default: Optional[Any] = SENTINEL, gateway_id: Optional[str] = None, instance: Optional[bool] = None): """ Get the value of a given data item (key). :raises KeyError: Raised when request is not found. :param item_requested: Name of data item to retrieve. :param default: Default value to return in a data instance if the requested item is missing. :param gateway_id: The gateway_id to reference. :param instance: If True, returns the object (atom/state), versus just the value. """ if gateway_id is None or gateway_id.lower() == 'self': gateway_id = self._gateway_id # if self._Loader.operating_mode != "run": # gateway_id = self._gateway_id data = getattr(self, self._storage_attribute_name) if gateway_id not in data: raise KeyError( f"gateway_id '{gateway_id}' not found in '{self._storage_attribute_name}'" ) self._Statistics.increment(f"lib.{self._storage_attribute_name}.get", bucket_size=15, anon=True) if any(s in item_requested for s in ["#", "+"]): if gateway_id not in data: return {} results = pattern_search(item_requested, data[gateway_id]) if len(results) > 1: values = {} for item in results: if instance is True: values[item] = data[gateway_id][item] else: values[item] = data[gateway_id][item].value return values else: raise KeyError( f"Searched for {self._storage_attribute_name}, none found: {item_requested}" ) if item_requested in data[gateway_id]: data[gateway_id][item_requested].update( {"last_access_at": int(time())}) if instance is True: return data[gateway_id][item_requested] else: return data[gateway_id][item_requested].value elif default is SENTINEL: raise KeyError( f"'{item_requested}' not found in '{self._storage_label_name}'" ) else: if instance is True: raise KeyError( f"'{item_requested}' not found in '{self._storage_label_name}'," f" cannot return instance using a default value.") else: return default