diff --git a/server/website/website/static/css/base.css b/server/website/website/static/css/base.css index 6570d6d5..3a42d2b1 100644 --- a/server/website/website/static/css/base.css +++ b/server/website/website/static/css/base.css @@ -14,7 +14,7 @@ .boxbody ul li { padding-left: 0.3em; } .plotcontainer { - margin-bottom: 2em; + margin-bottom: 0.5em; } .FixedHeader_Cloned th { background-color: white; } diff --git a/server/website/website/templates/session.html b/server/website/website/templates/session.html index d489e43d..cff065c4 100644 --- a/server/website/website/templates/session.html +++ b/server/website/website/templates/session.html @@ -24,6 +24,19 @@ border: 2px solid #F5F5F5; } +#sidepanel { + flex: 1; + height:165px; + border-style: solid; + border-width: 2px; + border-color: #999999; + margin-left:10px; + margin-top:2em; + background-color: #FDFBF4; + color: #5F5F5F; + font-size: 14px; +} + caption > h4 { display: inline-block; position: relative; @@ -201,11 +214,23 @@
+
-
+
+
+
+
+ Information
+ Knobs Tuned: {{num_knobs}}
+ Pruned Metrics: {{num_metrics}}
+ Results: {{num_sample_points}}
+ Preprocessing: {{pipeline_time}} +
+
+

Filtered Results

@@ -304,6 +329,26 @@

Filtered Results

}); + + {% endblock body %} diff --git a/server/website/website/views.py b/server/website/website/views.py index 439a7995..d59cb7ee 100644 --- a/server/website/website/views.py +++ b/server/website/website/views.py @@ -5,7 +5,7 @@ # # pylint: disable=too-many-lines import logging -import datetime +import datetime as dt import re from collections import OrderedDict @@ -32,7 +32,8 @@ from .db import parser, target_objectives from .forms import NewResultForm, ProjectForm, SessionForm, SessionKnobForm from .models import (BackupData, DBMSCatalog, KnobCatalog, KnobData, MetricCatalog, User, Hardware, - MetricData, Project, Result, Session, Workload, SessionKnob, PipelineRun) + MetricData, Project, Result, Session, Workload, SessionKnob, PipelineRun, + PipelineData) from .tasks import (aggregate_target_results, map_workload, train_ddpg, configuration_recommendation, configuration_recommendation_ddpg) from .types import (DBMSType, KnobUnitType, MetricType, @@ -260,6 +261,23 @@ def session_view(request, project_id, session_id): form_labels = Session.get_labels() form_labels['title'] = "Session Info" + num_knobs = str(len(knob_names)) + num_sample_points = str(len(results)) + num_metrics = "Not available" + pipeline_time = "Not available" + if default_workload != 'show_none': + workload = workloads[default_workload][0] + pruned_metrics = PipelineData.objects.filter(workload=workload, + task_type=1).order_by('-creation_time') + if len(pruned_metrics) > 0: + num_metrics = str(len(JSONUtil.loads(pruned_metrics[0].data))) + pipeline_time = [pipelineData.pipeline_run for pipelineData in pruned_metrics] + pipeline_time = [(pipelineRun.end_time - pipelineRun.start_time).total_seconds() + for pipelineRun in pipeline_time if pipelineRun.end_time is not None] + sec = sum(pipeline_time) / len(pipeline_time) + pipeline_time = str(dt.timedelta(seconds=sec)) + pipeline_time = pipeline_time[:pipeline_time.find(".")] + context = { 'project': project, 'dbmss': dbmss, @@ -278,6 +296,10 @@ def session_view(request, project_id, session_id): 'session': session, 'results': results, 'labels': form_labels, + 'num_metrics': num_metrics, + 'num_sample_points': num_sample_points, + 'num_knobs': num_knobs, + 'pipeline_time': pipeline_time, } context.update(csrf(request)) return render(request, 'session.html', context)