コード例 #1
0
def index(request):
    (date_start, date_end, datetime_start, datetime_end) = \
            _get_start_and_end_date(request)

    global_summary = api.GlobalSummary(request)
    if date_start > _current_month():
        messages.error(request, 'No data for the selected period')
        date_end = date_start
        datetime_end = datetime_start
    else:
        global_summary.service()
        global_summary.usage(datetime_start, datetime_end)

    dateform = forms.DateForm()
    dateform['date'].field.initial = date_start

    global_summary.avail()
    global_summary.human_readable('disk_size')
    global_summary.human_readable('ram_size')
    
    unit_cost = []
    try:
        unit_cost = api.biller_get(request,1)
    except api_exceptions.ApiException, e:
        messages.error(request, 'Unable to list unit_cost: %s' %
                                 e.message)
コード例 #2
0
def index(request):
    (date_start, date_end, datetime_start, datetime_end) = \
            _get_start_and_end_date(request)

    global_summary = api.GlobalSummary(request)
    if date_start > _current_month():
        messages.error(request, 'No data for the selected period')
        date_end = date_start
        datetime_end = datetime_start
    else:
        global_summary.service()
        global_summary.usage(datetime_start, datetime_end)

    dateform = forms.DateForm()
    dateform['date'].field.initial = date_start
    LOG.info(
        '--date field--(date_start: %s, date_end: %s, datetime_start: %s, datetime_end: %s) '
        % (date_start, date_end, datetime_start, datetime_end))

    unit_cost = []
    (unit_flag, unit_cost) = get_unitCost(request, date_start)
    if unit_flag == 0:
        messages.info(
            request,
            'Unable to list This month bill, Pleace set unit bill for this month'
        )

    if request.GET.get('format', 'html') == 'csv':
        template_name = 'django_openstack/syspanel/bills/usage.csv'
        mimetype = "text/csv"
    else:
        template_name = 'django_openstack/syspanel/bills/index.html'
        mimetype = "text/html"
    global_summary.avail()
    #    LOG.info(' ------^^^^global summary^^^^^-------- %s ' %(global_summary.summary))
    #    global_cost = global_cost_obj(0)

    (global_summary, global_cost) = calc_cost(request, global_summary,
                                              unit_cost, unit_flag)
    global_summary.human_readable('disk_size')
    global_summary.human_readable('ram_size')
    LOG.info('-------global summary---%s--+++-- %s ' %
             (global_summary, unit_cost))
    return render_to_response(
        template_name, {
            'dateform': dateform,
            'datetime_start': datetime_start,
            'datetime_end': datetime_end,
            'usage_list': global_summary.usage_list,
            'unit_cost': unit_cost,
            'csv_link': _csv_usage_link(date_start),
            'global_cost': global_cost,
            'global_summary': global_summary.summary,
            'external_links': settings.EXTERNAL_MONITORING,
        },
        context_instance=template.RequestContext(request),
        mimetype=mimetype)
コード例 #3
0
ファイル: instances.py プロジェクト: Lezval/horizon
def tenant_usage(request, tenant_id):
    (date_start, date_end, datetime_start, datetime_end) = \
            _get_start_and_end_date(request)
    if date_start > _current_month():
        messages.error(request, _('No data for the selected period'))
        date_end = date_start
        datetime_end = datetime_start

    dateform = forms.DateForm()
    dateform['date'].field.initial = date_start

    usage = {}
    try:
        usage = api.usage_get(request, tenant_id, datetime_start, datetime_end)
    except api_exceptions.ApiException, e:
        LOG.exception('ApiException getting usage info for tenant "%s"'
                      ' on date range "%s to %s"' %
                      (tenant_id, datetime_start, datetime_end))
        messages.error(request, _('Unable to get usage info: %s') % e.message)
コード例 #4
0
def tenant_usage(request, tenant_id, flag=None):
    (date_start, date_end, datetime_start, datetime_end, month_ended) = \
            _get_start_and_end_date(request, 1)
    if date_start > _current_month():
        messages.error(request, 'No data for the selected period')
        date_end = date_start
        datetime_end = datetime_start
    LOG.info(' ---$ tenant +++ usage $---')
    dateform = forms.DateForm()
    dateform['date'].field.initial = date_start
    usage_tmp = {}
    #
    global_summary1 = api.GlobalSummary(request)
    global_summary1.avail()
    LOG.info(' ---$$--tenant globale-$$$$---- %s -----$-------- ' %
             (global_summary1.usage_list))
    unit_cost = []
    try:
        (unit_flag, unit_cost) = get_unitCost(request, date_start)
    except api_exceptions.ApiException, e:
        messages.error(request, 'No data for the selected period')
