Esempio n. 1
0
    def collect_data(self, bucketname, cluster, user, password, inputfile, statsfile, scale_val, opts, output_dir):
        scale_set = []
        if scale_val == 'all':
            scale_set = ['minute', 'hour', 'day', 'week', 'month', 'year']
        else:
            scale_set = [scale_val]

        if not inputfile:
            server, port = util.hostport(cluster)

            #get node list info
            nodes = self.get_hostlist(server, port, user, password, opts)
            self.log.debug(util.pretty_print(stats_buffer.nodes))

            #get bucket list
            bucketlist = self.get_bucketlist(server, port, user, password, bucketname, opts)
            self.log.debug(util.pretty_print(stats_buffer.bucket_info))
            self.log.debug(util.pretty_print(stats_buffer.buckets_summary))

            #get stats from ep-engine
            self.get_mc_stats(server, bucketlist, nodes, bucketname)
            self.log.debug(util.pretty_print(stats_buffer.node_stats))

            collected_data = {}
            for scale in scale_set:
                #get stats from ns-server
                self.get_ns_stats(bucketlist, server, port, user, password, bucketname, scale, opts)

            self.log.debug(util.pretty_print(stats_buffer.buckets))

            collected_data["scale"] = scale_val
            collected_data["nodes"] = stats_buffer.nodes
            collected_data["bucket_info"] = stats_buffer.bucket_info
            collected_data["buckets_summary"] = stats_buffer.buckets_summary
            collected_data["node_stats"] = stats_buffer.node_stats
            collected_data["buckets"] = stats_buffer.buckets
            self.write_file(os.path.join(output_dir, statsfile), collected_data)
        else:
            json_data=open(inputfile)
            collected_data = json.load(json_data)
            json_data.close()
            stats_buffer.nodes = collected_data["nodes"]
            stats_buffer.bucket_info = collected_data["bucket_info"]
            stats_buffer.buckets_summary = collected_data["buckets_summary"]
            stats_buffer.node_stats = collected_data["node_stats"]
            self.get_mc_stats_fromfile(bucketname,
                                       collected_data["buckets"],
                                       collected_data["nodes"])
            stats_buffer.buckets = collected_data["buckets"]
            scale_val = collected_data["scale"]
        return scale_val
Esempio n. 2
0
    def run_report(self, txtfile):
        dict = {
            "globals": globals,
            "cluster_symptoms": cluster_symptoms,
            "bucket_symptoms": bucket_symptoms,
            "bucket_node_symptoms": bucket_node_symptoms,
            "node_symptoms": node_symptoms,
            "node_list": node_list,
            "bucket_list": bucket_list,
        }

        f = open(txtfile, 'w')
        report = {}
        report["Report Time"] = datetime.datetime.now().strftime(
            "%Y-%m-%d %H:%M:%S")
        report["Nodelist Overview"] = node_list
        report["Cluster Overview"] = cluster_symptoms
        report["Node Metrics"] = node_symptoms
        report["Bucket Metrics"] = bucket_symptoms
        report["Bucket Node Metrics"] = bucket_node_symptoms

        print >> f, util.pretty_print(report)
        f.close()
        sys.stderr.write(
            "The run finished successfully. Please find output result at '{0}'"
            .format(txtfile))
Esempio n. 3
0
    def collect_data(self,cluster, user, password, opts):
        server, port = util.hostport(cluster)

        #get node list info
        nodes = self.get_hostlist(server, port, user, password, opts)
        self.log.debug(util.pretty_print(stats_buffer.nodes))

        #get bucket list
        bucketlist = self.get_bucketlist(server, port, user, password, opts)
        self.log.debug(util.pretty_print(stats_buffer.bucket_info))

        #get stats from ep-engine
        self.get_mc_stats(server, bucketlist, nodes)
        self.log.debug(util.pretty_print(stats_buffer.node_stats))

        #get stats from ns-server
        self.get_ns_stats(bucketlist, server, port, user, password, opts)
        self.log.debug(util.pretty_print(stats_buffer.buckets))
