Commit 48bd04d3 authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

Resolved some Device OpenConfigDriver issues

parent bb58b693
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -36,6 +36,9 @@ export INFLUXDB_DATABASE=$(kubectl --namespace $K8S_NAMESPACE get secrets influx
# First destroy old coverage file
rm -f $COVERAGEFILE

# Useful flags for pytest:
#-o log_cli=true -o log_file=device.log -o log_file_level=DEBUG

coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
    common/orm/tests/test_unitary.py \
    common/message_broker/tests/test_unitary.py \
+26 −24
Original line number Diff line number Diff line
@@ -401,30 +401,32 @@ class DeviceServiceServicerImpl(DeviceServiceServicer):
            # requests.
            #self.monitoring_loops.remove(device_uuid)

        running_config_rules = [
            (config_rule[0], json.dumps(config_rule[1], sort_keys=True))
            for config_rule in driver.GetConfig()
        ]
        context_config_rules = {
            config_rule[1]: config_rule[2]
            for config_rule in get_config_rules(self.database, device_uuid, 'running')
        }

        # each in context, not in running => delete in context
        # each in running, not in context => add to context
        # each in context and in running, context.value != running.value => update in context

        running_config_rules_actions : List[Tuple[ORM_ConfigActionEnum, str, str]] = []
        for config_rule_key,config_rule_value in running_config_rules:
            running_config_rules_actions.append((ORM_ConfigActionEnum.SET, config_rule_key, config_rule_value))
            context_config_rules.pop(config_rule_key, None)
        for context_rule_key,context_rule_value in context_config_rules.items():
            running_config_rules_actions.append((ORM_ConfigActionEnum.DELETE, context_rule_key, context_rule_value))

        #msg = '[MonitorDeviceKpi] running_config_rules_action[{:d}]: {:s}'
        #for i,running_config_rules_action in enumerate(running_config_rules_actions):
        #    LOGGER.info(msg.format(i, str(running_config_rules_action)))
        update_config(self.database, device_uuid, 'running', running_config_rules_actions)
        # Subscriptions are not stored as classical driver config.
        # TODO: consider adding it somehow in the configuration.
        # Warning: GetConfig might be very slow in OpenConfig devices
        #running_config_rules = [
        #    (config_rule[0], json.dumps(config_rule[1], sort_keys=True))
        #    for config_rule in driver.GetConfig()
        #]
        #context_config_rules = {
        #    config_rule[1]: config_rule[2]
        #    for config_rule in get_config_rules(self.database, device_uuid, 'running')
        #}

        ## each in context, not in running => delete in context
        ## each in running, not in context => add to context
        ## each in context and in running, context.value != running.value => update in context
        #running_config_rules_actions : List[Tuple[ORM_ConfigActionEnum, str, str]] = []
        #for config_rule_key,config_rule_value in running_config_rules:
        #    running_config_rules_actions.append((ORM_ConfigActionEnum.SET, config_rule_key, config_rule_value))
        #    context_config_rules.pop(config_rule_key, None)
        #for context_rule_key,context_rule_value in context_config_rules.items():
        #    running_config_rules_actions.append((ORM_ConfigActionEnum.DELETE, context_rule_key, context_rule_value))

        ##msg = '[MonitorDeviceKpi] running_config_rules_action[{:d}]: {:s}'
        ##for i,running_config_rules_action in enumerate(running_config_rules_actions):
        ##    LOGGER.info(msg.format(i, str(running_config_rules_action)))
        #update_config(self.database, device_uuid, 'running', running_config_rules_actions)

        sync_device_to_context(db_device, self.context_client)
        return Empty()
+0 −11
Original line number Diff line number Diff line
@@ -57,17 +57,6 @@ class _Driver:
        """
        raise NotImplementedError()

    #def GetResource(self, endpoint_uuid : str) -> Optional[str]:
    #    """ Retrieve the endpoint path for subscriptions.
    #        Parameters:
    #            endpoint_uuid : str
    #                Target endpoint UUID
    #        Returns:
    #            resource_path : Optional[str]
    #                The path of the endpoint, or None if it is not found.
    #    """
    #    raise NotImplementedError()

    def SetConfig(self, resources : List[Tuple[str, Any]]) -> List[Union[bool, Exception]]:
        """ Create/Update configuration for a list of resources.
            Parameters:
+3 −2
Original line number Diff line number Diff line
@@ -113,6 +113,7 @@ class EmulatedDriver(_Driver):
        self.__lock = threading.Lock()
        self.__initial = TreeNode('.')
        self.__running = TreeNode('.')
        self.__subscriptions = TreeNode('.')

        endpoints = settings.get('endpoints', [])
        endpoint_resources = []
@@ -286,7 +287,7 @@ class EmulatedDriver(_Driver):
                    end_date=end_date, timezone=pytz.utc)

                subscription_path = resource_path + ['{:.3f}:{:.3f}'.format(sampling_duration, sampling_interval)]
                set_subnode_value(resolver, self.__running, subscription_path, job)
                set_subnode_value(resolver, self.__subscriptions, subscription_path, job)
                results.append(True)
        return results

@@ -312,7 +313,7 @@ class EmulatedDriver(_Driver):
                    continue

                subscription_path = resource_path + ['{:.3f}:{:.3f}'.format(sampling_duration, sampling_interval)]
                subscription_node = get_subnode(resolver, self.__running, subscription_path)
                subscription_node = get_subnode(resolver, self.__subscriptions, subscription_path)

                # if not found, resource_node is None
                if subscription_node is None:
+179 −120

File changed.

Preview size limit exceeded, changes collapsed.

Loading