コード例 #1
0
ファイル: entrypoint.py プロジェクト: d3rky/connect-reports
def generate(client, parameters, progress_callback):
    query = R()
    if parameters.get('date') and parameters['date']['after'] != '':
        query &= R().events.created.at.ge(parameters['date']['after'])
        query &= R().events.created.at.le(parameters['date']['before'])
    if parameters.get('product') and parameters['product']['all'] is False:
        query &= R().product.id.oneof(parameters['product']['choices'])
    if parameters.get('mkp') and parameters['mkp']['all'] is False:
        query &= R().marketplace.id.oneof(parameters['mkp']['choices'])
    if parameters.get('period') and parameters['period']['all'] is False:
        query &= R().billing.period.uom.oneof(parameters['period']['choices'])
    if parameters.get('status') and parameters['status']['all'] is False:
        query &= R().status.oneof(parameters['status']['choices'])

    subscriptions = client.ns('subscriptions').assets.filter(query)
    progress = 0
    total = subscriptions.count()

    for subscription in subscriptions:
        yield (
            subscription.get('id'),
            subscription.get('external_id', '-'),
            convert_to_datetime(subscription['events']['created']['at']),
            convert_to_datetime(subscription['events']['updated']['at']),
            subscription.get('status'),
            calculate_period(
                subscription['billing']['period']['delta'],
                subscription['billing']['period']['uom'],
            ) if 'billing' in subscription else '-',
            get_anniversary_day(subscription['billing'])
            if 'billing' in subscription else '-',
            get_anniversary_month(subscription['billing'])
            if 'billing' in subscription else '-',
            subscription['contract']['id']
            if 'contract' in subscription else '-',
            subscription['contract']['name']
            if 'contract' in subscription else '-',
            get_value(subscription.get('tiers', ''), 'customer', 'id'),
            get_value(subscription.get('tiers', ''), 'customer', 'name'),
            get_value(subscription.get('tiers', ''), 'customer',
                      'external_id'),
            get_value(subscription.get('tiers', ''), 'tier1', 'id'),
            get_value(subscription.get('tiers', ''), 'tier1', 'name'),
            get_value(subscription.get('tiers', ''), 'tier1', 'external_id'),
            get_value(subscription.get('tiers', ''), 'tier2', 'id'),
            get_value(subscription.get('tiers', ''), 'tier2', 'name'),
            get_value(subscription.get('tiers', ''), 'tier2', 'external_id'),
            get_value(subscription['connection'], 'provider', 'id'),
            get_value(subscription['connection'], 'provider', 'name'),
            get_value(subscription['connection'], 'vendor', 'id'),
            get_value(subscription['connection'], 'vendor', 'name'),
            get_value(subscription, 'product', 'id'),
            get_value(subscription, 'product', 'name'),
            get_value(subscription['connection'], 'hub', 'id'),
            get_value(subscription['connection'], 'hub', 'name'),
        )
        progress += 1
        progress_callback(progress, total)
コード例 #2
0
def generate(client, parameters, progress_callback):
    query = R()
    query &= R().created.ge(parameters['date']['after'])
    query &= R().created.le(parameters['date']['before'])
    if parameters.get('product') and parameters['product']['all'] is False:
        query &= R().asset.product.id.oneof(parameters['product']['choices'])
    if parameters.get('mkp') and parameters['mkp']['all'] is False:
        query &= R().asset.marketplace.id.oneof(parameters['mkp']['choices'])
    if parameters.get('hub') and parameters['hub']['all'] is False:
        query &= R().asset.connection.hub.id.oneof(parameters['hub']['choices'])

    requests = client.ns('subscriptions').requests.filter(query)
    progress = 0
    total = requests.count()
    for request in requests:
        connection = request['asset']['connection']
        for item in request['items']:
            yield (
                request['id'],
                convert_to_datetime(request['period']['from']),
                convert_to_datetime(request['period']['to']),
                get_basic_value(request['period'], 'delta'),
                get_basic_value(request['period'], 'uom'),
                get_basic_value(item['billing'], 'cycle_number'),
                get_basic_value(item, 'global_id'),
                get_basic_value(item, 'display_name'),
                get_basic_value(item, 'item_type'),
                get_basic_value(item, 'type'),
                get_basic_value(item, 'mpn'),
                get_basic_value(item, 'period'),
                get_basic_value(item, 'quantity'),
                get_value(request['asset']['tiers'], 'customer', 'id'),
                get_value(request['asset']['tiers'], 'customer', 'name'),
                get_value(request['asset']['tiers'], 'customer', 'external_id'),
                get_value(request['asset']['tiers'], 'tier1', 'id'),
                get_value(request['asset']['tiers'], 'tier1', 'name'),
                get_value(request['asset']['tiers'], 'tier1', 'external_id'),
                get_value(request['asset']['tiers'], 'tier2', 'id'),
                get_value(request['asset']['tiers'], 'tier2', 'name'),
                get_value(request['asset']['tiers'], 'tier2', 'external_id'),
                get_value(request['asset']['connection'], 'provider', 'id'),
                get_value(request['asset']['connection'], 'provider', 'name'),
                get_value(request['asset']['connection'], 'vendor', 'id'),
                get_value(request['asset']['connection'], 'vendor', 'name'),
                get_value(request['asset'], 'product', 'id'),
                get_value(request['asset'], 'product', 'name'),
                get_value(request, 'asset', 'id'),
                get_value(request, 'asset', 'external_id'),
                get_value(request, 'asset', 'status'),
                get_value(request['asset'], 'connection', 'type'),
                get_value(connection, 'hub', 'id') if 'hub' in connection else '',
                get_value(connection, 'hub', 'name') if 'hub' in connection else '',
            )
        progress += 1
        progress_callback(progress, total)
