+ self.keystone = self._build_keystone_client(vim_account_id)
+ self.nova = self._build_nova_client(vim_account_id)
+ self.vim_account_id = vim_account_id
+ self.common_db = CommonDbClient(config)
+
+ def collect(self) -> List[Metric]:
+ metrics = []
+ vim_status = self.is_vim_ok()
+ vim_status_metric = Metric({'vim_account_id': self.vim_account_id}, 'vim_status', vim_status)
+ metrics.append(vim_status_metric)
+ vnfrs = self.common_db.get_vnfrs(vim_account_id=self.vim_account_id)
+ for vnfr in vnfrs:
+ nsr_id = vnfr['nsr-id-ref']
+ vnf_member_index = vnfr['member-vnf-index-ref']
+ for vdur in vnfr['vdur']:
+ resource_uuid = vdur['vim-id']
+ vm = self.nova.servers.get(resource_uuid)
+ vm_status = (1 if vm.status == 'ACTIVE' else 0)
+ tags = {
+ 'vim_account_id': self.vim_account_id,
+ 'resource_uuid': resource_uuid,
+ 'nsr_id': nsr_id,
+ 'vnf_member_index': vnf_member_index,
+ 'vdur_name': vdur['name']
+ }
+ vm_status_metric = Metric(tags, 'vm_status', vm_status)
+ metrics.append(vm_status_metric)
+
+ return metrics