예제 #1
0
def check_controller_fabric(personality, fabric):
    """
    Check controller Fabric configuration override (which essentially is only
    for debugging purposes or for people running Crossbar.io FX Service on-premise)

    :param fabric: The Fabric configuration to check.
    :type fabric: dict
    """
    if not isinstance(fabric, Mapping):
        raise checkconfig.InvalidConfigException(
            "'fabric' in controller configuration must be a dictionary ({} encountered)\n\n"
            .format(type(fabric)))

    for k in fabric:
        if k not in ['transport', 'heartbeat']:
            raise checkconfig.InvalidConfigException(
                "encountered unknown attribute '{}' in 'fabric' in controller configuration"
                .format(k))

    if 'transport' in fabric:
        checkconfig.check_connecting_transport(personality,
                                               fabric['transport'])

    if 'heartbeat' in fabric:
        heartbeat = fabric['heartbeat']
        checkconfig.check_dict_args(
            {
                'startup_delay': (False, [int, float]),
                'heartbeat_period': (False, [int, float]),
                'include_system_stats': (False, [bool]),
                'send_workers_heartbeats': (False, [bool]),
                'aggregate_workers_heartbeats': (False, [bool]),
            }, heartbeat,
            "heartbeat configuration: {}".format(pformat(heartbeat)))
예제 #2
0
파일: rlink.py 프로젝트: yankos/crossbar
    def parse(personality, obj, id=None):
        """
        Parses a generic object (eg a dict) into a typed
        object of this class.

        :param obj: The generic object to parse.
        :type obj: dict

        :returns: Router link configuration
        :rtype: :class:`crossbar.edge.worker.rlink.RLinkConfig`
        """
        # assert isinstance(personality, Personality)
        assert type(obj) == dict
        assert id is None or type(id) == str

        if id:
            obj['id'] = id

        check_dict_args(
            {
                'id': (False, [str]),
                'realm': (True, [str]),
                'transport': (True, [Mapping]),
                'authid': (False, [str]),
                'exclude_authid': (False, [Sequence]),
                'forward_local_events': (False, [bool]),
                'forward_remote_events': (False, [bool]),
                'forward_local_invocations': (False, [bool]),
                'forward_remote_invocations': (False, [bool]),
            }, obj, 'router link configuration')

        realm = obj['realm']
        authid = obj.get('authid', None)
        exclude_authid = obj.get('exclude_authid', [])
        for aid in exclude_authid:
            assert type(aid) == str
        forward_local_events = obj.get('forward_local_events', True)
        forward_remote_events = obj.get('forward_remote_events', True)
        forward_local_invocations = obj.get('forward_local_invocations', True)
        forward_remote_invocations = obj.get('forward_remote_invocations',
                                             True)
        transport = obj['transport']

        check_realm_name(realm)
        check_connecting_transport(personality, transport)

        config = RLinkConfig(
            realm=realm,
            transport=transport,
            authid=authid,
            exclude_authid=exclude_authid,
            forward_local_events=forward_local_events,
            forward_remote_events=forward_remote_events,
            forward_local_invocations=forward_local_invocations,
            forward_remote_invocations=forward_remote_invocations,
        )

        return config
예제 #3
0
def check_market_maker(personality, maker):
    maker = dict(maker)
    checkconfig.check_dict_args(
        {
            'id': (True, [six.text_type]),
            'key': (True, [six.text_type]),
            'database': (True, [Mapping]),
            'connection': (True, [Mapping]),
            'blockchain': (False, [Mapping]),
        }, maker, "market maker configuration {}".format(pformat(maker)))

    check_database(personality, dict(maker['database']))

    checkconfig.check_dict_args(
        {
            'realm': (True, [six.text_type]),
            'transport': (True, [Mapping]),
        }, dict(maker['connection']), "market maker connection configuration")
    checkconfig.check_connecting_transport(
        personality, dict(maker['connection']['transport']))

    if 'blockchain' in maker:
        check_blockchain(personality, maker['blockchain'])