Esempio n. 1
0
    def get_data(self, **kwargs):
        query_id=str(uuid.uuid4())
        data_list=[]
        from cinderclient import client
        conn=client.Client(2, self.__username, self.__password, self.__project, self.__auth_url)
        
        volumes = conn.volumes.list(search_opts={'all_tenants':1}, limit=self.__number_per_page)
        while len(volumes)>0:
            log.debug("Got %d volumes, first id %s" % (len(volumes), volumes[0].id))
            data=init_message()
            data['query_id']=query_id
            data['volumes']=[]
            for volume in volumes:
                data['volumes'].append(volume._info)
            data_list.append(data)
            last_id=volumes[-1].id
            log.debug("last_id %s" %last_id)
            volumes = conn.volumes.list(search_opts={'all_tenants':1}, marker=last_id, limit=self.__number_per_page)
            
        volume_snapshots = conn.volume_snapshots.list(search_opts={'all_tenants':1})
        log.debug("Got %d volume_snapshots" % len(volume_snapshots))
        data=init_message()
        data['query_id']=query_id
        data['volume_snapshots']=[]
        for volume in volume_snapshots:
            data['volume_snapshots'].append(volume._info)
        data_list.append(data)

        return data_list
Esempio n. 2
0
    def get_data(self, **kwargs):
        data=init_message()
        copy_attributes=['OS-EXT-STS:task_state', 'addresses', 'OS-EXT-STS:vm_state', 'OS-EXT-SRV-ATTR:instance_name', 'OS-SRV-USG:launched_at',
                         'id', 'security_groups', 'user_id', 'OS-DCF:diskConfig', 'accessIPv4', 'accessIPv6', 'progress', 'OS-EXT-STS:power_state',
                         'OS-EXT-AZ:availability_zone', 'config_drive', 'status', 'updated', 'hostId', 'OS-EXT-SRV-ATTR:host', 'OS-SRV-USG:terminated_at',
                         'key_name', 'OS-EXT-SRV-ATTR:hypervisor_hostname', 'name', 'created', 'tenant_id', 'os-extended-volumes:volumes_attached',
                         'fault', 'metadata']
        data['tenants']=[]
        data['users']=[]
        from keystoneclient.v2_0 import client

        keystone=client.Client(username=self.__username, password=self.__password, tenant_name=self.__project, auth_url=self.__auth_url)
        users=keystone.users.list()
        for user in users:
            data['users'].append(user._info)
        tenants=keystone.tenants.list()
        for tenant in tenants:
            tenant_info = tenant._info
            if tenant_info['description'] and 'personal tenancy' not in tenant_info['description'].lower():
                membership_retrieved = False
                membership_attempt = 0
                while not membership_retrieved and membership_attempt < 3:
                    try:
                        tenant_info['users'] = [{'id' : user.id, 'username' : user.username} for user in tenant.list_users()]
                        membership_retrieved = True
                    except:
                        time.sleep(2 ** membership_attempt)
                        membership_attempt += 1
            data['tenants'].append(tenant_info)
        return data