コード例 #5
0
ファイル: instances.py プロジェクト: Lezval/horizon
def usage(request):
    (date_start, date_end, datetime_start, datetime_end) = \
            _get_start_and_end_date(request)

    global_summary = api.GlobalSummary(request)
    if date_start > _current_month():
        messages.error(request, _('No data for the selected period'))
        date_end = date_start
        datetime_end = datetime_start
    else:
        global_summary.service()
        global_summary.usage(datetime_start, datetime_end)

    dateform = forms.DateForm()
    dateform['date'].field.initial = date_start

    global_summary.avail()
    global_summary.human_readable('disk_size')
    global_summary.human_readable('ram_size')

    if request.GET.get('format', 'html') == 'csv':
        template_name = 'django_openstack/syspanel/instances/usage.csv'
        mimetype = "text/csv"
    else:
        template_name = 'django_openstack/syspanel/instances/usage.html'
        mimetype = "text/html"

    return render_to_response(
        template_name, {
            'dateform': dateform,
            'datetime_start': datetime_start,
            'datetime_end': datetime_end,
            'usage_list': global_summary.usage_list,
            'csv_link': _csv_usage_link(date_start),
            'global_summary': global_summary.summary,
            'external_links': settings.EXTERNAL_MONITORING,
        },
        context_instance=template.RequestContext(request),
        mimetype=mimetype)
コード例 #6
0
def usage(request):
    (date_start, date_end, datetime_start, datetime_end) = \
            _get_start_and_end_date(request)

    global_summary = api.GlobalSummary(request)
    if date_start > _current_month():
        messages.error(request, 'No data for the selected period')
        date_end = date_start
        datetime_end = datetime_start
    else:
        global_summary.service()
        global_summary.usage(datetime_start, datetime_end)

    dateform = forms.DateForm()
    dateform['date'].field.initial = date_start

    global_summary.avail()
    #
    unit_cost = []
    (unit_flag, unit_cost) = get_unitCost(request, date_start)
    LOG.info(' ------System over view  summary-------- %s ' %
             (global_summary.summary))
    if unit_flag == 0:
        messages.info(
            request,
            'This month unit cost is not set, Pleace set unit cost in Billing tab '
        )

    global_cost = global_cost_obj(0)
    if (('total_cpu_usage' in global_summary.summary) and (unit_flag == 1)):
        global_cost.vcpus = float(
            global_summary.summary['total_cpu_usage']) * float(unit_cost.vcpu)
        global_cost.ram = float(
            global_summary.summary['total_ram_usage']) * float(unit_cost.ram)
        global_cost.vdisk = float(
            global_summary.summary['total_disk_usage']) * float(
                unit_cost.vdisk)
        global_cost.total = global_cost.vcpus + global_cost.ram + global_cost.vdisk
        for usage in global_summary.usage_list:
            LOG.info(' ---$$--usage details-$$$$---- %s -----$-------- ' %
                     (usage.__dict__))
            usage.total_cpu_cost = (float(usage.total_cpu_usage) *
                                    float(unit_cost.vcpu))
            usage.total_ram_cost = (float(usage.total_ram_usage) *
                                    float(unit_cost.ram))
            usage.total_disk_cost = (float(usage.total_disk_usage) *
                                     float(unit_cost.vdisk))
            usage.total_cost = usage.total_cpu_cost + usage.total_ram_cost + usage.total_disk_cost
            for instance in usage.instances:
                LOG.info(' ---$$--instance---- %s --- ' % (instance))
                cost_vcpus = float(instance['vcpus']) * float(unit_cost.vcpu)
                cost_ram = float(instance['ram_size']) * float(unit_cost.ram)
                cost_vdisk = float(instance['disk_size']) * float(
                    unit_cost.vdisk)
                instance['cost'] = float(cost_vcpus + cost_ram +
                                         cost_vdisk) * float(instance['hours'])
                LOG.info(' ---$$--instance cost-$$$$---- %s -----$-------- ' %
                         (instance))

    else:
        global_cost.vcpus = 0.0
        global_cost.ram = 0.0
        global_cost.vdisk = 0.0
        global_cost.total = 0.0

    #
    global_summary.human_readable('disk_size')
    global_summary.human_readable('ram_size')

    if request.GET.get('format', 'html') == 'csv':
        template_name = 'django_openstack/syspanel/instances/usage.csv'
        mimetype = "text/csv"
    else:
        template_name = 'django_openstack/syspanel/instances/usage.html'
        mimetype = "text/html"

    return render_to_response(
        template_name, {
            'dateform': dateform,
            'datetime_start': datetime_start,
            'datetime_end': datetime_end,
            'usage_list': global_summary.usage_list,
            'csv_link': _csv_usage_link(date_start),
            'unit_cost': unit_cost,
            'global_cost': global_cost,
            'global_summary': global_summary.summary,
            'external_links': settings.EXTERNAL_MONITORING,
        },
        context_instance=template.RequestContext(request),
        mimetype=mimetype)