コード例 #3
0
def generate(client, parameters, progress_callback):

    query = R()
    query &= R().created.ge(parameters['date']['after'])
    query &= R().created.le(parameters['date']['before'])
    if parameters.get('product') and parameters['product']['all'] is False:
        query &= R().asset.product.id.oneof(parameters['product']['choices'])
    if parameters.get('rr_type') and parameters['rr_type']['all'] is False:
        query &= R().type.oneof(parameters['rr_type']['choices'])
    query &= R().status.eq('failed')
    if parameters.get('connection_type') and parameters['connection_type']['all'] is False:
        query &= R().asset.connection.type.oneof(parameters['connection_type']['choices'])
    requests = client.requests.filter(query)
    progress = 0
    total = requests.count()
    today = datetime.today().strftime('%Y-%m-%d-%H:%M:%S')
    for request in requests:
        connection = request['asset']['connection']
        yield (
            get_basic_value(request, 'id'),
            get_basic_value(request, 'type'),
            convert_to_datetime(
                get_basic_value(request, 'created'),
            ),
            convert_to_datetime(
                get_basic_value(request, 'updated'),
            ),
            today,
            get_value(request['asset']['tiers'], 'customer', 'id'),
            get_value(request['asset']['tiers'], 'customer', 'name'),
            get_value(request['asset']['tiers'], 'customer', 'external_id'),
            get_value(request['asset']['tiers'], 'tier1', 'id'),
            get_value(request['asset']['tiers'], 'tier1', 'name'),
            get_value(request['asset']['tiers'], 'tier1', 'external_id'),
            get_value(request['asset']['tiers'], 'tier2', 'id'),
            get_value(request['asset']['tiers'], 'tier2', 'name'),
            get_value(request['asset']['tiers'], 'tier2', 'external_id'),
            get_value(request['asset']['connection'], 'provider', 'id'),
            get_value(request['asset']['connection'], 'provider', 'name'),
            get_value(request['asset']['connection'], 'vendor', 'id'),
            get_value(request['asset']['connection'], 'vendor', 'name'),
            get_value(request['asset'], 'product', 'id'),
            get_value(request['asset'], 'product', 'name'),
            get_value(request, 'asset', 'id'),
            get_value(request, 'asset', 'external_id'),
            get_value(request['asset'], 'connection', 'type'),
            get_value(connection, 'hub', 'id') if 'hub' in connection else '',
            get_value(connection, 'hub', 'name') if 'hub' in connection else '',
            get_value(request, 'asset', 'status'),
            get_basic_value(request, 'reason'),
        )

        progress += 1
        progress_callback(progress, total)
コード例 #4
0
ファイル: entrypoint.py プロジェクト: d3rky/connect-reports
def generate(client, parameters, progress_callback):
    query = R()
    if parameters.get('type') and parameters['type']['all'] is False:
        query &= R().type.oneof(parameters['type']['choices'])
    if parameters.get('status') and parameters['status']['all'] is False:
        query &= R().status.oneof(parameters['status']['choices'])
    contracts = client.contracts.filter(query).select("agreement").order_by(
        "-status")
    progress = 0
    total = contracts.count()

    for contract in contracts:
        yield (
            get_basic_value(contract, 'id'),
            get_basic_value(contract, 'type'),
            get_basic_value(contract, 'version'),
            'Yes' if get_basic_value(contract, 'latest') is False else '-',
            get_value(contract, 'agreement', 'id'),
            get_value(contract, 'agreement', 'name'),
            get_value(contract, 'issuer', 'name'),
            convert_to_datetime(get_value(contract['events'], 'created',
                                          'at')),
            get_value(contract, 'marketplace', 'id'),
            get_value(contract, 'marketplace', 'name'),
            get_value(contract['sourcing'], 'product', 'id')
            if 'sourcing' in contract else '-',
            get_value(contract['sourcing'], 'product', 'name')
            if 'sourcing' in contract else '-',
            get_value(
                contract['events']['signed'],
                'by',
                'name',
            ) if 'signed' in contract['events'] else '-',
            convert_to_datetime(
                get_value(
                    contract['events'],
                    'signed',
                    'at',
                ), ) if 'created' in contract['events'] else '-',
            get_value(
                contract['events']['countersigned'],
                'by',
                'name',
            ) if 'countersigned' in contract['events'] else '-',
            convert_to_datetime(
                get_value(
                    contract['events'],
                    'countersigned',
                    'at',
                ), ) if 'countersigned' in contract['events'] else '-',
        )
        progress += 1
        progress_callback(progress, total)
