Ejemplo n.º 1
0
 def get(self, *args, **kwargs):
     profile = self.request.user.get_profile()
     has_perm = profile.has_perm
     if not has_perm(Perm.read_device_info_reports):
         return HttpResponseForbidden(
             "You don't have permission to see reports.")
     if 'start' in self.request.GET:
         self.form = DateRangeForm(self.request.GET)
     else:
         self.form = DateRangeForm(
             initial={
                 'start': datetime.date.today() -
                 datetime.timedelta(days=30),
                 'end': datetime.date.today(),
             })
     if self.form.is_valid():
         self.ventures = profile.perm_ventures(
             Perm.read_device_info_reports).filter(
                 db.Q(parent=None) | db.Q(parent__parent=None),
                 show_in_ralph=True).order_by('path')
         start = self.form.cleaned_data['start']
         end = self.form.cleaned_data['end']
         total_cloud_cost = get_total_cost(
             HistoryCost.objects.filter(
                 device__model__type=DeviceType.cloud_server.id), start,
             end)
         for venture in self.ventures:
             query = HistoryCost.objects.filter(
                 db.Q(venture=venture) | db.Q(venture__parent=venture)
                 | db.Q(venture__parent__parent=venture)
                 | db.Q(venture__parent__parent__parent=venture)
                 | db.Q(venture__parent__parent__parent__parent=venture)
             ).exclude(device__deleted=True)
             venture.total = get_total_cost(query, start, end)
             (venture.count, venture.count_now,
              devices) = get_total_count(query, start, end)
             venture.core_count = get_total_cores(devices, start, end)
             venture.virtual_core_count = get_total_virtual_cores(
                 devices, start, end)
             cloud_cost = get_total_cost(
                 query.filter(
                     device__model__type=DeviceType.cloud_server.id), start,
                 end)
             venture.cloud_use = (cloud_cost or 0) / total_cloud_cost * 100
     else:
         self.ventures = Venture.objects.none()
     if self.request.GET.get('export') == 'csv':
         return self.export_csv()
     return super(ReportVentures, self).get(*args, **kwargs)
Ejemplo n.º 2
0
 def get(self, *args, **kwargs):
     if 'start' in self.request.GET:
         self.form = DateRangeForm(self.request.GET)
         if not self.form.is_valid():
             messages.error(self.request, "Invalid date range")
     else:
         initial = {
             'start': datetime.date.today() - datetime.timedelta(days=30),
             'end': datetime.date.today(),
         }
         self.form = DateRangeForm(initial)
         self.form.is_valid()
     self.set_venture()
     has_perm = self.request.user.get_profile().has_perm
     if not has_perm(Perm.list_devices_financial, self.venture if
                     self.venture and self.venture != '*' else None):
         return HttpResponseForbidden(
                 "You don't have permission to see this.")
     return super(VenturesVenture, self).get(*args, **kwargs)
Ejemplo n.º 3
0
 def get(self, *args, **kwargs):
     profile = self.request.user.get_profile()
     has_perm = profile.has_perm
     if not has_perm(Perm.read_device_info_reports):
         return HttpResponseForbidden(
             "You don't have permission to see reports.")
     if 'start' in self.request.GET:
         self.form = DateRangeForm(self.request.GET)
     else:
         self.form = DateRangeForm(
             initial={
                 'start': datetime.date.today() -
                 datetime.timedelta(days=30),
                 'end': datetime.date.today(),
             })
     if self.form.is_valid():
         self.ventures = profile.perm_ventures(
             Perm.read_device_info_reports).filter(
                 db.Q(parent=None) | db.Q(parent__parent=None),
                 show_in_ralph=True).order_by('path')
         for venture in self.ventures:
             (venture.total, venture.count,
              venture.count_now) = total_cost_count(
                  HistoryCost.objects.filter(
                      db.Q(venture=venture) | db.Q(venture__parent=venture)
                      | db.Q(venture__parent__parent=venture)
                      | db.Q(venture__parent__parent__parent=venture)
                      | db.Q(venture__parent__parent__parent__parent=venture
                             )).distinct(),
                  self.form.cleaned_data['start'],
                  self.form.cleaned_data['end'],
              )
     else:
         self.ventures = Venture.objects.none()
     if self.request.GET.get('export') == 'csv':
         return self.export_csv()
     return super(ReportVentures, self).get(*args, **kwargs)
Ejemplo n.º 4
0
 def get(self, *args, **kwargs):
     self.venture_data = []
     self.task_in_progress = False
     profile = self.request.user.get_profile()
     if 'start' in self.request.GET:
         self.form = DateRangeForm(self.request.GET)
     else:
         self.form = DateRangeForm(
             initial={
                 'start': datetime.date.today() -
                 datetime.timedelta(days=30),
                 'end': datetime.date.today(),
             })
     self.extra_types = list(
         VentureExtraCostType.objects.annotate(
             cost_count=db.Count('ventureextracost')).filter(
                 cost_count__gt=0).order_by('name'))
     if self.form.is_valid():
         self.ventures = profile.perm_ventures(
             Perm.read_device_info_reports).filter(
                 db.Q(parent=None) | db.Q(parent__parent=None),
                 show_in_ralph=True).values_list(
                     'id',
                     flat=True,
                 ).order_by('path')
         start = self.form.cleaned_data['start']
         end = self.form.cleaned_data['end']
         if self.request.GET.get('invalidate-cache') == 'true':
             self.invalidate_data(
                 start,
                 end,
                 self.ventures,
                 self.extra_types,
             )
             return HttpResponseRedirect(
                 _get_after_report_invalidation_link(
                     self.request,
                     'invalidate-cache',
                 ), )
         self.venture_data = self.get_data(
             start,
             end,
             self.ventures,
             self.extra_types,
         )
         if self.venture_data is None:
             self.task_in_progress = True
             messages.info(
                 self.request,
                 "Report processing in progress. Please wait...",
             )
     else:
         self.ventures = Venture.objects.none()
         self.venture_data = []
     if (self.request.GET.get('export') == 'csv'
             and self.venture_data is not None):
         return make_csv_response(
             data=self.export_csv(self.venture_data, self.extra_types),
             filename='ReportVentures.csv',
         )
     return super(ReportVentures, self).get(*args, **kwargs)