diff --git a/py-dashboard/GhostRequest.py b/py-dashboard/GhostRequest.py index 9792b42a..7004d148 100644 --- a/py-dashboard/GhostRequest.py +++ b/py-dashboard/GhostRequest.py @@ -280,7 +280,7 @@ class GhostRequest: subtest_pass_fail = list() subtest_pass_total = 0 subtest_fail_total = 0 - test_tag = dict() + test_tag_1 = list() columns = ['test-rig', 'dut-hw-version', 'dut-sw-version', 'dut-model-num', 'dut-serial-num'] duts = dict() @@ -296,10 +296,7 @@ class GhostRequest: duts[column] = column_data except: print('no column named %s' % column) - try: - test_tag[test_id] = csvreader.get_column(df, 'test-tag')[0] - except: - print('no test-id') + test_tag_1.append([test_id, list(set(csvreader.get_column(df, 'test-tag')))]) pass_fail = Counter(csvreader.get_column(df, 'pass/fail')) test_pass_fail.append(pass_fail) subtest_pass = csvreader.get_column(df, 'Subtest-Pass') @@ -387,17 +384,25 @@ class GhostRequest: pass low_priority = csvreader.filter_df(results, 'test-priority', 'less than', 94) - print('Low Priority results %s' % len(low_priority)) + if self.debug: + print('Low Priority results %s' % len(low_priority)) high_priority = csvreader.filter_df(results, 'test-priority', 'greater than or equal to', 95) high_priority_list.append(high_priority) low_priority_list.append(low_priority) except: - print("Failure") + print("Failed to process %s" % target_folder) target_folders.remove(target_folder) failuredict = dict() failuredict[target_folder] = ['Failure'] web_pages_and_pdfs.append(failuredict) + test_tag = dict() + for x in list(set([x[0] for x in test_tag_1])): + l3 = list() + for sublist in test_tag_1: + if sublist[0] == x: + l3 += sublist[1] + test_tag[x] = l3 if len(times) == 0: return ArithmeticError("There are no datapoints in any folders passed into Ghost") @@ -447,7 +452,8 @@ class GhostRequest: short_description = 'Tests passed' # variable name numeric_score = test_pass_fail_results['PASS'] # value tags = dict() - print(datetime.utcfromtimestamp(max(times))) + if self.debug: + print(datetime.utcfromtimestamp(max(times))) tags['testbed'] = testbeds[0] tags['script'] = 'GhostRequest' tags['Graph-Group'] = 'PASS' @@ -466,7 +472,8 @@ class GhostRequest: short_description = 'Subtests passed' # variable name numeric_score = subtest_pass_fail_results['PASS'] # value tags = dict() - print(datetime.utcfromtimestamp(max(times))) + if self.debug: + print(datetime.utcfromtimestamp(max(times))) tags['testbed'] = testbeds[0] tags['script'] = 'GhostRequest' tags['Graph-Group'] = 'Subtest PASS' @@ -483,11 +490,14 @@ class GhostRequest: influxdb.post_to_influx(short_description, numeric_score, tags, date) text = 'Testbed: %s
' % testbeds[0] + raw_test_tags = list() test_tag_table = '' for tag in list(set(test_tag.values())): - print(tag) + for value in tag: + raw_test_tags.append(value) + for value in list(set(raw_test_tags)): test_tag_table += ( - 'Test Tag%s' % tag) + 'Test Tag%s' % value) dut_table_column_names = {'test-rig': 'Testbed', 'dut-hw-version': 'DUT HW', 'dut-sw-version': 'DUT SW', @@ -540,9 +550,11 @@ class GhostRequest: if grafana_token is not None: grafana = GrafanaRequest(grafana_token, grafana_host, - grafanajson_port=grafana_port + grafanajson_port=grafana_port, + debug_=self.debug ) - print(test_tag) + if self.debug: + print('Test Tag: %s' % test_tag) grafana.create_custom_dashboard(target_csvs=target_files, title=title, datasource=grafana_datasource, diff --git a/py-dashboard/GrafanaRequest.py b/py-dashboard/GrafanaRequest.py index e132b7c1..5b577ff9 100644 --- a/py-dashboard/GrafanaRequest.py +++ b/py-dashboard/GrafanaRequest.py @@ -209,7 +209,7 @@ class GrafanaRequest: from_date='now-1y', to_date='now', graph_height=8, - graph__width=12, + graph_width=12, pass_fail=None, test_tag=None): options = string.ascii_lowercase + string.ascii_uppercase + string.digits @@ -248,126 +248,37 @@ class GrafanaRequest: if pass_fail is not None: graph_groups[pass_fail] = ['PASS', 'FAIL'] + print('Test Tag in Grafana: %s' % test_tag) + for scriptname in graph_groups.keys(): print(scriptname) - for graph_group in graph_groups[scriptname]: - panel = dict() - - gridpos = dict() - gridpos['h'] = graph_height - gridpos['w'] = graph__width - gridpos['x'] = 0 - gridpos['y'] = 0 - - legend = dict() - legend['avg'] = False - legend['current'] = False - legend['max'] = False - legend['min'] = False - legend['show'] = True - legend['total'] = False - legend['values'] = False - - options = dict() - options['alertThreshold'] = True - - groupBy = list() - groupBy.append(self.groupby('$__interval', 'time')) - groupBy.append(self.groupby('null', 'fill')) - - targets = list() - counter = 0 - try: - new_target = self.maketargets(bucket, - scriptname, - groupBy, - counter, - graph_group, - testbed, - test_tag=test_tag[scriptname]) - except: - new_target = self.maketargets(bucket, scriptname, groupBy, counter, graph_group, testbed) - targets.append(new_target) - - fieldConfig = dict() - fieldConfig['defaults'] = dict() - fieldConfig['overrides'] = list() - - transformation = dict() - transformation['id'] = "renameByRegex" - transformation_options = dict() - transformation_options['regex'] = "(.*) value.*" - transformation_options['renamePattern'] = "$1" - transformation['options'] = transformation_options - - xaxis = dict() - xaxis['buckets'] = None - xaxis['mode'] = "time" - xaxis['name'] = None - xaxis['show'] = True - xaxis['values'] = list() - - yaxis = dict() - yaxis['format'] = 'short' - try: - yaxis['label'] = self.units[scriptname][graph_group] - except: - pass - yaxis['logBase'] = 1 - yaxis['max'] = None - yaxis['min'] = None - yaxis['show'] = True - - yaxis1 = dict() - yaxis1['align'] = False - yaxis1['alignLevel'] = None - - panel['aliasColors'] = dict() - panel['bars'] = False - panel['dashes'] = False - panel['dashLength'] = 10 - panel['datasource'] = datasource - panel['fieldConfig'] = fieldConfig - panel['fill'] = 0 - panel['fillGradient'] = 0 - panel['gridPos'] = gridpos - panel['hiddenSeries'] = False - panel['id'] = index - panel['legend'] = legend - panel['lines'] = True - panel['linewidth'] = 1 - panel['nullPointMode'] = 'null' - panel['options'] = options - panel['percentage'] = False - panel['pluginVersion'] = '7.5.4' - panel['pointradius'] = 2 - panel['points'] = True - panel['renderer'] = 'flot' - panel['seriesOverrides'] = list() - panel['spaceLength'] = 10 - panel['stack'] = False - panel['steppedLine'] = False - panel['targets'] = targets - panel['thresholds'] = list() - panel['timeFrom'] = None - panel['timeRegions'] = list() - panel['timeShift'] = None - if graph_group is not None: - panel['title'] = scriptname + ' ' + graph_group - else: - panel['title'] = scriptname - print(panel['title']) - panel['transformations'] = list() - panel['transformations'].append(transformation) - panel['type'] = "graph" - panel['xaxis'] = xaxis - panel['yaxes'] = list() - panel['yaxes'].append(yaxis) - panel['yaxes'].append(yaxis) - panel['yaxis'] = yaxis1 - + if scriptname in test_tag.keys(): + for tag in test_tag[scriptname]: + print('Script: %s, Tag: %s' % (scriptname, tag)) + panel = self.create_panel(graph_groups, + graph_height, + graph_width, + scriptname, + bucket, + testbed, + tag, + datasource, + index) + panels.append(panel) + index = index + 1 + else: + panel = self.create_panel(graph_groups, + graph_height, + graph_width, + scriptname, + bucket, + testbed, + None, + datasource, + index) panels.append(panel) index = index + 1 + input1['annotations'] = annot input1['editable'] = True input1['gnetId'] = None @@ -387,10 +298,138 @@ class GrafanaRequest: input1['version'] = 11 return self.create_dashboard_from_dict(dictionary=json.dumps(input1)) - # def create_custom_dashboard(self, - # datastore=None): - # data = json.dumps(datastore, indent=4) - # return requests.post(self.grafanajson_url, headers=self.headers, data=data, verify=False) + def create_panel(self, + graph_groups, + graph_height, + graph_width, + scriptname, + bucket, + testbed, + test_tag, + datasource, + index): + print('Test Tag: %s' % test_tag) + for graph_group in graph_groups[scriptname]: + panel = dict() + + gridpos = dict() + gridpos['h'] = graph_height + gridpos['w'] = graph_width + gridpos['x'] = 0 + gridpos['y'] = 0 + + legend = dict() + legend['avg'] = False + legend['current'] = False + legend['max'] = False + legend['min'] = False + legend['show'] = True + legend['total'] = False + legend['values'] = False + + options = dict() + options['alertThreshold'] = True + + groupBy = list() + groupBy.append(self.groupby('$__interval', 'time')) + groupBy.append(self.groupby('null', 'fill')) + + targets = list() + counter = 0 + try: + new_target = self.maketargets(bucket, + scriptname, + groupBy, + counter, + graph_group, + testbed, + test_tag=test_tag) + except: + new_target = self.maketargets(bucket, scriptname, groupBy, counter, graph_group, testbed) + targets.append(new_target) + + fieldConfig = dict() + fieldConfig['defaults'] = dict() + fieldConfig['overrides'] = list() + + transformation = dict() + transformation['id'] = "renameByRegex" + transformation_options = dict() + transformation_options['regex'] = "(.*) value.*" + transformation_options['renamePattern'] = "$1" + transformation['options'] = transformation_options + + xaxis = dict() + xaxis['buckets'] = None + xaxis['mode'] = "time" + xaxis['name'] = None + xaxis['show'] = True + xaxis['values'] = list() + + yaxis = dict() + yaxis['format'] = 'short' + try: + yaxis['label'] = self.units[scriptname][graph_group] + except: + pass + yaxis['logBase'] = 1 + yaxis['max'] = None + yaxis['min'] = None + yaxis['show'] = True + + yaxis1 = dict() + yaxis1['align'] = False + yaxis1['alignLevel'] = None + + panel['aliasColors'] = dict() + panel['bars'] = False + panel['dashes'] = False + panel['dashLength'] = 10 + panel['datasource'] = datasource + panel['fieldConfig'] = fieldConfig + panel['fill'] = 0 + panel['fillGradient'] = 0 + panel['gridPos'] = gridpos + panel['hiddenSeries'] = False + panel['id'] = index + panel['legend'] = legend + panel['lines'] = True + panel['linewidth'] = 1 + panel['nullPointMode'] = 'null' + panel['options'] = options + panel['percentage'] = False + panel['pluginVersion'] = '7.5.4' + panel['pointradius'] = 2 + panel['points'] = True + panel['renderer'] = 'flot' + panel['seriesOverrides'] = list() + panel['spaceLength'] = 10 + panel['stack'] = False + panel['steppedLine'] = False + panel['targets'] = targets + panel['thresholds'] = list() + panel['timeFrom'] = None + panel['timeRegions'] = list() + panel['timeShift'] = None + + if graph_group is not None: + scriptname = '%s: %s' % (scriptname, graph_group) + if test_tag is not None: + scriptname = '%s: %s' % (scriptname, test_tag) + scriptname = '%s: %s' % (scriptname, testbed) + panel['title'] = scriptname + + if self.debug: + print(panel['title']) + panel['transformations'] = list() + panel['transformations'].append(transformation) + panel['type'] = "graph" + panel['xaxis'] = xaxis + panel['yaxes'] = list() + panel['yaxes'].append(yaxis) + panel['yaxes'].append(yaxis) + panel['yaxis'] = yaxis1 + return panel def create_snapshot(self, title): print('create snapshot') @@ -427,4 +466,4 @@ class GrafanaRequest: d = dict() d[maxunit] = maxtest print(maxunit, maxtest) - return d + return d \ No newline at end of file