コード例 #5
0
def generate(client, parameters, progress_callback):
    requests = _get_requests(client, parameters)

    progress = 0
    total = requests.count()

    for request in requests:
        connection = request['asset']['connection']
        for item in request['items']:
            yield (
                request['id'],
                convert_to_datetime(request['period']['from']),
                convert_to_datetime(request['period']['to']),
                get_basic_value(request['period'], 'delta'),
                get_basic_value(request['period'], 'uom'),
                get_basic_value(item['billing'], 'cycle_number'),
                get_basic_value(item, 'global_id'),
                get_basic_value(item, 'display_name'),
                get_basic_value(item, 'item_type'),
                get_basic_value(item, 'type'),
                get_basic_value(item, 'mpn'),
                get_basic_value(item, 'period'),
                get_basic_value(item, 'quantity'),
                get_value(request['asset']['tiers'], 'customer', 'id'),
                get_value(request['asset']['tiers'], 'customer', 'name'),
                get_value(request['asset']['tiers'], 'customer',
                          'external_id'),
                get_value(request['asset']['tiers'], 'tier1', 'id'),
                get_value(request['asset']['tiers'], 'tier1', 'name'),
                get_value(request['asset']['tiers'], 'tier1', 'external_id'),
                get_value(request['asset']['tiers'], 'tier2', 'id'),
                get_value(request['asset']['tiers'], 'tier2', 'name'),
                get_value(request['asset']['tiers'], 'tier2', 'external_id'),
                get_value(request['asset']['connection'], 'provider', 'id'),
                get_value(request['asset']['connection'], 'provider', 'name'),
                get_value(request['asset']['connection'], 'vendor', 'id'),
                get_value(request['asset']['connection'], 'vendor', 'name'),
                get_value(request['asset'], 'product', 'id'),
                get_value(request['asset'], 'product', 'name'),
                get_value(request, 'asset', 'id'),
                get_value(request, 'asset', 'external_id'),
                get_value(request, 'asset', 'status'),
                get_value(request['asset'], 'connection', 'type'),
                get_value(connection, 'hub', 'id')
                if 'hub' in connection else '',
                get_value(connection, 'hub', 'name')
                if 'hub' in connection else '',
            )
        progress += 1
        progress_callback(progress, total)
コード例 #6
0
def generate(client, parameters, progress_callback):
    all_status = ['draft', 'reviewing', 'deploying', 'completed', 'canceled']
    query = R()
    if parameters.get('date') and parameters['date']['after'] != '':
        query &= R().created.ge(parameters['date']['after'])
        query &= R().created.le(parameters['date']['before'])
    if parameters.get('product') and parameters['product']['all'] is False:
        query &= R().listing.product.id.oneof(parameters['product']['choices'])
    if parameters.get('mkp') and parameters['mkp']['all'] is False:
        query &= R().listing.contract.marketplace.id.oneof(
            parameters['mkp']['choices'])
    if parameters.get('rr_status') and parameters['rr_status']['all'] is False:
        query &= R().state.oneof(parameters['rr_status']['choices'])
    else:
        query &= R().state.oneof(all_status)
    requests = client.listing_requests.filter(query).order_by("-created")
    progress = 0
    total = requests.count()
    output = []
    today = datetime.today().strftime('%Y-%m-%d %H:%M:%S')

    for request in requests:
        yield (
            get_basic_value(request, 'id'),
            get_basic_value(request, 'type'),
            get_basic_value(request, 'state'),
            convert_to_datetime(get_basic_value(request, 'created')),
            convert_to_datetime(get_basic_value(request, 'updated')),
            today,
            get_value(request, 'listing', 'id'),
            get_value(request['listing'], 'contract', 'id'),
            get_value(request, 'product', 'id'),
            get_value(request, 'product', 'name'),
            get_value(request['listing'], 'provider', 'id'),
            get_value(request['listing'], 'provider', 'name'),
            get_value(request['listing'], 'vendor', 'id'),
            get_value(request['listing'], 'vendor', 'name'),
        )
        progress += 1
        progress_callback(progress, total)

    return output
コード例 #7
0
def _process_line(usage_file):
    return (
        usage_file['id'],
        usage_file['vendor']['id'],
        usage_file['vendor']['name'],
        usage_file['product']['id'],
        usage_file['product']['name'],
        usage_file['provider']['id'],
        usage_file['provider']['name'],
        usage_file['marketplace']['id'],
        usage_file['marketplace']['name'],
        usage_file['stats'].get('uploaded', 0),
        usage_file['stats'].get('pending', 0),
        usage_file['stats'].get('accepted', 0),
        usage_file['stats'].get('closed', 0),
        convert_to_datetime(get_value(usage_file['events'], 'created', 'at')),
        convert_to_datetime(get_value(usage_file['events'], 'accepted', 'at')),
        convert_to_datetime(get_value(usage_file['events'], 'closed', 'at')),
        usage_file['status'],
    )
