Example #1
0
def users():
    stats = dict()
    stats['total'] = 0
    for name in sorted(regions['regions'].iterkeys()):
        logger.debug('=> count region %s' % name)
        novaclient = Nova(options.config,
                          debug=options.debug,
                          log=logger,
                          region=name)
        instances = novaclient.get_instances()
        stats['total'] += len(instances)
        for i in instances:
            user = ksclient.get_by_id('user', i.user_id)
            if not user:
                org = 'unknown'
                logger.debug('=> unknown user for %s (id=%s)' % (i.name, i.id))
            elif '@' not in user.name:
                org = 'sysuser'
            else:
                org = user.name.split("@")[1]
            if org in stats:
                stats[org] += 1
            else:
                stats[org] = 1
    if options.output == 'count':
        stats['header'] = 'Usage grouped by user email domain:'
        printer.output_dict(stats)
    else:
        percent = dict()
        if stats['total'] > 0:
            for s in sorted(stats):
                percent[s] = (float(stats[s]) / float(stats['total'])) * 100
        percent[
            'header'] = 'Percentage of instances grouped by users email domain:'
        printer.output_dict(percent)
Example #2
0
def action_disabled():
    for region in regions:
        novaclient = Nova(options.config, debug=options.debug, log=logger, region=region)
        instances = novaclient.get_instances()
        printer.output_dict({'header': '%s: Instances in disabled project (host, name, project)'
                                       % region})
        groups = {'group1': 0, 'group2': 0, 'group3': 0}
        count = 0
        for i in instances:
            project = ksclient.get_by_id('project', i.tenant_id)
            if project.enabled:
                continue
            host = getattr(i, 'OS-EXT-SRV-ATTR:host').split('.')[0]
            output = {'name': i.name, 'project': project.name, 'status': host}
            printer.output_dict(output, sort=True, one_line=True)
            if '01' in host or '04' in host:
                groups['group1'] += 1
            elif '02' in host or '05' in host:
                groups['group2'] += 1
            elif '03' in host or '06' in host:
                groups['group3'] += 1
            count += 1
        output = {'header': 'Instance count', 'total': count}
        output.update(groups)
        printer.output_dict(output)
Example #3
0
def action_nodiscard():
    for region in regions:
        novaclient = Nova(options.config, debug=options.debug, log=logger, region=region)
        glclient = Glance(options.config, debug=options.debug, log=logger, region=region)
        instances = novaclient.get_instances()
        printer.output_dict({'header': '%s: Instances without discard (image, name, visibility)'
                                       % region})
        count = 0
        for i in instances:
            image = glclient.get_image_by_id(i.image['id'])
            # Remove instances in disabled project
            project = ksclient.get_by_id('project', i.tenant_id)
            if project.enabled:
                continue
            # Assume that hw_disk_bus == discard
            if image and 'hw_disk_bus' in image:
                continue
            if not image:
                image = dict()
                image['name'] = 'unknown'
                image['visibility'] = 'unknown'
            output = {'name': i.name, 'image': image['name'], 'status': image['visibility']}
            printer.output_dict(output, sort=True, one_line=True)
            count += 1
        printer.output_dict({'header': 'Instance count', 'count': count})
Example #4
0
def org():
    stats = dict()
    stats['total'] = 0
    for name in sorted(regions['regions'].iterkeys()):
        logger.debug('=> count region %s' % name)
        novaclient = Nova(options.config, debug=options.debug, log=logger, region=name)
        instances = novaclient.get_instances()
        stats['total'] += len(instances)
        for i in instances:
            user = ksclient.get_by_id('user', i.user_id)
            if not user:
                org = 'unknown'
                logger.debug('=> unknown user for %s (id=%s)' % (i.name, i.id))
            elif '@' not in user.name:
                org = 'sysuser'
            else:
                domain = user.name.split("@")[1]
                if len(domain.split(".")) > 1:
                    org = domain.split(".")[-2]
                else:
                    org = 'unknown'
            if org in stats:
                stats[org] += 1
            else:
                stats[org] = 1
    if options.output == 'count':
        stats['header'] = 'Usage grouped by user organization:'
        printer.output_dict(stats)
    else:
        percent = dict()
        if stats['total'] > 0:
            for s in sorted(stats):
                percent[s] = (float(stats[s])/float(stats['total']))*100
        percent['header'] = 'Percentage of instances grouped by users organization:'
        printer.output_dict(percent)
