def decorator_fn(original_fn): @wraps(original_fn) def wrapper(framework): client_factories_provider = kwargs.get('client_factories_provider') if not client_factories_provider: client_factories_provider = default_client_factories_provider proto_name = kwargs.get('protocol_name') stop_on_first = kwargs.get('stop_on_first') vector = ObjectStateHolderVector() framework = RichFramework(framework) if not proto_name: proto_name = framework.get_dest_attribute('Protocol') creds_manager = CredsManager(framework) client_factories = client_factories_provider(framework, creds_manager) first_factory = take(0, 1, client_factories) if not first_factory: logger.reportErrorObject(_create_missed_creds_error(proto_name)) else: connection_exs = [] discovery_exs = [] warnings = [] at_least_once_discovered = False oshs = [] client_factories = list(itertools.chain(first_factory, client_factories)) main_fn = original_fn for index, client_factory in enumerate(client_factories): try: with client_factory() as client: args_ = (framework, client, index) kwargs_ = {} oshs_, warnings_ = main_fn(*args_, **kwargs_) oshs.extend(oshs_) warnings.extend(warnings_) at_least_once_discovered = True if stop_on_first: break except ConnectionException, ce: logger.debugException(str(ce)) connection_exs.append(ce) except (DiscoveryException, Exception), de: logger.debugException(str(de)) discovery_exs.append(de) if at_least_once_discovered: each(logger.reportWarningObject, warnings) else: for ex in connection_exs: obj = _create_connection_errorobj(proto_name, ex.message) logger.reportWarningObject(obj) for ex in discovery_exs: obj = _create_discovery_errorobj(proto_name, ex.message) logger.reportErrorObject(obj) vector.addAll(oshs)
def decorator(framework): framework = flow.RichFramework(framework) proto_name = clients.SAPJmxClient.SAPJMX_CLIENT_TYPE versions = get_sap_java_client_versions() if not filter(len, versions): msg = 'SAP_JMX drivers are missing' obj = flow._create_connection_errorobj(proto_name, msg) logger.reportErrorObject(obj) return ObjectStateHolderVector() pairs = get_applicable_credentials(framework, P4_PORT_PATTERN) creds = ((creds_id, port, v) for creds_id, port in pairs for v in versions) return iterate_over_args(main_fn, framework, creds, proto_name, stop_on_first)
except flow.ConnectionException, ce: logger.debugException('%s' % ce) connection_exs.append(ce) except (flow.DiscoveryException, Exception), de: logger.debugException('%s' % de) discovery_exs.append(de) except JException, je: logger.debugException('%s' % je) java_exs.append(je) warnings = filter(None, warnings) if at_least_once_discovered: each(logger.reportWarning, warnings) else: for ex in connection_exs: obj = flow._create_connection_errorobj(proto_name, ex.message) logger.reportErrorObject(obj) for ex in discovery_exs: obj = flow._create_discovery_errorobj(proto_name, ex.message) logger.reportErrorObject(obj) for ex in java_exs: obj = flow._create_discovery_errorobj(proto_name, '%s %s' % (ex.__class__, ex.getMessage())) logger.reportErrorObject(obj) return vector def get_applicable_credentials(framework, portPattern): r'@types: Framework, str -> iterator[tuple[int, str]]' logger.debug('Getting applicable credentials to createClient') credIds = _get_sap_java_creds(framework) # get ports available on destination