コード例 #8
0
def _process_line(subscription):
    return (
        subscription.get('id'),
        subscription.get('external_id', '-'),
        get_value(subscription, 'connection', 'type'),
        convert_to_datetime(subscription['events']['created']['at']),
        convert_to_datetime(subscription['events']['updated']['at']),
        subscription.get('status'),
        calculate_period(
            subscription['billing']['period']['delta'],
            subscription['billing']['period']['uom'],
        ) if 'billing' in subscription else '-',
        get_anniversary_day(subscription['billing'])
        if 'billing' in subscription else '-',
        get_anniversary_month(subscription['billing'])
        if 'billing' in subscription else '-',
        subscription['contract']['id'] if 'contract' in subscription else '-',
        subscription['contract']['name']
        if 'contract' in subscription else '-',
        get_value(subscription.get('tiers', ''), 'customer', 'id'),
        get_value(subscription.get('tiers', ''), 'customer', 'name'),
        get_value(subscription.get('tiers', ''), 'customer', 'external_id'),
        get_value(subscription.get('tiers', ''), 'tier1', 'id'),
        get_value(subscription.get('tiers', ''), 'tier1', 'name'),
        get_value(subscription.get('tiers', ''), 'tier1', 'external_id'),
        get_value(subscription.get('tiers', ''), 'tier2', 'id'),
        get_value(subscription.get('tiers', ''), 'tier2', 'name'),
        get_value(subscription.get('tiers', ''), 'tier2', 'external_id'),
        get_value(subscription['connection'], 'provider', 'id'),
        get_value(subscription['connection'], 'provider', 'name'),
        get_value(subscription['connection'], 'vendor', 'id'),
        get_value(subscription['connection'], 'vendor', 'name'),
        get_value(subscription, 'product', 'id'),
        get_value(subscription, 'product', 'name'),
        get_value(subscription['connection'], 'hub', 'id'),
        get_value(subscription['connection'], 'hub', 'name'),
        get_asset_parameter(subscription, 'previous_contract_number'),
        get_asset_parameter(subscription, 'vendor_subscription_id'),
    )
コード例 #9
0
ファイル: entrypoint.py プロジェクト: d3rky/connect-reports
def generate(client, parameters, progress_callback):
    all_status = ['listed', 'unlisted']
    query = R()
    if parameters.get('date') and parameters['date']['after'] != '':
        query &= R().created.ge(parameters['date']['after'])
        query &= R().created.le(parameters['date']['before'])
    if parameters.get('product') and parameters['product']['all'] is False:
        query &= R().product.id.oneof(parameters['product']['choices'])
    if parameters.get('mkp') and parameters['mkp']['all'] is False:
        query &= R().contract.marketplace.id.oneof(
            parameters['mkp']['choices'])
    if parameters.get('rr_status') and parameters['rr_status']['all'] is False:
        query &= R().state.oneof(parameters['rr_status']['choices'])
    else:
        query &= R().state.oneof(all_status)
    listings = client.listings.filter(query).order_by("-created")
    progress = 0
    total = listings.count()
    today = datetime.today().strftime('%Y-%m-%d %H:%M:%S')

    for listing in listings:
        yield (
            get_basic_value(listing, 'id'),
            get_basic_value(listing, 'status'),
            convert_to_datetime(get_basic_value(listing, 'created'), ),
            convert_to_datetime(get_basic_value(listing, 'updated'), ),
            today,
            get_value(listing, 'contract', 'id'),
            get_value(listing, 'product', 'id'),
            get_value(listing, 'product', 'name'),
            get_value(listing, 'provider', 'id'),
            get_value(listing, 'provider', 'name'),
            get_value(listing, 'vendor', 'id'),
            get_value(listing, 'vendor', 'name'),
        )
        progress += 1
        progress_callback(progress, total)
コード例 #10
0
def get_record(client, asset, start_date, end_date, progress):
    billable_status = ['approved', 'closed']
    rql = R().asset.id.eq(asset['id']) & R().status.oneof(billable_status) & (
        (R().start_date.ge(f'{start_date}') & R().start_date.lt(f'{end_date}'))
        | (R().end_date.ge(f'{start_date}') & R().end_date.lt(f'{end_date}')))
    usage_records = client.ns('usage').records.filter(rql)
    uf = []
    for record in usage_records:
        if record['usagefile']['id'] not in uf:
            uf.append(record['usagefile']['id'])
    progress.increment()
    return [
        get_basic_value(asset, 'id'),
        get_basic_value(asset, 'external_id'),
        get_basic_value(asset, 'status'),
        convert_to_datetime(asset['events']['created']['at']),
        convert_to_datetime(asset['events']['updated']['at']),
        get_value(asset['tiers'], 'customer', 'id'),
        get_value(asset['tiers'], 'customer', 'name'),
        get_value(asset['tiers'], 'customer', 'external_id'),
        get_value(asset['tiers'], 'tier1', 'id'),
        get_value(asset['tiers'], 'tier1', 'name'),
        get_value(asset['tiers'], 'tier1', 'external_id'),
        get_value(asset['tiers'], 'tier2', 'id'),
        get_value(asset['tiers'], 'tier2', 'name'),
        get_value(asset['tiers'], 'tier2', 'external_id'),
        get_value(asset['connection'], 'provider', 'id'),
        get_value(asset['connection'], 'provider', 'name'),
        get_value(asset['connection'], 'vendor', 'id'),
        get_value(asset['connection'], 'vendor', 'name'),
        get_value(asset, 'product', 'id'),
        get_value(asset, 'product', 'name'),
        get_value(asset['connection'], 'hub', 'id'),
        get_value(asset['connection'], 'hub', 'name'),
        len(uf), ', '.join(uf)
    ]