Esempio n. 3
0
    def get_data(self, **kwargs):
        inodes = set()
        users = {}
        groups = {}
        data = init_message()

        data["fs"] = {"name": self.__path}
        fs_raw = str(os.statvfs(self.__path))
        for kv in [
                field.split("=")
                for field in fs_raw[fs_raw.index("(") + 1:-1].split(", ")
        ]:
            data["fs"][kv[0][2:]] = int(kv[1])

        data["usage"] = {}
        for root, dirs, files in os.walk(self.__path):
            for name in files:
                filename = join(root, name)
                metadata = os.lstat(filename)
                if stat.S_ISREG(metadata.st_mode):
                    if metadata.st_nlink == 1 or metadata.st_ino not in inodes:
                        if metadata.st_uid not in users:
                            try:
                                users[metadata.st_uid] = pwd.getpwuid(
                                    metadata.st_uid).pw_name
                            except:
                                users[metadata.st_uid] = metadata.st_uid
                        if metadata.st_gid not in groups:
                            try:
                                groups[metadata.st_gid] = grp.getgrgid(
                                    metadata.st_gid).gr_name
                            except:
                                groups[metadata.st_gid] = metadata.st_gid

                        user = users[metadata.st_uid]
                        group = groups[metadata.st_gid]
                        key = str(user) + "/" + str(group)

                        if key not in data["usage"]:
                            data["usage"][key] = {
                                "files": 0,
                                "blocks": 0,
                                "bytes": 0
                            }

                        data["usage"][key]["files"] += 1
                        data["usage"][key]["bytes"] += metadata.st_size
                        data["usage"][key]["blocks"] += metadata.st_blocks
                    if metadata.st_nlink > 1:
                        inodes.add(metadata.st_ino)

        return data
Esempio n. 4
0
 def get_data(self, **kwargs):
     query_id=str(uuid.uuid4())
     data_list=[]
     from keystoneclient.v2_0 import client
     from swift.common.ring import Ring
     keystone=client.Client(username=self.__username, password=self.__password, tenant_name=self.__project, auth_url=self.__auth_url)
     self.__ring = Ring(self.__ring_location)
     tenants = [tenant.id for tenant in keystone.tenants.list()]
     random.shuffle(tenants)
     data=init_message()
     data["swift"] = {}
     for tenant, stats in zip(tenants, ThreadPool().map(self.fetch, tenants)):
         if stats is not None:
             data["swift"][tenant] = stats
     return data
Esempio n. 5
0
    def get_data(self, **kwargs):
        data = init_message()

        username = base64.b64encode(self.__username)
        password = hashlib.md5(self.__password).hexdigest()

        headers = {
            "Authorization": "HCP %s:%s" % (username, password),
            "Accept": "application/json"
        }

        url = "https://" + self.__host + "/mapi/tenants"
        # get tenants
        try:
            req = urllib2.Request(url, None, headers)
            handler = urllib2.urlopen(req)
        except urllib2.HTTPError as e:
            log.error('response code %d' % e.code)
            raise RemoteServerError()
        except urllib2.URLError as e:
            raise Exception("Error accessing URL %s: %s" % (url, e.args))
        else:
            # 200
            content = handler.read()
            tenants = json.loads(content)['name']
            handler.close()

        for tenant in tenants:
            start_time = datetime.datetime.fromtimestamp(
                time.time() -
                60 * self.__query_period).strftime("%Y-%m-%dT%H:%M:00%%2B0930")
            url_tenant = "https://" + self.__host + "/mapi/tenants/" + tenant + "/chargebackReport?start=" + start_time
            log.debug("querying %s from %s..." % (tenant, start_time))
            try:
                req = urllib2.Request(url_tenant, None, headers)
                handler = urllib2.urlopen(req)
            except urllib2.HTTPError as e:
                log.debug('response code %d' % e.code)
                continue
            except urllib2.URLError as e:
                raise Exception("Error accessing URL %s: %s" % (url, e.args))
            else:
                # 200
                content = handler.read()
                report = json.loads(content)
                data[tenant] = report['chargebackData']
                handler.close()
        return data
