URL='https://moose.leap.se:9200'
-# configure a logger
-logger = logging.getLogger(__name__)
-ch = logging.StreamHandler()
-ch.setFormatter(logging.Formatter('%(asctime)s %(message)s'))
-logger.addHandler(ch)
-logger.setLevel(logging.INFO)
-
-
-# Generate visualizations
-def generate_visualizations():
- dir = './visualization/'
- with open(os.path.join(dir, 'template.mustache'), 'r') as f:
+def _get_logger():
+ logger = logging.getLogger(__name__)
+ ch = logging.StreamHandler()
+ ch.setFormatter(logging.Formatter('%(asctime)s %(message)s'))
+ logger.addHandler(ch)
+ logger.setLevel(logging.INFO)
+ return logger
+
+
+def _delete_jsons(directory):
+ for f in os.listdir(directory):
+ if f.endswith('.json'):
+ os.unlink(os.path.join(directory, f))
+
+
+def generate_visualizations(tests):
+ with open(os.path.join('templates', 'visualization.mustache'), 'r') as f:
template = f.read()
+ with open(os.path.join('templates', 'visualization-visState.mustache')) as f:
+ template_visState = f.read()
+ with open(os.path.join('templates', 'visualization-searchSourceJSON.mustache')) as f:
+ template_searchSourceJSON = f.read()
+
+ out_dir = './visualization'
+ _delete_jsons(out_dir)
+
+ # remove all json files in output directory
+ for f in os.listdir(out_dir):
+ if f.endswith('.json'):
+ os.unlink(os.path.join(out_dir, f))
- # test_names = tests.
for test_name in tests:
- out_file = os.path.join(dir, test_name + '.json')
+ out_file = os.path.join(out_dir, test_name + '.json')
logger.info('Generating ' + out_file)
context = {
"AND machine_info.host='weasel' "
"AND name='" + test_name + "'"
}
- rendered = pystache.render(template, context)
- # verify we generated valid JSON visualizations
- content = json.loads(rendered)
- visState = content['visState']
- searchSourceJSON = content['kibanaSavedObjectMeta']['searchSourceJSON']
+ visState = pystache.render(template_visState, context)
assert json.loads(visState)
+ context['visState'] = json.dumps(visState)
+
+ searchSourceJSON = pystache.render(template_searchSourceJSON, context)
assert json.loads(searchSourceJSON)
+ context['searchSourceJSON'] = json.dumps(searchSourceJSON)
+
+ rendered = pystache.render(template, context)
+ assert json.loads(rendered)
with open(out_file, 'w') as out:
out.write(rendered)
-# Generate Dashboard
-def generate_dashboards():
- dir = './dashboard/'
- with open(os.path.join(dir, 'template.mustache'), 'r') as f:
+
+def generate_dashboards(tests):
+ with open(os.path.join('templates', 'dashboard.mustache'), 'r') as f:
template = f.read()
- out_file = os.path.join(dir, 'soledad-benchmarks.json')
+ out_dir = './dashboard'
+ _delete_jsons(out_dir)
+
+ out_file = os.path.join(out_dir, 'soledad-benchmarks.json')
logger.info('Generating ' + out_file)
panels = []
'type': 'visualization',
})
- panels_json = {'panels_json': json.dumps(panels)}
- rendered = pystache.render(template, panels_json)
+ context = {'panels_json': json.dumps(panels)}
+ rendered = pystache.render(template, context)
+ assert json.loads(rendered), rendered
with open(out_file, 'w') as f:
f.write(rendered)
-# Main
-
-# Get all test names
-with open('./query/test_names.json') as f:
- response = requests.get(URL + '/_search', data=f)
- buckets = response.json()['aggregations']['test_names']['buckets']
-
-tests = []
-for d in buckets:
- name = d['key']
- tests.append(name)
-tests = sorted(tests)
+def _get_test_names():
+ with open('./query/test_names.json') as f:
+ response = requests.get(URL + '/_search', data=f)
+ buckets = response.json()['aggregations']['test_names']['buckets']
+ tests = []
+ for d in buckets:
+ name = d['key']
+ tests.append(name)
+ return sorted(tests)
if __name__ == '__main__':
- generate_dashboards()
- generate_visualizations()
+ logger = _get_logger()
+ tests = _get_test_names()
+ generate_dashboards(tests)
+ generate_visualizations(tests)
+++ /dev/null
-{
-"title": "{{{title}}}",
-"visState": "{\"title\":\"Soledad benchmark for {{{title}}}\",\"type\":\"line\",\"params\":{\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"showCircles\":true,\"interpolate\":\"linear\",\"scale\":\"linear\",\"drawLinesBetweenPoints\":true,\"radiusRatio\":9,\"times\":[],\"addTimeMarker\":false,\"defaultYExtents\":false,\"setYExtents\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"avg\",\"schema\":\"metric\",\"params\":{\"field\":\"stats.median\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"commit_id_and_date\",\"size\":1000,\"orderAgg\":{\"id\":\"2-orderAgg\",\"enabled\":true,\"type\":\"min\",\"schema\":\"orderAgg\",\"params\":{\"field\":\"commit_info.time\"}},\"order\":\"asc\",\"orderBy\":\"custom\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"avg\",\"schema\":\"metric\",\"params\":{\"field\":\"stats.mean\"}},{\"id\":\"4\",\"enabled\":true,\"type\":\"avg\",\"schema\":\"metric\",\"params\":{\"field\":\"stats.iqr\"}},{\"id\":\"5\",\"enabled\":true,\"type\":\"avg\",\"schema\":\"metric\",\"params\":{\"field\":\"stats.stddev\"}}],\"listeners\":{}}",
- "uiStateJSON": "{}",
- "description": "Soledad benchmark for {{{title}}}",
- "version": 1,
- "kibanaSavedObjectMeta": {
- "searchSourceJSON": "{\"index\":\"benchmark*\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"query_string\":{\"query\":\"{{{query}}}\",\"analyze_wildcard\":true}}}"
- }
-}