コード例 #11
0
ファイル: entrypoint.py プロジェクト: d3rky/connect-reports
def get_record(client, asset, start_date, end_date, progress):
    rql = f"eq(asset.id,{asset['id']}),in(status,(approved,closed)),(and(ge(start_date,"
    rql += f"{start_date}),lt(start_date,{end_date}))|and(ge(end_date,{start_date}),"
    rql += f"lt(end_date,{end_date})))"
    usage_records = client.ns('usage').records.filter(rql)
    uf = []
    for record in usage_records:
        if record['usagefile']['id'] not in uf:
            uf.append(record['usagefile']['id'])
    progress.increment()
    return [
        get_basic_value(asset, 'id'),
        get_basic_value(asset, 'external_id'),
        get_basic_value(asset, 'status'),
        convert_to_datetime(asset['events']['created']['at']),
        convert_to_datetime(asset['events']['updated']['at']),
        get_value(asset['tiers'], 'customer', 'id'),
        get_value(asset['tiers'], 'customer', 'name'),
        get_value(asset['tiers'], 'customer', 'external_id'),
        get_value(asset['tiers'], 'tier1', 'id'),
        get_value(asset['tiers'], 'tier1', 'name'),
        get_value(asset['tiers'], 'tier1', 'external_id'),
        get_value(asset['tiers'], 'tier2', 'id'),
        get_value(asset['tiers'], 'tier2', 'name'),
        get_value(asset['tiers'], 'tier2', 'external_id'),
        get_value(asset['connection'], 'provider', 'id'),
        get_value(asset['connection'], 'provider', 'name'),
        get_value(asset['connection'], 'vendor', 'id'),
        get_value(asset['connection'], 'vendor', 'name'),
        get_value(asset, 'product', 'id'),
        get_value(asset, 'product', 'name'),
        get_value(asset['connection'], 'hub', 'id'),
        get_value(asset['connection'], 'hub', 'name'),
        len(uf),
        ', '.join(uf),
    ]
コード例 #12
0
def generate(client, parameters, progress_callback):
    all_types = ['tiers_setup', 'inquiring', 'pending', 'approved', 'failed']
    query = R()
    query &= R().events.created.at.ge(parameters['date']['after'])
    query &= R().events.created.at.le(parameters['date']['before'])
    if parameters.get('product') and parameters['product']['all'] is False:
        query &= R().product.id.oneof(parameters['product']['choices'])
    if parameters.get('mkp') and parameters['mkp']['all'] is False:
        query &= R().marketplace.id.oneof(parameters['mkp']['choices'])
    if parameters.get('rr_type') and parameters['rr_type']['all'] is False:
        query &= R().type.oneof(parameters['rr_type']['choices'])
    if parameters.get('rr_status') and parameters['rr_status']['all'] is False:
        query &= R().status.oneof(parameters['rr_status']['choices'])
    else:
        query &= R().status.oneof(all_types)

    requests = client.ns('tier').collection('config-requests').filter(query).order_by('-created')
    progress = 0
    total = requests.count()
    today = datetime.today().strftime('%Y-%m-%d %H:%M:%S')

    for request in requests:
        config = request['configuration']
        yield(
            get_basic_value(request, 'id'),
            get_basic_value(request, 'type'),
            convert_to_datetime(get_value(request['events'], 'created', 'at')),
            convert_to_datetime(get_value(request['events'], 'updated', 'at')),
            today,
            get_basic_value(request, 'status'),
            get_value(
                config,
                'connection',
                'type'
            ),
            get_value(request, 'configuration', 'id'),
            get_value(request, 'configuration', 'tier_level'),
            get_value(config, 'account', 'name'),
            get_value(config, 'account', 'external_id'),
            get_value(config, 'account', 'id'),
            get_value(request, 'parent_configuration', 'id'),
            get_value(request, 'parent_configuration', 'tier_level'),
            get_value(
                request['parent_configuration'],
                'account',
                'name'
            ) if 'parent_configuration' in request else '-',
            get_value(
                request['parent_configuration'],
                'account',
                'external_id'
            ) if 'parent_configuration' in request else '-',
            get_value(
                request['parent_configuration'],
                'account',
                'id'
            ) if 'parent_configuration' in request else '-',
            get_value(
                config['connection'],
                'provider',
                'id'
            ) if 'connection' in config else '-',
            get_value(
                config['connection'],
                'provider',
                'name'
            ) if 'connection' in config else '-',
            get_value(
                config['connection'],
                'vendor',
                'id'
            ) if 'connection' in config else '-',
            get_value(
                config['connection'],
                'vendor',
                'name'
            ) if 'connection' in config else '-',
            get_value(
                config,
                'product',
                'id'
            ),
            get_value(
                config,
                'product',
                'name'
            ),
            get_value(
                config['connection'],
                'hub',
                'id'
            ) if 'connection' in config else '-',
            get_value(
                config['connection'],
                'hub',
                'name'
            ) if 'connection' in config else '-',
            get_value(
                config,
                'contract',
                'id'
            ),
            get_value(
                config,
                'marketplace',
                'id'
            ),
            get_value(
                config,
                'marketplace',
                'name'
            ),
        )

        progress += 1
        progress_callback(progress, total)
