Example #1
0
def get_item(item_id):
    if not item_id: return None
    if is_oid(item_id):
        tp, i = parse_oid(item_id)
    else:
        i = item_id
    item = None
    if i.find('/') > -1:
        if i in items_by_full_id: item = items_by_full_id[i]
    elif not eva.core.config.enterprise_layout and i in items_by_id:
        item = items_by_id[i]
    return None if item and is_oid(item_id) and item.item_type != tp else item
Example #2
0
    def history(self,
                item_id,
                t_start=None,
                t_end=None,
                limit=None,
                prop=None,
                time_format=None,
                fill=None,
                fmt=None,
                db=None):
        """
        get item state history

        To use this function, DB or TSDB notifier in LM PLC must be present.
        (notifier can share DB with SFA in read/only mode).

        Args:
            item_id: item ID, or multiple IDs (list or comma separated)

        Optional:
            t_start: time frame start, ISO or Unix timestamp
            t_end: time frame end, optional (default: current time), ISO or
                    Unix timestamp
            limit: limit history records
            prop: item property ('status' or 'value'
            time_format: time format, 'iso' or 'raw' (default) for timestamp
            fill: fill frame with the specified interval (e.g. *1T* - 1 minute,
                    *2H* - 2 hours etc.), optional. If specified, t_start is
                    required
            fmt: output format, 'list' (default) or 'dict'
            db: :doc:`notifier</notifiers>` ID which keeps history for the
                    specified item(s) (default: **db_1**)

        Returns:
            list of dicts or dict of lists
        """
        return eva.lm.lmapi.api.state_history(
            k=eva.apikey.get_masterkey(),
            a=db,
            i=[ 'lvar:' + i if not is_oid(i) else i for i in item_id ] if \
                    isinstance(item_id, list) else \
                     item_id if is_oid(item_id) else 'lvar:' + item_id,
            s=t_start,
            e=t_end,
            l=limit,
            x=prop,
            t=time_format,
            w=fill,
            g=fmt)
Example #3
0
    def toggle(self, item_id, wait=None, uuid=None, priority=None):
        """
        toggle lvar value

        Change lvar value to opposite boolean (0->1, 1->0)

        Args:
            lvar_id: lvar id

        Raises:
            FunctionFailed: lvar value set error
            ResourceNotFound: lvar is not found
        """
        if is_oid(item_id) and oid_type(item_id) == 'unit':
            return self.action_toggle(unit_id=item_id,
                                      wait=wait,
                                      uuid=uuid,
                                      priority=priority)
        v = self.lvar_value(item_id)
        if v is None:
            raise FunctionFailed('lvar value is null')
        if v:
            return self.clear(item_id)
        else:
            return self.reset(item_id)
Example #4
0
    def value(self, item_id, default=''):
        """
        get item value

        Args:
            item_id: item id (oid required)

        Optional:
            default: value if null (default is empty string)

        Returns:
            item value

        Raises:
            ResourceNotFound: item is not found
        """
        if is_oid(item_id):
            tp, i = parse_oid(item_id)
        else:
            tp = 'lvar'
            i = item_id
        if tp == 'unit':
            return self.unit_value(i, default)
        if tp == 'sensor':
            return self.sensor_value(i, default)
        if tp == 'lvar':
            return self.lvar_value(i, default)
        raise ResourceNotFound
Example #5
0
    def status(self, item_id):
        """
        get item status

        Args:
            item_id: item id (oid required)

        Returns:
            item status (integer)

        Raises:
            ResourceNotFound: item is not found
        """
        if is_oid(item_id):
            tp, i = parse_oid(item_id)
        else:
            tp = 'lvar'
            i = item_id
        if tp == 'unit':
            return self.unit_status(i)
        if tp == 'sensor':
            return self.sensor_status(i)
        if tp == 'lvar':
            return self.lvar_status(i)
        raise ResourceNotFound
Example #6
0
    def state(self, item_id):
        """
        get item state

        Args:
            item_id: item id (oid required)

        Returns:
            item status/value dict

        Raises:
            ResourceNotFound: item is not found

        @var_out status
        @var_out value
        """
        if is_oid(item_id):
            tp, i = parse_oid(item_id)
        else:
            tp = 'lvar'
            i = item_id
        if tp == 'unit':
            return {'status': self.unit_status(i), 'value': self.unit_value(i)}
        if tp == 'sensor':
            return {
                'status': self.sensor_status(i),
                'value': self.sensor_value(i)
            }
        if tp == 'lvar':
            return {'status': self.lvar_status(i), 'value': self.lvar_value(i)}
        raise ResourceNotFound