Esempio n. 6
0
 def get_data(self, **kwargs):
     inodes = set()
     users = {}
     groups = {}
     data = init_message()
      
     data["fs"] = { "name" : self.__path }
     fs_raw = str(os.statvfs(self.__path))
     for kv in [field.split("=") for field in fs_raw[fs_raw.index("(")+1:-1].split(", ")]:
         data["fs"][kv[0][2:]] = int(kv[1])
      
     data["usage"] = {}
     for root, dirs, files in os.walk(self.__path):
         for name in files:
             filename = join(root, name)
             metadata = os.lstat(filename)
             if stat.S_ISREG(metadata.st_mode):
                 if metadata.st_nlink == 1 or metadata.st_ino not in inodes:
                     if metadata.st_uid not in users:
                         try:
                             users[metadata.st_uid] = pwd.getpwuid(metadata.st_uid).pw_name
                         except:
                             users[metadata.st_uid] = metadata.st_uid
                     if metadata.st_gid not in groups:
                         try:
                             groups[metadata.st_gid] = grp.getgrgid(metadata.st_gid).gr_name
                         except:
                             groups[metadata.st_gid] = metadata.st_gid
                  
                     user = users[metadata.st_uid]
                     group = groups[metadata.st_gid]
                     key = str(user) + "/" + str(group)
                  
                     if key not in data["usage"]:
                         data["usage"][key] = { "files" : 0, "blocks" : 0, "bytes" : 0 }
                  
                     data["usage"][key]["files"] += 1
                     data["usage"][key]["bytes"] += metadata.st_size
                     data["usage"][key]["blocks"] += metadata.st_blocks
                 if metadata.st_nlink > 1:
                     inodes.add(metadata.st_ino)
      
     return data     
Esempio n. 7
0
    def get_data(self, **kwargs):
        data=init_message()

        username = base64.b64encode(self.__username)
        password = hashlib.md5(self.__password).hexdigest()
        
        headers = { "Authorization" : "HCP %s:%s" % (username, password) , "Accept": "application/json"}
        
        url="https://"+self.__host+"/mapi/tenants"
        # get tenants
        try:
            req = urllib2.Request(url, None, headers)
            handler = urllib2.urlopen(req)
        except urllib2.HTTPError as e:
            log.error('response code %d' % e.code)
            raise RemoteServerError()
        except urllib2.URLError as e:
            raise Exception("Error accessing URL %s: %s" % (url, e.args))
        else:
            # 200
            content = handler.read()
            tenants = json.loads(content)['name']
            handler.close()
        
        for tenant in tenants:
            start_time=datetime.datetime.fromtimestamp(time.time()-60*self.__query_period).strftime("%Y-%m-%dT%H:%M:00%%2B0930")
            url_tenant="https://"+self.__host+"/mapi/tenants/"+tenant+"/chargebackReport?start="+start_time
            log.debug("querying %s from %s..."% (tenant, start_time))
            try:
                req = urllib2.Request(url_tenant, None, headers)
                handler = urllib2.urlopen(req)
            except urllib2.HTTPError as e:
                log.debug('response code %d' % e.code)
                continue
            except urllib2.URLError as e:
                raise Exception("Error accessing URL %s: %s" % (url, e.args))
            else:
                # 200
                content = handler.read()
                report = json.loads(content)
                data[tenant]=report['chargebackData']
                handler.close()
        return data
Esempio n. 8
0
 def get_data(self, **kwargs):
     query_id=str(uuid.uuid4())
     data_list=[]
     from novaclient import client
     conn=client.Client(2, self.__username, self.__password, self.__project, self.__auth_url)
     servers = conn.servers.list(search_opts={'all_tenants':1}, limit=self.__number_per_page)
     flavors=[f._info for f in conn.flavors.list(is_public=None)]
     while len(servers)>0:
         log.debug("Got %d instances, first id %s" % (len(servers), servers[0].id))
         data=init_message()
         data['query_id']=query_id
         data['flavors']=flavors
         data['instances']=[]
         for server in servers:
             data['instances'].append(server._info)
         data_list.append(data)
         last_id=servers[-1].id
         log.debug("last_id %s" %last_id)
         servers = conn.servers.list(search_opts={'all_tenants':1}, marker=last_id, limit=self.__number_per_page)
     return data_list
Esempio n. 9
0
 def get_data(self, **kwargs):
     """Package VRB report vms from an XLS file"""
     data = init_message()
     data['instances'] = self._read_data(self._path)
     return data