コード例 #13
0
def generate(client, parameters, progress_callback):
    warm_up_tcs(client, parameters['products']['choices'])
    subscriptions_rql = R()
    if not parameters.get("products") or len(
            parameters['products']['choices']) < 1:
        raise RuntimeError("AWS products was not selected")
    if parameters.get("date"):
        subscriptions_rql &= R().events.created.at.ge(
            parameters['date']['after'])
        subscriptions_rql &= R().events.created.at.le(
            parameters['date']['before'])
    subscriptions_rql &= R().product.id.oneof(
        parameters['products']['choices'])
    subscriptions_rql &= R().status.ne('draft')
    subscriptions = client.assets.filter(subscriptions_rql)
    total_subscriptions = subscriptions.count()
    progress = 0
    for subscription in subscriptions:
        yield (
            subscription['id'],
            subscription.get('external_id', "-"),
            subscription['status'],
            subscription['marketplace']['name'],
            subscription['product']['id'],
            convert_to_datetime(subscription['events']['created']['at']),
            get_asset_parameter(subscription, "awsAccountId"),
            get_value(subscription['tiers'], "customer", "external_id"),
            get_value(subscription['tiers'], "customer", "name"),
            get_value(subscription['tiers']["customer"], "contact_info",
                      "address_line1"),
            get_value(subscription['tiers']["customer"], "contact_info",
                      "address_line2"),
            get_value(subscription['tiers']["customer"], "contact_info",
                      "city"),
            get_value(subscription['tiers']["customer"], "contact_info",
                      "state"),
            get_value(subscription['tiers']["customer"], "contact_info",
                      "postal_code"),
            get_value(subscription['tiers']["customer"], "contact_info",
                      "country"),
            get_value(subscription['tiers']["customer"]["contact_info"],
                      "contact", "email"),
            get_asset_parameter(subscription, "isGovernmentEntity"),
            get_asset_parameter(subscription, "useAccountFor"),
            get_value(subscription['tiers'], "tier1", "external_id"),
            get_value(subscription['tiers'], "tier1", "name"),
            get_value(subscription['tiers']["tier1"], "contact_info",
                      "address_line1"),
            get_value(subscription['tiers']["tier1"], "contact_info",
                      "address_line2"),
            get_value(subscription['tiers']["tier1"], "contact_info", "city"),
            get_value(subscription['tiers']["tier1"], "contact_info", "state"),
            get_value(subscription['tiers']["tier1"], "contact_info",
                      "postal_code"),
            get_value(subscription['tiers']["tier1"], "contact_info",
                      "country"),
            get_value(subscription['tiers']["tier1"]["contact_info"],
                      "contact", "email"),
            # get_aws_mpn(client, get_value(subscription['tiers'], "tier1", 'id'), subscription['product']['id'])
            get_awsmpn(get_value(subscription['tiers'], "tier1", 'id'),
                       subscription['product']['id']))
        progress += 1
        progress_callback(progress, total_subscriptions)
コード例 #14
0
def get_subscription_record(client, subscription, progress):
    param_values = get_product_specifics(subscription, client)
    output = []
    try:
        for item in subscription["items"]:
            output.append([
                subscription["type"].capitalize() + " Billing",
                subscription["id"],
                subscription["asset"]["product"]["id"],
                subscription["asset"]["product"]["name"],
                subscription["asset"]["connection"]["vendor"]['id'],
                subscription["asset"]["connection"]["vendor"]["name"],
                convert_to_datetime(subscription["events"]["created"]["at"]),
                convert_to_datetime(
                    subscription["asset"]["events"]["created"]["at"]),
                subscription["asset"]["id"],
                subscription["asset"]["status"],
                subscription["asset"]["external_id"],
                subscription["asset"]["tiers"]["customer"]["name"],
                (subscription["asset"]["tiers"]["customer"]["external_id"]
                 if "external_id" in subscription["asset"]["tiers"]["customer"]
                 else
                 subscription["asset"]["tiers"]["customer"]["external_uid"]),
                subscription["asset"]["tiers"]["customer"]["contact_info"]
                ["country"],
                subscription["asset"]["tiers"]["tier1"]["name"],
                (subscription["asset"]["tiers"]["tier1"]["external_id"]
                 if "external_id" in subscription["asset"]["tiers"]["tier1"]
                 else subscription["asset"]["tiers"]["tier1"]["external_uid"]),
                subscription["asset"]["tiers"]["tier1"]["contact_info"]
                ["country"],
                (subscription["asset"]["tiers"]["tier2"]["name"]
                 if "tier2" in subscription["asset"]["tiers"] else "-"),
                (subscription["asset"]["tiers"]["tier2"]["external_id"]
                 if "tier2" in subscription["asset"]["tiers"] else "-"),
                (subscription["asset"]["tiers"]["tier2"]["contact_info"]
                 ["country"]
                 if "tier2" in subscription["asset"]["tiers"] else "-"),
                item["global_id"],
                item["mpn"],
                item["display_name"],
                item.get("period", item.get("item_type")),
                0,
                ("unlimited" if item["quantity"] == -1 else item["quantity"]),
                ("unlimited" if item["quantity"] == -1 else item["quantity"]),
                subscription["asset"]["connection"]["provider"]["id"],
                subscription["asset"]["connection"]["provider"]["name"],
                subscription["asset"]["marketplace"]["id"],
                subscription["asset"]["marketplace"]["name"],
                ("Syndication"
                 if "CRU" in subscription["asset"]["contract"]["id"] else
                 "Distribution"),
                param_values["microsoft_domain"],
                param_values["subscription_id"],
                param_values["ms_customer_id"],
                param_values["microsoft_order_id"],
                param_values["microsoft_plan_subscription_id"],
                param_values["microsoft_tier1_mpn"],
            ])
    except Exception:
        pass
    progress.increment()
    return output
