def setup_speedtest(self, server=None): """ Initializes the Speed Test client with the provided server :param server: Int :return: None """ speedtest.build_user_agent() log.debug('Setting up SpeedTest.net client') if server is None: server = [] else: server = server.split() # Single server to list try: self.speedtest = speedtest.Speedtest() except speedtest.ConfigRetrievalError: log.critical( 'Failed to get speedtest.net configuration. Aborting') sys.exit(1) self.speedtest.get_servers(server) log.debug('Picking the closest server') self.speedtest.get_best_server() log.info('Selected Server %s in %s', self.speedtest.best['id'], self.speedtest.best['name']) self.results = self.speedtest.results
def run(self): while True: if not config.servers: self.run_speed_test() else: for server in config.servers: self.run_speed_test(server) log.info('Waiting %s seconds until next test', config.delay) time.sleep(config.delay)
def run(self): if config.delay < 0: self.single_test() else: while True: self.single_test() if config.delay > 0: log.info('Waiting %s seconds until next test', config.delay) time.sleep(config.delay)
def run(self): while True: if config.mode != 'all' or not config.servers: self.run_speed_test(config.servers, config.share, config.mode) elif config.mode == 'all' and config.servers: for server in config.servers: self.run_speed_test([server], config.share, 'select') log.info(f'Waiting {config.delay} seconds until next test') time.sleep(config.delay)
def run_speed_test(self, server=None): """ Performs the speed test with the provided server :param server: Server to test against """ log.info('Starting Speed Test For Server %s', server) try: self.setup_speedtest(server) except speedtest.NoMatchedServers: log.error('No matched servers: %s', server) return except speedtest.ServersRetrievalError: log.critical('Cannot retrieve speedtest.net server list. Aborting') return except speedtest.InvalidServerIDType: log.error('%s is an invalid server type, must be int', server) return log.info('Starting download test') self.speedtest.download() log.info('Starting upload test') self.speedtest.upload() self.send_results() results = self.results.dict() log.info('Download: %sMbps - Upload: %sMbps - Latency: %sms', round(results['download'] / 1000000, 2), round(results['upload'] / 1000000, 2), results['server']['latency'])
def setup_speedtest(self, servers=None, mode='select'): """ Initializes the Speed Test client with the provided server :param server: Int :return: None """ speedtest.build_user_agent() log.debug('Setting up Speedtest.net client') if servers: log.info( f"Selecting server {('excluding','from')[mode!='exclude']}: {servers}" ) try: self.speedtest = speedtest.Speedtest(secure=config.secure) except speedtest.ConfigRetrievalError: log.critical( 'Failed to get speedtest.net configuration. Aborting') sys.exit(1) servers_in = None servers_ex = None if mode == 'select': servers_in = servers else: servers_ex = servers self.speedtest.get_servers(servers_in, servers_ex) # log.debug(self.speedtest.servers) if len(self.speedtest.servers) != 1: log.debug('Selecting the closest server') self.speedtest.get_best_server() log.info( f"Selected server {self.speedtest.best['name']} (id:{self.speedtest.best['id']})" )
def run_speed_test(self, servers=None, share=False, mode='select'): """ Performs the speed test with the provided server :param server: Server to test against """ log.info('Starting Speedtest') #ensure previous results are removed self.speedtest = None try: self.setup_speedtest(servers, mode) except speedtest.NoMatchedServers: log.error(f'No servers matched: {servers}') return except speedtest.ServersRetrievalError: log.critical('Cannot retrieve speedtest.net server list. Aborting') return except speedtest.InvalidServerIDType: log.error(f'{servers} is an invalid server type, must be int') return log.info('Starting download test') self.speedtest.download() log.info('Starting upload test') self.speedtest.upload() if (share): self.speedtest.results.share() self.send_results() results = self.speedtest.results.dict() log.info( 'Download: %sMbps - Upload: %sMbps - Latency: %sms - Share: %s', round(results['download'] / 1000000, 2), round(results['upload'] / 1000000, 2), results['ping'], results['share'])