def read_api(self, url): result, code = util.read_url(url) if code == 404: logging.info( "TiDB server API is not supported by this running instance.") return None return result
def run_collecting(self): if self.resolution < 15.0: logging.warn( "Sampling resolution < 15s don't increase accuracy but data size." ) for metric in self.get_label_names(): url = '%s/query_range?query=%s&start=%s&end=%s&step=%s' % ( self.url_base, metric, self.start_time, self.end_time, self.resolution) matrix = json.loads(util.read_url(url)[0]) if not matrix['status'] == 'success': logging.info("Error querying for key '%s'." % metric) logging.debug("Output is:\n%s" % matrix) continue if self.options.compress: metric_filename = '%s_%s_to_%s_%ss.dat' % ( metric, self.start_time, self.end_time, self.resolution) fileopt.write_file( os.path.join(self.outdir, metric_filename), zlib.compress(json.dumps(matrix['data']['result']))) else: metric_filename = '%s_%s_to_%s_%ss.json' % ( metric, self.start_time, self.end_time, self.resolution) fileopt.write_file(os.path.join(self.outdir, metric_filename), json.dumps(matrix['data']['result'])) logging.debug("Saved data for key '%s'." % metric)
def get_label_names(self): result = [] url = '%s%s' % (self.url_base, '/label/__name__/values') labels = json.loads(util.read_url(url)[0]) if labels['status'] == 'success': result = labels['data'] logging.debug("Found %s available metric keys..." % len(result)) return result
def read_runtime_info(self): def build_url(uri): return "%s/%s" % (self.base_url, uri) runtime_info = {} for key, uri in self.api_map.items(): runtime_info[key] = util.read_url(build_url(uri))[0] return runtime_info
def query_worker(self, metric): url = '%s/query_range?query=%s&start=%s&end=%s&step=%s' % ( self.url_base, metric, self.start_time, self.end_time, self.resolution) response = util.read_url(url)[0] if 'success' not in response[:20].decode('utf-8'): logging.error("Error querying for key '%s'." % metric) logging.debug("Output is:\n%s" % response) return metric_filename = '%s_%s_to_%s_%ss.json' % ( metric, self.start_time, self.end_time, self.resolution) fileopt.write_file(os.path.join(self.outdir, metric_filename), response) logging.debug("Saved data for key '%s'." % metric)
def read_diagnose(self): url = "http://%s:%s/pd%s" % (self.host, self.port, self.pd_diagnose_uri) return util.read_url(url)[0]
def read_health(self): url = "http://%s:%s/pd%s" % (self.host, self.port, self.pd_health_uri) return util.read_url(url)[0]