def __init__(self, settings, test_config, prefix=None): super(FtsCollector, self).__init__(settings) self.host = settings.master_node self.fts_client = FtsGen(self.host, test_config.fts_settings) self.cbft_stats = None self.NO_RESULT = 0 self.scmd, self.squery = self.fts_client.prepare_query(type="nsstats")
def start_workers(self, worker_factory, name, curr_items=None, deleted_items=None, current_hot_load_start=None, timer_elapse=None): curr_ops = Value('L', 0) lock = Lock() worker_type, total_workers = worker_factory(self.ws) if name == 'fts' and total_workers: auth = HTTPBasicAuth(self.ws.fts_config.username, self.ts.password) if self.ws.fts_config.elastic: self.ws.query_gen = ElasticGen(self.ts.node, self.ws.fts_config, auth) else: self.ws.query_gen = FtsGen(self.ts.node, self.ws.fts_config, auth) for sid in range(total_workers): args = (sid, lock, curr_ops, curr_items, deleted_items, current_hot_load_start, timer_elapse) worker = worker_type(self.ws, self.ts, self.shutdown_event) worker_process = Process(target=worker.run, args=args) worker_process.start() self.worker_processes.append(worker_process) if getattr(self.ws, 'async', False): time.sleep(2)
class FtsCollector(Collector): def __init__(self, settings, test_config, prefix=None): super(FtsCollector, self).__init__(settings) self.host = settings.master_node self.fts_client = FtsGen(self.host, test_config.fts_settings) self.cbft_stats = None self.NO_RESULT = 0 self.scmd, self.squery = self.fts_client.prepare_query(type="nsstats") def collect_stats(self): r = self.scmd(**self.squery) ''' The nsserver stats not exposed following fundtion is added to collect nsserver stats per METRICS, no need to call same stats for different metrics. Optimized and reliable code. collect_stats should be called once. ''' if r.status_code == 200: self.cbft_stats = r.json() else: self.cbft_stats = None def cbft_stats_get(self, key): if key not in self.cbft_stats: return 0 return self.cbft_stats[key] def cbft_pct_cpu_gc(self): return self.cbft_stats_get("pct_cpu_gc") def cbft_num_bytes_used_ram(self): return self.cbft_stats_get("num_bytes_used_ram") def cbft_total_gc(self): return self.cbft_stats_get("total_gc") def measure(self): stats={} for metric in self.METRICS: ''' the getattr is used to make code simple , avoid using many function the metric name should be same as the method name ''' stats[metric] = getattr(self, metric)() return stats def update_metadata(self): self.mc.add_cluster() for metric in self.METRICS: self.mc.add_metric(metric, collector=self.COLLECTOR) def sample(self): self.collect_stats() self.update_metric_metadata(self.METRICS) samples = self.measure() self.store.append(samples, cluster=self.cluster, collector=self.COLLECTOR)
def __init__(self, workload_settings, target_settings, shutdown_event=None): super(FtsWorker, self).__init__(workload_settings, target_settings, shutdown_event) host, port = self.ts.node.split(':') if self.ws.fts_config.elastic: instance = ElasticGen(host, self.ws.fts_config) self.name = "ElasticWorker" else: instance = FtsGen(host, self.ws.fts_config) self.name = "FtsWorker" self.fts_es_query = instance self.fts_es_query.prepare_query()
def init_client(self, test_config): auth = HTTPBasicAuth(self.auth[0], self.auth[1]) return FtsGen(self.master_node, test_config.fts_settings, auth=auth)