Exemple #1
0
def aws_cost_by_resource_m(accounts, month, category):
    try:
        date_from = datetime.strptime(month, "%Y-%m-%d")
        assert category[0] in ['<', '>']
        cat = int(category[1:])
    except:
        return jsonify(error='Not found.'), 404
    raw_data = AWSDetailedLineitem.get_cost_by_resource(
        [account.get_aws_user_id() for account in accounts],
        date_from=date_from)

    def transform(r):
        r['resource_name'] = r['resource']
        return r

    minus = category[0] == '<'
    data = [
        transform(r) for r in raw_data
        if (minus and cat > r['cost'] >= cat / 10) or (
            not minus and r['cost'] > cat)
    ]
    if len(data) <= 0:
        return jsonify(error='Not found.'), 404
    return jsonify(
        category=dict(resources=data, total=sum([x['cost'] for x in data])))
Exemple #2
0
def aws_cost_by_resource_month_categories_m(accounts, month):
    try:
        date_from = datetime.strptime(month, "%Y-%m-%d")
    except:
        return jsonify(error='Not found.'), 404
    raw_data = AWSDetailedLineitem.get_cost_by_resource([account.get_aws_user_id() for account in accounts], date_from=date_from)
    cat = []
    max_cat = 0
    for new in raw_data:
        x = 1
        while new['cost'] > x:
            x *= 10
        if x >= max_cat:
            max_cat = x
        elif '<{}'.format(x) not in cat:
            cat.append('<{}'.format(x))
    cat.append('>{}'.format(max_cat / 10))
    return jsonify(categories=cat)
Exemple #3
0
def aws_cost_by_resource_search_m(accounts, month, search):
    try:
        date_from = datetime.strptime(month, "%Y-%m-%d")
    except:
        return jsonify(error='Not found.'), 404
    raw_data = [
        AWSDetailedLineitem.get_cost_by_resource(account.get_aws_user_id(),
                                                 date_from=date_from,
                                                 search=search)
        for account in accounts
    ]

    def transform(r):
        r['resource_name'] = r['resource']
        return r

    data = [transform(r) for raw in raw_data for r in raw]
    if not len(data):
        return jsonify(error='Not found.'), 404
    return jsonify(search_result=data)
Exemple #4
0
def aws_cost_by_resource_month_chart_m(accounts, month):
    # TODO: Use ES agg to categorize
    try:
        date_from = datetime.strptime(month, "%Y-%m-%d")
    except:
        return jsonify(error='Not found.'), 404
    raw_data = [
        AWSDetailedLineitem.get_cost_by_resource(account.get_aws_user_id(),
                                                 date_from=date_from)
        for account in accounts
    ]
    data = []

    def get_cat_with_cost(cost):
        x = 1
        while cost > x:
            x *= 10
        return x

    def add_resource_in_data(new):
        new_cat = get_cat_with_cost(new['cost'])
        for cat in data:
            if cat['category'] == '<{}'.format(new_cat):
                cat['total'] += new['cost']
                return
        data.append(dict(category='<{}'.format(new_cat), total=new['cost']))

    for one in raw_data:
        for new in one:
            add_resource_in_data(new)
    if not len(data):
        return jsonify(message=get_next_update_estimation_message_aws(
            accounts, AWS_KEY_PROCESSING_INTERVAL_HOURS))
    max_cat = 0
    for i in range(len(data)):
        if len(data[i]['category']) > len(data[max_cat]['category']):
            max_cat = i
    data[max_cat]['category'] = data[max_cat]['category'][:-1]
    data[max_cat]['category'] = data[max_cat]['category'].replace('<', '>', 1)
    return jsonify(categories=data)