コード例 #15
0
def get_request_record(client, request, progress):
    param_values = get_product_specifics(request, client)
    output = []
    for item in request["asset"]["items"]:
        try:
            if item["quantity"] == "0" and item["old_quantity"] == "0":
                continue
            output.append([
                request["type"].capitalize(),
                request["id"],
                request["asset"]["product"]["id"],
                request["asset"]["product"]["name"],
                request["asset"]["connection"]["vendor"]['id'],
                request["asset"]["connection"]["vendor"]["name"],
                convert_to_datetime(request["created"]),
                convert_to_datetime(
                    request["asset"]["events"]["created"]["at"]),
                request["asset"]["id"],
                request["asset"]["status"],
                request["asset"]["external_id"],
                request["asset"]["tiers"]["customer"]["name"],
                (request["asset"]["tiers"]["customer"]["external_id"]
                 if "external_id" in request["asset"]["tiers"]["customer"] else
                 request["asset"]["tiers"]["customer"]["external_uid"]),
                request["asset"]["tiers"]["customer"]["contact_info"]
                ["country"],
                request["asset"]["tiers"]["tier1"]["name"],
                (request["asset"]["tiers"]["tier1"]["external_id"]
                 if "external_id" in request["asset"]["tiers"]["tier1"] else
                 request["asset"]["tiers"]["tier1"]["external_uid"]),
                request["asset"]["tiers"]["tier1"]["contact_info"]["country"],
                (request["asset"]["tiers"]["tier2"]["name"]
                 if "name" in request["asset"]["tiers"]["tier2"] else "-"),
                (request["asset"]["tiers"]["tier2"]["external_id"] if
                 "external_id" in request["asset"]["tiers"]["tier2"] else "-"),
                (request["asset"]["tiers"]["tier2"]["contact_info"]["country"]
                 if request["asset"]["tiers"]["tier2"] and "country"
                 in request["asset"]["tiers"]["tier2"]["contact_info"] else
                 "-"),
                item["global_id"],
                item["mpn"],
                item["display_name"],
                item.get("period", item.get("item_type")),
                item["old_quantity"],
                item["quantity"],
                delta(item["old_quantity"], item["quantity"]),
                request["asset"]["connection"]["provider"]["id"],
                request["asset"]["connection"]["provider"]["name"],
                request["asset"]["marketplace"]["id"],
                request["asset"]["marketplace"]["name"],
                request["asset"]["contract"].get("type",
                                                 "distribution").capitalize(),
                param_values["microsoft_domain"],
                param_values["subscription_id"],
                param_values["ms_customer_id"],
                param_values["microsoft_order_id"],
                param_values["microsoft_plan_subscription_id"],
                param_values["microsoft_tier1_mpn"],
            ])
        except Exception:
            pass
    progress.increment()
    return output
コード例 #16
0
ファイル: test_sla.py プロジェクト: cloudblue/connect-reports
def test_generate(
    progress,
    client_factory,
    response_factory,
    sla_response,
    mocker,
    monkeypatch,
):
    class MyDatetimeClass():
        def utcnow():
            return FAKE_DATE

    monkeypatch.setattr(reports.sla.entrypoint.datetime, 'datetime',
                        MyDatetimeClass)

    mocker.patch(
        'connect.client.models.resourceset.ResourceSet.count',
        return_value=9,
    )

    responses = []
    responses.append(response_factory(value=sla_response, ), )

    client = client_factory(responses)

    parameters = {'offset_red_days': 5, 'offset_yellow_days': 2}
    generator = generate(
        client,
        parameters,
        progress,
        renderer_type='xlsx',
        extra_context_callback=mocker.MagicMock(),
    )
    expected = []
    for row in sla_response:
        days = (FAKE_DATE - convert_to_datetime(row['created'])).days
        sla_group = _get_sla_group(convert_to_datetime(row['created']))
        expected.append((
            row['id'],
            get_dict_element(row, 'asset', 'product', 'id'),
            get_dict_element(row, 'asset', 'product', 'name'),
            get_dict_element(row, 'asset', 'connection', 'vendor', 'id'),
            get_dict_element(row, 'asset', 'connection', 'vendor', 'name'),
            get_dict_element(row, 'asset', 'connection', 'provider', 'id'),
            get_dict_element(row, 'asset', 'connection', 'provider', 'name'),
            get_dict_element(row, 'type'),
            days,
            convert_to_datetime(get_dict_element(row, 'created')),
            get_dict_element(row, 'status'),
            get_dict_element(row, 'asset', 'connection', 'type'),
            get_dict_element(row, 'assignee', 'email'),
            get_dict_element(row, 'asset', 'tiers', 'customer', 'id'),
            get_dict_element(row, 'asset', 'tiers', 'customer', 'external_id'),
            get_dict_element(row, 'asset', 'tiers', 'customer', 'name'),
            _concat_if_content(
                get_dict_element(
                    row,
                    'asset',
                    'tiers',
                    'customer',
                    'contact_info',
                    'contact',
                    'last_name',
                ),
                get_dict_element(
                    row,
                    'asset',
                    'tiers',
                    'customer',
                    'contact_info',
                    'contact',
                    'first_name',
                ),
            ),
            get_dict_element(
                row,
                'asset',
                'tiers',
                'customer',
                'contact_info',
                'contact',
                'email',
            ),
            get_dict_element(row, 'asset', 'tiers', 'tier1', 'name'),
            get_dict_element(row, 'asset', 'tiers', 'tier1', 'external_id'),
            _concat_if_content(
                get_dict_element(
                    row,
                    'asset',
                    'tiers',
                    'tier1',
                    'contact_info',
                    'contact',
                    'last_name',
                ),
                get_dict_element(
                    row,
                    'asset',
                    'tiers',
                    'tier1',
                    'contact_info',
                    'contact',
                    'first_name',
                ),
            ),
            get_dict_element(
                row,
                'asset',
                'tiers',
                'tier1',
                'contact_info',
                'contact',
                'email',
            ),
            get_dict_element(row, 'asset', 'tiers', 'tier2', 'name'),
            get_dict_element(row, 'asset', 'tiers', 'tier2', 'external_id'),
            _concat_if_content(
                get_dict_element(
                    row,
                    'asset',
                    'tiers',
                    'tier2',
                    'contact_info',
                    'contact',
                    'last_name',
                ),
                get_dict_element(
                    row,
                    'asset',
                    'tiers',
                    'tier2',
                    'contact_info',
                    'contact',
                    'first_name',
                ),
            ),
            get_dict_element(
                row,
                'asset',
                'tiers',
                'tier2',
                'contact_info',
                'contact',
                'email',
            ),
            get_dict_element(row, 'marketplace', 'id'),
            get_dict_element(row, 'marketplace', 'name'),
            sla_group,
        ))

    index = 0
    items = list(generator)
    for element in items:
        assert element == expected[index]
        index += 1