コード例 #7
0
def usage(request):
    (date_start, date_end, datetime_start, datetime_end) = \
            _get_start_and_end_date(request)
    global_summary = api.GlobalSummary(request)
    if date_start > _current_month():
        messages.error(request, 'No data for the selected period')
        date_end = date_start
        datetime_end = datetime_start
    else:
        global_summary.service()
        global_summary.usage(datetime_start, datetime_end)

    dateform = forms.DateForm()
    dateform['date'].field.initial = date_start

    global_summary.avail()
    global_summary.human_readable('disk_size')
    global_summary.human_readable('ram_size')

    if request.GET.get('format', 'html') == 'csv':
        template_name = 'django_openstack/syspanel/bills/usage.csv'
        mimetype = "text/csv"
    else:
        template_name = 'django_openstack/syspanel/bills/usage.html'
        mimetype = "text/html"
    LOG.info(
        ' ---$usage$---global summary usage_list-$$$$---- %s -----$-------- ' %
        (global_summary.usage_list))
    unit_cost = []
    (unit_flag, unit_cost) = get_unitCost(request, date_start)
    global_cost = global_cost_obj(0)
    cost_total = 0
    if unit_flag == 1:
        for usage in global_summary.usage_list:
            for instance in usage.instances:
                cost_vcpus = float(instance['vcpus']) * float(unit_cost.vcpu)
                cost_ram = float(instance['ram_size']) * float(unit_cost.ram)
                cost_vdisk = float(instance['disk_size']) * float(
                    unit_cost.vdisk)
                instance['cost'] = float(cost_vcpus + cost_ram +
                                         cost_vdisk) * float(instance['hours'])
                cost_total += instance['cost']

                LOG.info(' ---$$--instance cost-$$$$---- %s -----$-------- ' %
                         (instance))
            LOG.info(
                ' ---$$--Updating  tenant usage of tenent ID : %s   =======-$$$$---- -----$-------- '
                % (tenant_id))
            self.tenant_usage(request, tenant_id, 1)
            LOG.info(
                ' ---$$--Updated tenant usage of tenent ID : %s   =======-$$$$---- -----$-------- '
                % (tenant_id))

    else:
        instance.cost = 'unavailable'

    LOG.info(' ---$$---global summary usage_list-$$$$---- %s -----$-------- ' %
             (unit_cost, unit_flag))
    unit_cost = []
    return render_to_response(
        template_name, {
            'dateform': dateform,
            'datetime_start': datetime_start,
            'datetime_end': datetime_end,
            'usage_list': global_summary.usage_list,
            'csv_link': _csv_usage_link(date_start),
            'global_summary': global_summary.summary,
            'external_links': settings.EXTERNAL_MONITORING,
        },
        context_instance=template.RequestContext(request),
        mimetype=mimetype)
コード例 #8
0

@login_required
@enforce_admin_access
def create(request):
	
	  (date_start, date_end, datetime_start, datetime_end) = \
            _get_start_and_end_date(request)

     if date_start > _current_month():
        messages.error(request, 'No bill unit can be changed for previous months')
        date_end = date_end
        datetime_end = datetime_end


    dateform = forms.DateForm()
    dateform['date'].field.initial = date_end
    
    try:
        tenants = api.tenant_list(request)
    except api_exceptions.ApiException, e:
        messages.error(request, 'Unable to retrieve tenant list: %s' %
                                 e.message)
        return redirect('syspanel_bills')


    if request.method == "POST":
        form = BillForm(request.POST, tenant_list=tenants)
        if form.is_valid():
            user = form.clean()
            # TODO Make this a real request