tools/show_segment_status/show_segment_status.py (89 lines of code) (raw):

#!/usr/bin/env python # -*- coding: utf-8 -*- # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. import ConfigParser import re import sys import os import json from urllib import urlopen from fe_meta_resolver import FeMetaResolver from be_tablet_reslover import BeTabletResolver class Calc: def __init__(self, fe_meta, be_resolver): self.fe_meta = fe_meta self.be_resolver = be_resolver def calc_cluster_summary(self): self.calc_table_and_be_summary("", "", 0) return def calc_table_summary(self, db_name, table_name): self.calc_table_and_be_summary(db_name, table_name, 0) return def calc_be_summary(self, be_id): self.calc_table_and_be_summary("", "", be_id) return def calc_table_and_be_summary(self, db_name, table_name, be_id): total_rs_count = 0 beta_rs_count = 0 total_rs_size = 0 beta_rs_size = 0 total_rs_row_count = 0 beta_rs_row_count = 0 for tablet in self.fe_meta.get_all_tablets(): # The db_name from meta contain cluster name, so use 'in' here if len(db_name) != 0 and (not (db_name in tablet['db_name'])): continue if len(table_name) != 0 and (tablet['tbl_name'] != table_name): continue; if be_id != 0 and tablet['be_id'] != be_id: continue rowsets = self.be_resolver.get_rowsets_by_tablet(tablet['tablet_id']) # If tablet has gone away, ignore it if rowsets is None: continue for tablet_info in rowsets: total_rs_count += 1 total_rs_row_count += tablet_info['num_rows'] total_rs_size += tablet_info['data_disk_size'] if tablet_info['is_beta']: beta_rs_count += 1 beta_rs_size += tablet_info['data_disk_size'] beta_rs_row_count += tablet_info['num_rows'] content_str = "" if len(db_name) != 0: content_str += ("db=%s " % db_name) if len(table_name) != 0: content_str += ("table=%s " % table_name) if be_id != 0: content_str += ("be=%s " % be_id) print "==========SUMMARY(%s)===========" % (content_str) print "rowset_count: %s / %s" % (beta_rs_count, total_rs_count) print "rowset_disk_size: %s / %s" % (beta_rs_size, total_rs_size) print "rowset_row_count: %s / %s" % (beta_rs_row_count, total_rs_row_count) print "===========================================================" return; def main(): cf = ConfigParser.ConfigParser() cf.read("./conf") fe_host = cf.get('cluster', 'fe_host') query_port = int(cf.get('cluster', 'query_port')) user = cf.get('cluster', 'user') query_pwd = cf.get('cluster', 'query_pwd') db_name = cf.get('cluster', 'db_name') table_name = cf.get('cluster', 'table_name') be_id = cf.getint('cluster', 'be_id') print "============= CONF =============" print "fe_host =", fe_host print "fe_query_port =", query_port print "user =", user print "db_name =", db_name print "table_name =", table_name print "be_id =", be_id print "====================================" fe_meta = FeMetaResolver(fe_host, query_port, user, query_pwd) fe_meta.init() fe_meta.debug_output() be_resolver = BeTabletResolver(fe_meta.be_list, fe_meta.tablet_map) be_resolver.init() be_resolver.debug_output() calc = Calc(fe_meta, be_resolver) calc.calc_cluster_summary() calc.calc_table_summary(db_name, table_name); calc.calc_be_summary(be_id); if __name__ == '__main__': main()