Example #5
0
def action_disabled():
    for region in regions:
        novaclient = Nova(options.config,
                          debug=options.debug,
                          log=logger,
                          region=region)
        instances = novaclient.get_instances()
        printer.output_dict({
            'header':
            '%s: Instances in disabled project (host, name, project)' % region
        })
        groups = {'group1': 0, 'group2': 0, 'group3': 0}
        count = 0
        for i in instances:
            project = ksclient.get_by_id('project', i.tenant_id)
            if project.enabled:
                continue
            host = getattr(i, 'OS-EXT-SRV-ATTR:host').split('.')[0]
            output = {'name': i.name, 'project': project.name, 'status': host}
            printer.output_dict(output, sort=True, one_line=True)
            if '01' in host or '04' in host:
                groups['group1'] += 1
            elif '02' in host or '05' in host:
                groups['group2'] += 1
            elif '03' in host or '06' in host:
                groups['group3'] += 1
            count += 1
        output = {'header': 'Instance count', 'total': count}
        output.update(groups)
        printer.output_dict(output)
Example #6
0
def project():
    stats = {
        'demo': 0,
        'personal': 0,
        'research': 0,
        'education': 0,
        'admin': 0,
        'test': 0,
        'hpc': 0,
        'total': 0
    }
    for name in sorted(regions['regions'].iterkeys()):
        logger.debug('=> count region %s' % name)
        novaclient = Nova(options.config,
                          debug=options.debug,
                          log=logger,
                          region=name)
        instances = novaclient.get_instances()
        stats['total'] += len(instances)
        for i in instances:
            project = ksclient.get_by_id('project', i.tenant_id)
            if not project:
                sys.stderr.write("MISSING PROJECT! id=%s for instance %s\n" %
                                 (i.tenant_id, i.name))
                continue
            if hasattr(project, 'course'):
                stats['education'] += 1
            elif '@' in project.name:
                stats['personal'] += 1
            else:
                if hasattr(project, 'type'):
                    if project.type not in stats:
                        print "unknown project type %s for %s" % (project.type,
                                                                  project.name)
                    else:
                        stats[project.type] += 1
                else:
                    stats['admin'] += 1
    if options.output == 'count':
        stats['header'] = 'Number of instances grouped by instance type:'
        printer.output_dict(stats)
    else:
        percent = dict()
        if stats['total'] > 0:
            for s in sorted(stats):
                percent[s] = (float(stats[s]) / float(stats['total'])) * 100
        percent['header'] = 'Percent of instances grouped by instance type:'
        printer.output_dict(percent)
Example #7
0
def action_instance():
    for region in regions:
        novaclient = Nova(options.config, debug=options.debug, log=logger, region=region)
        instances = novaclient.get_instances()
        mapping = dict(region=region.upper())
        body_content = himutils.load_template(inputfile=options.template,
                                              mapping=mapping,
                                              log=logger)
        subject = options.subject
        notify = Notify(options.config, debug=False, log=logger)
        notify.set_keystone_client(ksclient)
        notify.set_dry_run(options.dry_run)
        users = notify.mail_instance_owner(instances=instances,
                                           body=body_content,
                                           subject=subject,
                                           admin=True,
                                           options=['project', 'az'])
        notify.close()
        printer.output_dict(users)
Example #8
0
def project():
    stats = {'demo': 0,
             'personal': 0,
             'research': 0,
             'education': 0,
             'admin': 0,
             'test': 0,
             'total': 0}
    for name in sorted(regions['regions'].iterkeys()):
        logger.debug('=> count region %s' % name)
        novaclient = Nova(options.config, debug=options.debug, log=logger, region=name)
        instances = novaclient.get_instances()
        stats['total'] += len(instances)
        for i in instances:
            project = ksclient.get_by_id('project', i.tenant_id)
            if not project:
                sys.stderr.write("MISSING PROJECT! id=%s for instance %s\n" % (i.tenant_id, i.name))
                continue
            if hasattr(project, 'course'):
                stats['education'] += 1
            elif '@' in project.name:
                stats['personal'] += 1
            else:
                if hasattr(project, 'type'):
                    if project.type not in stats:
                        print "unknown project type %s for %s" % (project.type, project.name)
                    else:
                        stats[project.type] += 1
                else:
                    stats['admin'] += 1
    if options.output == 'count':
        stats['header'] = 'Number of instances grouped by instance type:'
        printer.output_dict(stats)
    else:
        percent = dict()
        if stats['total'] > 0:
            for s in sorted(stats):
                percent[s] = (float(stats[s])/float(stats['total']))*100
        percent['header'] = 'Percent of instances grouped by instance type:'
        printer.output_dict(percent)