Esempio n. 4
0
    def run_report(self, txtfile, htmlfile, verbose):
        
        dict = {
            "globals" : globals,
            "cluster_symptoms" : cluster_symptoms,
            "bucket_symptoms" : bucket_symptoms,
            "bucket_node_symptoms" : bucket_node_symptoms,
            "bucket_node_status" : bucket_node_status,
            "node_symptoms" : node_symptoms,
            "node_list" : node_list,
            "bucket_list" : bucket_list,
            "indicator_warn" : indicator_warn,
            "indicator_warn_exist" : len(indicator_warn) > 0,
            "indicator_error" : indicator_error,
            "indicator_error_exist" : len(indicator_error) > 0,
            "verbose" : verbose,
        }

        # read the current version number
        try:
            f = open('VERSION.txt', 'r')
            globals["versions"] = string.strip(f.read())
            f.close()
        except Exception:
            pass

        f = open(txtfile, 'w')
        report = {}
        report["Report Time"] = globals["report_time"].strftime("%Y-%m-%d %H:%M:%S")
        
        report["Nodelist Overview"] = node_list
            
        report["Cluster Overview"] = cluster_symptoms
        
        report["Bucket Metrics"] = bucket_symptoms

        report["Bucket Node Metrics"] = bucket_node_symptoms
        
        report["Key indicators"] = (indicator_error, indicator_warn)
        
        report["Node disparate"] = node_disparate

        print >> f, util.pretty_print(report)
        f.close()

        mydir = os.path.dirname(sys.argv[0])
        f = open(htmlfile, 'w')
        print >> f, Template(file=os.path.join(mydir, "report-htm.tmpl"), searchList=[dict])
        f.close()

        sys.stderr.write("\nThe run finished successfully. Please find html output at '{0}' and text output at '{1}'.\n".format(htmlfile, txtfile))
Esempio n. 5
0
    def collect_data(self, bucketname, cluster, user, password, inputfile, opts):
        if not inputfile:
            server, port = util.hostport(cluster)

            #get node list info
            nodes = self.get_hostlist(server, port, user, password, opts)
            self.log.debug(util.pretty_print(stats_buffer.nodes))

            #get bucket list
            bucketlist = self.get_bucketlist(server, port, user, password, bucketname, opts)
            self.log.debug(util.pretty_print(stats_buffer.bucket_info))
            self.log.debug(util.pretty_print(stats_buffer.buckets_summary))

            #get stats from ep-engine
            self.get_mc_stats(server, bucketlist, nodes, bucketname)
            self.log.debug(util.pretty_print(stats_buffer.node_stats))
        
            #get stats from ns-server
            self.get_ns_stats(bucketlist, server, port, user, password, bucketname, opts)
            self.log.debug(util.pretty_print(stats_buffer.buckets))

            collected_data = {}
            collected_data["nodes"] = stats_buffer.nodes
            collected_data["bucket_info"] = stats_buffer.bucket_info
            collected_data["buckets_summary"] = stats_buffer.buckets_summary
            collected_data["node_stats"] = stats_buffer.node_stats
            collected_data["buckets"] = stats_buffer.buckets
            self.write_file("stats.json", collected_data)
        else:
            import json
            json_data=open(inputfile)
            collected_data = json.load(json_data)
            json_data.close()
            stats_buffer.nodes = collected_data["nodes"]
            stats_buffer.bucket_info = collected_data["bucket_info"]
            stats_buffer.buckets_summary = collected_data["buckets_summary"]
            stats_buffer.node_stats = collected_data["node_stats"]
            stats_buffer.buckets = collected_data["buckets"]
Esempio n. 6
0
    def run_report(self, txtfile, htmlfile, verbose):
        
        dict = {
            "globals" : globals,
            "cluster_symptoms" : cluster_symptoms,
            "bucket_symptoms" : bucket_symptoms,
            "bucket_node_symptoms" : bucket_node_symptoms,
            "bucket_node_status" : bucket_node_status,
            "node_symptoms" : node_symptoms,
            "node_list" : node_list,
            "bucket_list" : bucket_list,
            "indicator_warn" : indicator_warn,
            "indicator_error" : indicator_error,
            "verbose" : verbose,
        }
        
        f = open(txtfile, 'w')
        report = {}
        report["Report Time"] = globals["report_time"].strftime("%Y-%m-%d %H:%M:%S")
        
        report["Nodelist Overview"] = node_list
            
        report["Cluster Overview"] = cluster_symptoms
        
        report["Bucket Metrics"] = bucket_symptoms

        report["Bucket Node Metrics"] = bucket_node_symptoms
        
        report["Key indicators"] = (indicator_error, indicator_warn)
        
        report["Node disparate"] = node_disparate

        print >> f, util.pretty_print(report)
        f.close()
        
        f = open(htmlfile, 'w')
        print >> f, Template(file="report-htm.tmpl", searchList=[dict])
        f.close()

        sys.stderr.write("\nThis run finishes successfully. Please find output result at " + htmlfile)