コード例 #17
0
def generate(client, parameters, progress_callback):
    """
    Extracts data from Connect using the ConnectClient instance
    and input parameters provided as arguments, applies
    required transformations (if any) and returns an iterator of rows
    that will be used to fill the Excel file.
    Each element returned by the iterator must be an iterator over
    the columns value.

    :param client: An instance of the CloudBlue Connect
                    client.
    :type client: connect.client.ConnectClient
    :param parameters: Input parameters used to calculate the
                        resulting dataset.
    :type parameters: dict
    :param progress_callback: A function that accepts t
                                argument of type int that must
                                be invoked to notify the progress
                                of the report generation.
    :type progress_callback: func
    """
    all_types = [
        'tiers_setup', 'inquiring', 'pending', 'approved', 'failed', 'draft'
    ]
    query = R()
    query &= R().created.ge(parameters['date']['after'])
    query &= R().created.le(parameters['date']['before'])
    if parameters.get('product') and parameters['product']['all'] is False:
        query &= R().asset.product.id.oneof(parameters['product']['choices'])
    if parameters.get('rr_type') and parameters['rr_type']['all'] is False:
        query &= R().type.oneof(parameters['rr_type']['choices'])
    if parameters.get('rr_status') and parameters['rr_status']['all'] is False:
        query &= R().status.oneof(parameters['rr_status']['choices'])
    else:
        query &= R().status.oneof(all_types)
    if parameters.get('mkp') and parameters['mkp']['all'] is False:
        query &= R().asset.marketplace.id.oneof(parameters['mkp']['choices'])
    if parameters.get('hub') and parameters['hub']['all'] is False:
        query &= R().asset.connection.hub.id.oneof(
            parameters['hub']['choices'])

    requests = client.requests.filter(query)
    progress = 0
    total = requests.count()

    today = datetime.today().strftime('%Y-%m-%d %H:%M:%S')

    for request in requests:
        connection = request['asset']['connection']
        for item in request['asset']['items']:
            yield (
                get_basic_value(request, 'id'),
                get_basic_value(request, 'type'),
                convert_to_datetime(get_basic_value(request, 'created'), ),
                convert_to_datetime(get_basic_value(request, 'updated'), ),
                today,
                get_basic_value(item, 'global_id'),
                get_basic_value(item, 'display_name'),
                get_basic_value(item, 'item_type'),
                get_basic_value(item, 'type'),
                get_basic_value(item, 'mpn'),
                get_basic_value(item, 'period'),
                get_basic_value(item, 'quantity'),
                get_value(request['asset']['tiers'], 'customer', 'id'),
                get_value(request['asset']['tiers'], 'customer', 'name'),
                get_value(request['asset']['tiers'], 'customer',
                          'external_id'),
                get_value(request['asset']['tiers'], 'tier1', 'id'),
                get_value(request['asset']['tiers'], 'tier1', 'name'),
                get_value(request['asset']['tiers'], 'tier1', 'external_id'),
                get_value(request['asset']['tiers'], 'tier2', 'id'),
                get_value(request['asset']['tiers'], 'tier2', 'name'),
                get_value(request['asset']['tiers'], 'tier2', 'external_id'),
                get_value(request['asset']['connection'], 'provider', 'id'),
                get_value(request['asset']['connection'], 'provider', 'name'),
                get_value(request['asset']['connection'], 'vendor', 'id'),
                get_value(request['asset']['connection'], 'vendor', 'name'),
                get_value(request['asset'], 'product', 'id'),
                get_value(request['asset'], 'product', 'name'),
                get_value(request, 'asset', 'id'),
                get_value(request, 'asset', 'external_id'),
                get_value(request['asset'], 'connection', 'type'),
                get_value(connection, 'hub', 'id')
                if 'hub' in connection else '',
                get_value(connection, 'hub', 'name')
                if 'hub' in connection else '',
                get_value(request, 'asset', 'status'),
            )
        progress += 1
        progress_callback(progress, total)