コード例 #1
0
    def export(self):
        try:
            self.log("Starting usage export. Date: " + str(self.date))

            date_str = self.date.isoformat()
            usage_records = ELKClient().find_usage_records(
                self.region, None, date_str, date_str)
            records = UsageRecordBuilder(self.region).build_usage_report(
                usage_records, date_str, date_str)

            base_document = self.create_base_document()
            records_grouped_by_project = dict()
            for record in records['usage']:
                record_list = records_grouped_by_project.get(
                    record['project_id'], [])
                if not record_list:
                    records_grouped_by_project[
                        record['project_id']] = record_list
                record_list.append(record)

            for project_id, record_list in records_grouped_by_project.iteritems(
            ):
                project = Project.find_by_uuid(project_id)
                base_document['distribuicao'].append(
                    self.create_distribution(project, record_list))

            self._send(base_document)
        except:
            self.log("Error", 'exception')
コード例 #2
0
    def build_usage_report(self, aggregations, start, end):
        records = {"usage": []}

        records_grouped_by_type = {'Running VM': [], 'Allocated VM': []}

        for project_bucket in aggregations['by_project']['buckets']:
            project_id = project_bucket['key']
            project = next(
                (x for x in self.projects if x.get('id') == project_id),
                dict())
            local_project = Project.find_by_uuid(project_id)

            for resource_type_bucket in project_bucket['by_type']['buckets']:
                usage_type = resource_type_bucket['key']

                for offering_bucket in resource_type_bucket['by_offering'][
                        'buckets']:
                    offering_struct = offering_bucket['key'].split('|')
                    offering_id = offering_struct[0] or None
                    offering_name = offering_struct[1] or None
                    offering_cpu = offering_struct[2] or None
                    offering_ram = offering_struct[3] or None
                    raw_usage = float(offering_bucket['rawusage_sum']['value'])

                    if raw_usage > app.config['USAGE_MINIMUM_TIME']:
                        account = project.get('account', '-')
                        domain = project.get('domain', '-')

                        usage_record = {
                            'project_id':
                            local_project.uuid
                            if local_project else project_id,
                            'project_name':
                            local_project.name if local_project else '-',
                            'type':
                            usage_type,
                            'start_date':
                            start,
                            'end_date':
                            end,
                            'offering_id':
                            offering_id,
                            'offering_name':
                            offering_name,
                            'offering_cpu':
                            offering_cpu,
                            'offering_ram':
                            offering_ram,
                            'usage':
                            raw_usage,
                            'account':
                            account,
                            'domain':
                            domain,
                            'region':
                            self.region.upper()
                        }
                        records['usage'].append(usage_record)
                        records_grouped_by_type[usage_type].append(
                            usage_record)

        self._calculate_allocated_vm_time(records_grouped_by_type, records)

        return records