Example #7
0
def clone_item(item_id, new_item_id=None, group=None, save=False):
    i = get_item(item_id)
    ni = get_item((group + '/') if group else '' + new_item_id)
    if not i or not new_item_id or i.is_destroyed() or \
            i.item_type not in ['unit', 'sensor']:
        raise ResourceNotFound
    if ni:
        raise ResourceAlreadyExists(ni.oid)
    if group and new_item_id.find('/') != -1:
        raise InvalidParameter('Group specified but item id contains /')
    if is_oid(new_item_id):
        if oid_type(new_item_id) != i.item_type:
            return InvalidParameter('oids should be equal')
        _ni = oid_to_id(new_item_id)
    else:
        _ni = new_item_id
    if _ni.find('/') == -1:
        ni_id = _ni
        _g = i.group if group is None else group
    else:
        ni_id = _ni.split('/')[-1]
        _g = '/'.join(_ni.split('/')[:-1])
    ni = create_item(ni_id, i.item_type, _g, start=False, save=False)
    cfg = i.serialize(props=True)
    if 'description' in cfg: del cfg['description']
    ni.update_config(cfg)
    if save: ni.save()
    ni.start_processors()
    return ni
Example #8
0
def get_controller(controller_id):
    if not controller_lock.acquire(timeout=eva.core.config.timeout):
        logging.critical('controller_lock locking broken')
        eva.core.critical()
        return
    try:
        if not controller_id:
            raise InvalidParameter('controller id not specified')
        if is_oid(controller_id):
            tp, i = parse_oid(controller_id)
        else:
            tp, i = None, controller_id
        if i.find('/') > -1:
            i = i.split('/')
            if len(i) > 2:
                raise InvalidParameter('controller type unknown')
            if i[0] == 'uc' and i[1] in remote_ucs and (tp is None
                                                        or tp == 'remote_uc'):
                return remote_ucs[i[1]]
            if i[0] == 'lm' and i[1] in remote_lms and (tp is None
                                                        or tp == 'remote_lm'):
                return remote_lms[i[1]]
        raise ResourceNotFound
    finally:
        controller_lock.release()
Example #9
0
def format_job_id(r_id):
    if is_oid(r_id):
        r_id = oid_to_id(r_id, required='job')
    if not isinstance(r_id, str): return None
    if r_id.find('/') != -1:
        g, r_id = r_id.split('/')
        if g != 'jobs': return None
    return r_id
Example #10
0
def format_rule_id(r_id):
    if is_oid(r_id):
        r_id = oid_to_id(r_id, required='dmatrix_rule')
    if not isinstance(r_id, str): return None
    if r_id.find('/') != -1:
        g, r_id = r_id.split('/')
        if g != 'dm_rules': return None
    return r_id
Example #11
0
def get_mu(mu_id):
    if not mu_id: return None
    if is_oid(mu_id) and oid_type(mu_id) != 'mu': return None
    i = oid_to_id(mu_id)
    if i.find('/') > -1:
        if i in mu_by_full_id: return mu_by_full_id[i]
    elif not eva.core.config.enterprise_layout and i in mu_by_id:
        return mu_by_id[i]
    return None
Example #12
0
def get_unit(unit_id):
    if not unit_id: return None
    if is_oid(unit_id) and oid_type(unit_id) != 'unit': return None
    i = oid_to_id(unit_id)
    if i.find('/') > -1:
        if i in units_by_full_id: return units_by_full_id[i]
    elif not eva.core.config.enterprise_layout and i in units_by_id:
        return units_by_id[i]
    return None
Example #13
0
def get_lvar(lvar_id):
    if not lvar_id: return None
    if is_oid(lvar_id) and oid_type(lvar_id) != 'lvar': return None
    i = oid_to_id(lvar_id)
    if i.find('/') > -1:
        if i in lvars_by_full_id: return lvars_by_full_id[i]
    elif not eva.core.config.enterprise_layout and i in lvars_by_id:
        return lvars_by_id[i]
    return None
Example #14
0
def get_sensor(sensor_id):
    if not sensor_id: return None
    if is_oid(sensor_id) and oid_type(sensor_id) != 'sensor': return None
    i = oid_to_id(sensor_id)
    if i.find('/') > -1:
        if i in sensors_by_full_id:
            return sensors_by_full_id[i]
    elif not eva.core.config.enterprise_layout and i in sensors_by_id:
        return sensors_by_id[i]
    return None
Example #15
0
def get_item(item_id):
    if not item_id: return None
    if is_oid(item_id):
        tp, i = parse_oid(item_id)
    else:
        i = item_id
        tp = None
    if tp == 'lmacro':
        return get_macro(i)
    elif tp == 'lcycle':
        return get_cycle(i)
    elif tp == 'dmatrix_rule':
        return get_dm_rule(i)
    elif tp == 'job':
        return get_job(i)
    item = None
    if i.find('/') > -1:
        if i in items_by_full_id: item = items_by_full_id[i]
    elif not eva.core.config.enterprise_layout and i in items_by_id:
        item = items_by_id[i]
    return None if item and is_oid(item_id) and item.item_type != tp else item
Example #16
0
def get_item(i):
    if is_oid(i):
        _tp, _i = parse_oid(i)
    else:
        return None
    if _tp == 'unit':
        gi = eva.sfa.controller.uc_pool.units
    elif _tp == 'sensor':
        gi = eva.sfa.controller.uc_pool.sensors
    elif _tp == 'lvar':
        gi = eva.sfa.controller.lm_pool.lvars
    else:
        return None
    if not _i in gi: return None
    return gi[_i]