'Does the actual introspection
:param image_id: Glance image ID
:param file_path: Path to the file being introspected'

def execute(self, image_id, file_path):

    try:
        (stdout, stderr) = putils.trycmd('qemu-img', 'info', '--output=json', file_path, prlimit=utils.QEMU_IMG_PROC_LIMITS, log_errors=putils.LOG_ALL_ERRORS)
    except OSError as exc:
        if (exc.errno != 2):
            with excutils.save_and_reraise_exception():
                exc_message = encodeutils.exception_to_unicode(exc)
                msg = _LE('Failed    to    execute    introspection    %(task_id)s:    %(exc)s')
                LOG.error(msg, {'task_id': self.task_id, 'exc': exc_message})
        return
    if stderr:
        raise RuntimeError(stderr)
    metadata = json.loads(stdout)
    new_image = self.image_repo.get(image_id)
    new_image.virtual_size = metadata.get('virtual-size', 0)
    new_image.disk_format = metadata.get('format')
    self.image_repo.save(new_image)
    LOG.debug('%(task_id)s:    Introspection    successful:    %(file)s', {'task_id': self.task_id, 'file': file_path})
    return new_image