Example #9
0
def action_instance():
    for region in regions:
        novaclient = Nova(options.config,
                          debug=options.debug,
                          log=logger,
                          region=region)
        instances = novaclient.get_instances()
        mapping = dict(region=region.upper())
        body_content = himutils.load_template(inputfile=options.template,
                                              mapping=mapping,
                                              log=logger)
        subject = options.subject
        notify = Notify(options.config, debug=False, log=logger)
        notify.set_keystone_client(ksclient)
        notify.set_dry_run(options.dry_run)
        users = notify.mail_instance_owner(instances=instances,
                                           body=body_content,
                                           subject=subject,
                                           admin=True,
                                           options=['project', 'az'])
        notify.close()
        printer.output_dict(users)
Example #10
0
def action_nodiscard():
    for region in regions:
        novaclient = Nova(options.config,
                          debug=options.debug,
                          log=logger,
                          region=region)
        glclient = Glance(options.config,
                          debug=options.debug,
                          log=logger,
                          region=region)
        instances = novaclient.get_instances()
        printer.output_dict({
            'header':
            '%s: Instances without discard (image, name, visibility)' % region
        })
        count = 0
        for i in instances:
            image = glclient.get_image_by_id(i.image['id'])
            # Remove instances in disabled project
            project = ksclient.get_by_id('project', i.tenant_id)
            if project.enabled:
                continue
            # Assume that hw_disk_bus == discard
            if image and 'hw_disk_bus' in image:
                continue
            if not image:
                image = dict()
                image['name'] = 'unknown'
                image['visibility'] = 'unknown'
            output = {
                'name': i.name,
                'image': image['name'],
                'status': image['visibility']
            }
            printer.output_dict(output, sort=True, one_line=True)
            count += 1
        printer.output_dict({'header': 'Instance count', 'count': count})
Example #11
0
def action_instance():
    #ToDo
    for region in regions:
        flavors = dict()
        cores = ram = 0
        novaclient = Nova(options.config, debug=options.debug, log=logger, region=region)
        instances = novaclient.get_instances()
        total = 0
        for i in instances:
            # Filter demo
            project = ksclient.get_by_id('project', i.tenant_id)
            if not options.demo and project and 'DEMO' in project.name:
                continue
            flavor_name = i.flavor.get('original_name', 'unknown')
            flavors[flavor_name] = flavors.get(flavor_name, 0) + 1
            cores += i.flavor.get('vcpus', 0)
            ram += i.flavor.get('ram', 0)
            total += 1
        printer.output_dict({'header': '%s instances' % region})
        printer.output_dict(flavors)
        printer.output_dict({'header': '%s resources' % region})
        printer.output_dict({'cores': cores,
                             'ram': '%.1f MB' % int(ram),
                             'instances': total})
Example #12
0
def action_instance():
    #ToDo
    for region in regions:
        flavors = dict()
        cores = ram = 0
        novaclient = Nova(options.config, debug=options.debug, log=logger, region=region)
        instances = novaclient.get_instances()
        total = 0
        for i in instances:
            # Filter demo
            project = ksclient.get_by_id('project', i.tenant_id)
            if not options.demo and project and 'DEMO' in project.name:
                continue
            flavor_name = i.flavor.get('original_name', 'unknown')
            flavors[flavor_name] = flavors.get(flavor_name, 0) + 1
            cores += i.flavor.get('vcpus', 0)
            ram += i.flavor.get('ram', 0)
            total += 1
        printer.output_dict({'header': '%s instances' % region})
        printer.output_dict(flavors)
        printer.output_dict({'header': '%s resources' % region})
        printer.output_dict({'cores': cores,
                             'ram': '%.1f MB' % int(ram),
                             'instances': total})