def analyze(self, host=None, publish='off', start_new='on', from_cache='off', max_age=5,
                return_all='done', ignore_mismatch='on', resume=False, *args, **kwargs):
        """Start the assessment process.

        This is basically a wrapper function for all the API communication which takes care of everything. Any non-default
        behaviour of assessment processes can be tweaked with arguments to this function.

        Providing a *host* containing the FQDN of the target system(s) is the only mandatory argument. All remaining
        arguments are optional.
        """
        if not self._check_api_info():
            return False

        if host:
            self.host = host
        elif not self.host:
            return False

        self.publish = publish
        self.start_new = start_new
        self.return_all = return_all
        self.from_cache = from_cache
        self.max_age = max_age
        self.ignore_mismatch = ignore_mismatch

        if not resume:
            if not self.QUIET:
                print('[INFO] Retrieving assessment for {}...'.format(self.host))

            if not self._trigger_new_assessment():
                return False
        else:
            if not self.QUIET:
                print('[INFO] Checking running assessment for {}'.format(self.host))

        while True:
            _status = self._poll_api()
            if _status.get('status') == 'IN_PROGRESS':
                if not self.QUIET and resume:
                    print('[INFO] Assessment is still in progress')
                break
            elif _status.get('status') == 'READY':
                if not self.QUIET and resume:
                    print(
                        '[INFO] No running assessment. Use --use-cache '+
                        'to receive a cached assessment, or start a new one.'
                    )
                    return
                else:
                    return self._get_all_results()
            elif _status.get('status') == 'ERROR':
                print('An error occured: {}'.format(_status.errors))
                return
            else:
                continue

        if self.VERBOSE:
            print('[INFO] Testing {} host(s)'.format(len(_status.get('endpoints'))))

        self.manager = multiprocessing.Manager()
        self.endpoint_jobs = []

        try:
            if self.VERBOSE:
                for endpoint in _status.get('endpoints'):
                    _process = multiprocessing.Process(
                            target=self._get_detailed_endpoint_information, args=(self.host, endpoint.get('ipAddress'))
                    )
                    self.endpoint_jobs.append(_process)
                    _process.start()

                for job in self.endpoint_jobs:
                    job.join()

            while True:
                _status = self._poll_api()

                if not _status:
                    break

                _host_status = _status.get('status')

                if _host_status == 'IN_PROGRESS':
                    if not self.QUIET:
                        sys.stdout.write('.')
                        sys.stdout.flush()
                    time.sleep(10)
                elif _host_status == 'READY':
                    return self._get_all_results()
                elif _host_status == 'ERROR':
                    print('[ERROR] An error occured: {}'.format(_status.errors))
                    return
                elif _host_status == 'DNS':
                    if self.VERBOSE:
                        print('[INFO] Resolving hostname')
                    time.sleep(4)
                else:
                    print('[INFO] Unknown host status: {}'.format(_host_status))
        except __HOLE__:
            pass
        except:
            return
dataset/ETHPy150Open takeshixx/python-ssllabs/ssllabs.py/SSLLabsAssessment.analyze