add integration test
This commit is contained in:
committed by
Dana Van Aken
parent
dd05e2c63c
commit
2fa97149d5
@@ -182,17 +182,22 @@ class Session(BaseModel):
|
||||
|
||||
class SessionKnobManager(models.Manager):
|
||||
@staticmethod
|
||||
def get_knobs_for_session(session):
|
||||
def get_knobs_for_session(session, only_session_knobs=False):
|
||||
# Returns a dict of the knob
|
||||
knobs = KnobCatalog.objects.filter(dbms=session.dbms)
|
||||
knob_dicts = list(knobs.values())
|
||||
session_knob_dicts = []
|
||||
for i, _ in enumerate(knob_dicts):
|
||||
if SessionKnob.objects.filter(session=session, knob=knobs[i]).exists():
|
||||
new_knob = SessionKnob.objects.filter(session=session, knob=knobs[i])[0]
|
||||
knob_dicts[i]["minval"] = new_knob.minval
|
||||
knob_dicts[i]["maxval"] = new_knob.maxval
|
||||
knob_dicts[i]["tunable"] = new_knob.tunable
|
||||
knob_dicts = [knob for knob in knob_dicts if knob["tunable"]]
|
||||
session_knob_dicts.append(new_knob)
|
||||
if only_session_knobs:
|
||||
knob_dicts = session_knob_dicts
|
||||
else:
|
||||
knob_dicts = [knob for knob in knob_dicts if knob["tunable"]]
|
||||
return knob_dicts
|
||||
|
||||
@staticmethod
|
||||
|
||||
@@ -544,7 +544,7 @@ def configuration_recommendation(recommendation_input):
|
||||
X_max = np.empty(X_scaled.shape[1])
|
||||
X_scaler_matrix = np.zeros([1, X_scaled.shape[1]])
|
||||
|
||||
session_knobs = SessionKnob.objects.get_knobs_for_session(newest_result.session)
|
||||
session_knobs = SessionKnob.objects.get_knobs_for_session(newest_result.session, only_session_knobs=True)
|
||||
|
||||
# Set min/max for knob values
|
||||
for i in range(X_scaled.shape[1]):
|
||||
|
||||
@@ -70,6 +70,10 @@ urlpatterns = [
|
||||
|
||||
# train ddpg with results in the given session
|
||||
url(r'^train_ddpg/sessions/(?P<session_id>[0-9]+)$', website_views.train_ddpg_loops, name='train_ddpg_loops'),
|
||||
|
||||
# Test
|
||||
url(r'^test/create/', website_views.create_test_website, name='create_test_website'),
|
||||
url(r'^test/pipeline/', website_views.pipeline_data_ready, name='pipeline_data_ready')
|
||||
]
|
||||
|
||||
if settings.DEBUG:
|
||||
|
||||
@@ -29,8 +29,8 @@ from pytz import timezone
|
||||
|
||||
from .db import parser, target_objectives
|
||||
from .forms import NewResultForm, ProjectForm, SessionForm, SessionKnobForm
|
||||
from .models import (BackupData, DBMSCatalog, KnobCatalog, KnobData, MetricCatalog,
|
||||
MetricData, Project, Result, Session, Workload, SessionKnob)
|
||||
from .models import (BackupData, DBMSCatalog, KnobCatalog, KnobData, MetricCatalog, User, Hardware,
|
||||
MetricData, Project, Result, Session, Workload, SessionKnob, PipelineRun)
|
||||
from .tasks import (aggregate_target_results, map_workload, train_ddpg,
|
||||
configuration_recommendation, configuration_recommendation_ddpg)
|
||||
from .types import (DBMSType, KnobUnitType, MetricType,
|
||||
@@ -1041,3 +1041,52 @@ def train_ddpg_loops(request, session_id): # pylint: disable=unused-argument
|
||||
for result in results:
|
||||
train_ddpg(result.pk)
|
||||
return HttpResponse()
|
||||
|
||||
|
||||
# integration test
|
||||
@csrf_exempt
|
||||
def pipeline_data_ready(request): # pylint: disable=unused-argument
|
||||
LOG.info(PipelineRun.objects.get_latest())
|
||||
if PipelineRun.objects.get_latest() is None:
|
||||
response = "Pipeline data ready: False"
|
||||
else:
|
||||
response = "Pipeline data ready: True"
|
||||
return HttpResponse(response)
|
||||
|
||||
|
||||
# integration test
|
||||
@csrf_exempt
|
||||
def create_test_website(request): # pylint: disable=unused-argument
|
||||
if User.objects.filter(username='ottertune_test_user').exists():
|
||||
User.objects.filter(username='ottertune_test_user').delete()
|
||||
if Hardware.objects.filter(pk=1).exists():
|
||||
test_hardware = Hardware.objects.get(pk=1)
|
||||
else:
|
||||
test_hardware = Hardware.objects.create(pk=1)
|
||||
|
||||
test_user = User.objects.create_user(username='ottertune_test_user',
|
||||
password='ottertune_test_user')
|
||||
test_project = Project.objects.create(user=test_user, name='ottertune_test_project',
|
||||
creation_time=now(), last_update=now())
|
||||
# create no tuning session
|
||||
Session.objects.create(name='test_session_no_tuning', tuning_session='no_tuning_session',
|
||||
dbms_id=1, hardware=test_hardware, project=test_project,
|
||||
creation_time=now(), last_update=now(), user=test_user,
|
||||
upload_code='ottertuneTestNoTuning')
|
||||
# create gpr session
|
||||
Session.objects.create(name='test_session_gpr', user=test_user, tuning_session='tuning_session',
|
||||
dbms_id=1, hardware=test_hardware, project=test_project,
|
||||
creation_time=now(), last_update=now(), algorithm=AlgorithmType.GPR,
|
||||
upload_code='ottertuneTestTuningGPR')
|
||||
# create dnn session
|
||||
Session.objects.create(name='test_session_dnn', user=test_user, tuning_session='tuning_session',
|
||||
dbms_id=1, hardware=test_hardware, project=test_project,
|
||||
creation_time=now(), last_update=now(), algorithm=AlgorithmType.DNN,
|
||||
upload_code='ottertuneTestTuningDNN')
|
||||
# create ddpg session
|
||||
Session.objects.create(name='test_session_ddpg', tuning_session='tuning_session',
|
||||
dbms_id=1, hardware=test_hardware, project=test_project,
|
||||
creation_time=now(), last_update=now(), user=test_user,
|
||||
upload_code='ottertuneTestTuningDDPG', algorithm=AlgorithmType.DDPG)
|
||||
response = HttpResponse("Success: create test website successfully")
|
||||
return response
|
||||
|
||||
Reference in New Issue
Block a user