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)