Esempio n. 7
0
    def run_report(self, txtfile):
        dict = {
            "globals" : globals,
            "cluster_symptoms" : cluster_symptoms,
            "bucket_symptoms" : bucket_symptoms,
            "bucket_node_symptoms" : bucket_node_symptoms,
            "node_symptoms" : node_symptoms,
            "node_list" : node_list,
            "bucket_list" : bucket_list,
        }

        f = open(txtfile, 'w')
        report = {}
        report["Report Time"] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        report["Nodelist Overview"] = node_list
        report["Cluster Overview"] = cluster_symptoms
        report["Node Metrics"] = node_symptoms
        report["Bucket Metrics"] = bucket_symptoms
        report["Bucket Node Metrics"] = bucket_node_symptoms

        print >> f, util.pretty_print(report)
        f.close()
        sys.stderr.write("The run finished successfully. Please find output result at '{0}'".format(txtfile))
Esempio n. 8
0
 def write_file(self, filename, info):
     f = open(filename, 'w')
     print >> f, util.pretty_print(info)
     f.close()
Esempio n. 9
0
    def run_report(self, verbose, scale_set, scale, debug, output_dir):
        reports_dir = os.path.join(os.path.dirname(sys.argv[0]), 'reports')
        txtfile = os.path.join(output_dir, scale + ".txt")
        htmlfile = os.path.join(output_dir, scale + ".html")

        dict = {
            "util": UtilTool(),
            "globals" : globals,
            "cluster_symptoms" : cluster_symptoms,
            "bucket_symptoms" : bucket_symptoms,
            "bucket_node_symptoms" : bucket_node_symptoms,
            "bucket_node_status" : bucket_node_status,
            "node_symptoms" : node_symptoms,
            "sizing_symptoms": sizing_symptoms,
            "node_list" : node_list,
            "bucket_list" : bucket_list,
            "indicator_warn" : indicator_warn,
            "indicator_warn_exist" : len(indicator_warn) > 0,
            "indicator_error" : indicator_error,
            "indicator_error_exist" : len(indicator_error) > 0,
            "verbose" : verbose,
            "scale_set" : scale_set,
            "debug" : debug,
            "sizing": None,
        }
        globals["scale"] = scale

        # read the current version number
        for fname in [os.path.join(os.path.dirname(sys.argv[0]), '..', '..', 'VERSION.txt'), \
                      os.path.join(os.path.dirname(sys.argv[0]), '..', 'VERSION.txt'), \
                      os.path.join(os.path.dirname(sys.argv[0]), 'VERSION.txt')]:
            try:
                f = open(fname, 'r')
                globals["versions"] = string.strip(f.read())
                f.close()
            except Exception:
                pass

        f = open(txtfile, 'w')
        report = {}
        report["Report Time"] = globals["report_time"].strftime("%Y-%m-%d %H:%M:%S")
        report["Nodelist Overview"] = node_list
        report["Sizing Report"] = sizing_symptoms
        report["Cluster Overview"] = cluster_symptoms
        report["Bucket Metrics"] = bucket_symptoms
        report["Bucket Node Metrics"] = bucket_node_symptoms
        report["Key indicators"] = (indicator_error, indicator_warn)
        report["Node disparate"] = node_disparate

        print >> f, util.pretty_print(report)
        f.close()

        #print util.pretty_print(bucket_node_symptoms)

        f = open(htmlfile, 'w')
        print >> f, Template(file=os.path.join(reports_dir, TEMPLATE_FILE), searchList=[dict])
        f.close()

        #generate  charts if any
        for node in node_list:
            for category, values in sizing_symptoms[node].iteritems():
                for sizing in values:   
                    if sizing["chart"]:
                        dict["sizing"] = sizing
                        htmlfile = os.path.join(output_dir, sizing["chart_id"] + ".html")
                        f = open(htmlfile, "w")
                        print >> f, Template(file=os.path.join(reports_dir,  CHART_FILE), searchList=[dict])
                        f.close()

        # generate array/list of available reports for use via AJAX
        available_reports = [os.path.splitext(n)[0]
                             for n in fnmatch.filter(os.listdir('./reports/'),
                                                     '*.html')]
        f = open(os.path.join(output_dir, 'all.json'), 'w')
        print >> f, util.pretty_print(available_reports)
        f.close()

        #Need to copy support files for final report
        normalize_report_dir = os.path.normpath(reports_dir)
        normalize_output_dir = os.path.normpath(os.path.dirname(output_dir))
        if normalize_output_dir != normalize_report_dir:
            for item in os.listdir(normalize_report_dir):
                if not item in [TEMPLATE_FILE, CHART_FILE]:
                    s = os.path.join(normalize_report_dir, item)
                    d = os.path.join(normalize_output_dir, item)
                    try:
                        if os.path.isfile(s):
                            shutil.copy2(s, d)
                        else:
                            shutil.copytree(s, d)
                    except Exception:
                        pass

        sys.stderr.write("\nThe run finished successfully. \nPlease find html output at '%s' and text output at '%s'.\n" % \
            (htmlfile, txtfile))