Add a common Dataset dialog

Dataset parameters are needed when creating some resources
for instance Dataset, Model, Model Evaluation.

Add a common dataset dialog to avoid redundant expression.
This commit is contained in:
Hiroyuki Eguchi 2017-01-30 18:12:25 +09:00
parent c34df76c7a
commit 2feb484c93
14 changed files with 229 additions and 239 deletions

View File

@ -17,27 +17,33 @@
/**
* @ngdoc controller
* @name createModelEvaluationSpecController
* @name commonDatasetController
* @ngController
* @description
* Controller for the model_evaluation spec step in create workflow
* Controller for the dataset step in create workflow
*/
angular
.module('horizon.dashboard.machine_learning.model_evaluations')
.controller('createModelEvaluationSpecController', createModelEvaluationSpecController);
.module('horizon.dashboard.machine_learning.models')
.controller('commonDatasetController', commonDatasetController);
createModelEvaluationSpecController.$inject = [
commonDatasetController.$inject = [
'$scope',
'horizon.framework.util.i18n.gettext'
];
function createModelEvaluationSpecController($scope, gettext) {
function commonDatasetController($scope, gettext) {
var ctrl = this;
ctrl.model_evaluationFormatOptions = [
ctrl.datasetLocationOptions = [
{ label: gettext('Swift'), value: 'swift' },
{ label: gettext('Internal HDFS'), value: 'internal' }
];
ctrl.datasetFormatOptions = [
{ label: gettext('CSV'), value: 'csv' },
{ label: gettext('LibSVM'), value: 'libsvm' },
{ label: gettext('Text'), value: 'text' }
];
}
})();

View File

@ -1,8 +1,14 @@
<dl>
<dt translate>Source Dataset URL</dt>
<dd translate>URL of Dataset stored Swift or Internal HDFS.</dd>
<dt translate>Dataset Location</dt>
<dd translate>Location where Dataset stored (Swift or Internal HDFS).</dd>
<dt translate>Dataset Format</dt>
<dd translate>Dataset Format (csv or libsvm or text).</dd>
<dt translate>Dataset UUID</dt>
<dd translate>UUID of Meteos Dataset.</dd>
<dt translate>Container Name</dt>
<dd translate>Swift Container Name.</dd>
<dt translate>Object Name</dt>
<dd translate>Swift Object Name.</dd>
<dt translate>Swift Tenant</dt>
<dd translate>Tenant name of Swift.</dd>
<dt translate>Swift User Name</dt>

View File

@ -0,0 +1,110 @@
<div ng-controller="commonDatasetController as ctrl">
<div class="row">
<div class="col-xs-12">
<div class="form-group">
<label class="control-label" for="location">
<translate>Dataset Location</translate>
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<div class="form-field">
<div class="btn-group">
<label class="btn btn-default"
ng-repeat="option in ctrl.datasetLocationOptions"
ng-model="model.newCommonDataset.location"
uib-btn-radio="option.value">{$ ::option.label $}</label>
</div>
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="control-label" for="format">
<translate>Dataset Format</translate>
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<div class="form-field">
<div class="btn-group">
<label class="btn btn-default"
ng-repeat="option in ctrl.datasetFormatOptions"
ng-model="model.newCommonDataset.format"
uib-btn-radio="option.value">{$ ::option.label $}</label>
</div>
</div>
</div>
</div>
<div class="col-xs-12"
ng-if="model.newCommonDataset.location == 'swift'">
<div class="form-group">
<label class="control-label" for="container-name">
<translate>Container Name</translate>
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<input name="container-name" type="text" class="form-control" id="container-name"
ng-model="model.newCommonDataset.container_name"
placeholder="{$ 'Swift Container Name.'|translate $}">
</div>
</div>
<div class="col-xs-12"
ng-if="model.newCommonDataset.location == 'swift'">
<div class="form-group">
<label class="control-label" for="object-name">
<translate>Object Name</translate>
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<input name="object-name" type="text" class="form-control" id="object-name"
ng-model="model.newCommonDataset.object_name"
placeholder="{$ 'Swift Object Name.'|translate $}">
</div>
</div>
<div class="col-xs-12"
ng-if="model.newCommonDataset.location == 'internal'">
<div class="form-group">
<label class="control-label" for="dataset-uuid">
<translate>Dataset UUID</translate>
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<input name="dataset-uuid" type="text" class="form-control" id="dataset-uuid"
ng-model="model.newCommonDataset.dataset_uuid"
placeholder="{$ 'UUID of Meteos Dataset.'|translate $}">
</div>
</div>
<div class="col-xs-12"
ng-if="model.newCommonDataset.location == 'swift'">
<div class="form-group">
<label class="control-label" for="swift-tenant">
<translate>Swift Tenant</translate>
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<input name="swift-tenant" type="text" class="form-control" id="swift-tenant"
ng-model="model.newCommonDataset.swift_tenant"
placeholder="{$ 'Tenant name of Swift.'|translate $}">
</div>
</div>
<div class="col-xs-12"
ng-if="model.newCommonDataset.location == 'swift'">
<div class="form-group">
<label class="control-label" for="swift-username">
<translate>Swift User Name</translate>
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<input name="swift-username" type="text" class="form-control" id="swift-username"
ng-model="model.newCommonDataset.swift_username"
placeholder="{$ 'User name of Swift.'|translate $}">
</div>
</div>
<div class="col-xs-12"
ng-if="model.newCommonDataset.location == 'swift'">
<div class="form-group">
<label class="control-label" for="swift-password">
<translate>Swift User Password</translate>
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<input name="swift-password" type="text" class="form-control" id="swift-password"
ng-model="model.newCommonDataset.swift_password"
placeholder="{$ 'Password of Swift User.'|translate $}">
</div>
</div>
</div>
</div>

View File

@ -36,6 +36,12 @@
helpUrl: basePath + 'datasets/create/info/info.help.html',
formName: 'datasetInfoForm'
},
{
title: gettext('Dataset'),
templateUrl: basePath + 'common/dataset/dataset.html',
helpUrl: basePath + 'common/dataset/dataset.help.html',
formName: 'commonDatasetForm'
},
{
title: gettext('Spec'),
templateUrl: basePath + 'datasets/create/spec/spec.html',

View File

@ -26,6 +26,7 @@
function datasetModel(meteos) {
var model = {
newDatasetSpec: {},
newCommonDataset: {},
// API methods
init: init,
@ -44,6 +45,17 @@
swift_username: null,
swift_password: null
};
model.newCommonDataset = {
location: null,
format: null,
dataset_uuid: null,
container_name: null,
object_name: null,
swift_tenant: null,
swift_username: null,
swift_password: null
};
}
function init() {
@ -53,23 +65,25 @@
function createDataset() {
var finalSpec = angular.copy(model.newDatasetSpec);
var commonDataset = angular.copy(model.newCommonDataset);
var url = "";
cleanNullProperties(finalSpec);
if(commonDataset.location == 'swift'){
url = 'swift://' +
commonDataset.container_name + '/' +
commonDataset.object_name;
}else{
url = 'internal://' + commonDataset.dataset_uuid;
}
finalSpec.source_dataset_url = url;
finalSpec.swift_tenant = commonDataset.swift_tenant;
finalSpec.swift_username = commonDataset.swift_username;
finalSpec.swift_password = commonDataset.swift_password;
return meteos.createDataset(finalSpec);
}
function cleanNullProperties(finalSpec) {
// Initially clean fields that don't have any value.
// Not only "null", blank too.
for (var key in finalSpec) {
if (finalSpec.hasOwnProperty(key) && finalSpec[key] === null
|| finalSpec[key] === "") {
delete finalSpec[key];
}
}
}
return model;
}
})();

View File

@ -1,14 +1,6 @@
<dl>
<dt translate>Method</dt>
<dd translate>Download : Download dataset to Internal HDFS.</br>Parse : Parse dataset and download to Internal HDFS.</br></dd>
<dt translate>Source Dataset URL</dt>
<dd translate>URL of Dataset stored Swift or Internal HDFS.</dd>
<dt translate>Params</dt>
<dd translate>Parameters when parsing dataset.</dd>
<dt translate>Swift Tenant</dt>
<dd translate>Tenant name of Swift.</dd>
<dt translate>Swift User Name</dt>
<dd translate>User name of Swift.</dd>
<dt translate>Swift User Password</dt>
<dd translate>Password of Swift User.</dd>
</dl>

View File

@ -16,18 +16,6 @@
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="control-label" for="dataset-source-dataset-url">
<translate>Source Dataset URL</translate>
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<input name="dataset-source-dataset-url" type="text" class="form-control" id="dataset-source-dataset-url"
ng-model="model.newDatasetSpec.source_dataset_url"
ng-required="true"
placeholder="{$ 'URL of Dataset stored Swift or Internal HDFS.'|translate $}">
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="control-label" for="dataset-params">
@ -39,38 +27,5 @@
placeholder="{$ 'Parameters when parsing dataset.'|translate $}">
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="control-label" for="dataset-swift-tenant">
<translate>Swift Tenant</translate>
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<input name="dataset-swift-tenant" type="text" class="form-control" id="dataset-swift-tenant"
ng-model="model.newDatasetSpec.swift_tenant"
placeholder="{$ 'Tenant name of Swift.'|translate $}">
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="control-label" for="dataset-swift-username">
<translate>Swift User Name</translate>
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<input name="dataset-swift-username" type="text" class="form-control" id="dataset-swift-username"
ng-model="model.newDatasetSpec.swift_username"
placeholder="{$ 'User name of Swift.'|translate $}">
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="control-label" for="dataset-swift-password">
<translate>Swift User Password</translate>
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<input name="dataset-swift-password" type="text" class="form-control" id="dataset-swift-password"
ng-model="model.newDatasetSpec.swift_password"
placeholder="{$ 'Password of Swift User.'|translate $}">
</div>
</div>
</div>
</div>

View File

@ -37,10 +37,10 @@
formName: 'model_evaluationInfoForm'
},
{
title: gettext('Spec'),
templateUrl: basePath + 'model_evaluations/create/spec/spec.html',
helpUrl: basePath + 'model_evaluations/create/spec/spec.help.html',
formName: 'model_evaluationSpecForm'
title: gettext('Dataset'),
templateUrl: basePath + 'common/dataset/dataset.html',
helpUrl: basePath + 'common/dataset/dataset.help.html',
formName: 'commonDatasetForm'
},
],

View File

@ -26,6 +26,7 @@
function model_evaluationModel(meteos) {
var model = {
newModelEvaluationSpec: {},
newCommonDataset: {},
// API methods
init: init,
@ -42,6 +43,18 @@
swift_username: null,
swift_password: null
};
model.newCommonDataset = {
location: null,
format: null,
dataset_uuid: null,
dataset_format: null,
container_name: null,
object_name: null,
swift_tenant: null,
swift_username: null,
swift_password: null
};
}
function init() {
@ -51,23 +64,26 @@
function createModelEvaluation() {
var finalSpec = angular.copy(model.newModelEvaluationSpec);
var commonDataset = angular.copy(model.newCommonDataset);
var url = "";
cleanNullProperties(finalSpec);
if(commonDataset.location == 'swift'){
url = 'swift://' +
commonDataset.container_name + '/' +
commonDataset.object_name;
}else{
url = 'internal://' + commonDataset.dataset_uuid;
}
finalSpec.source_dataset_url = url;
finalSpec.dataset_format = commonDataset.dataset_format;
finalSpec.swift_tenant = commonDataset.swift_tenant;
finalSpec.swift_username = commonDataset.swift_username;
finalSpec.swift_password = commonDataset.swift_password;
return meteos.createModelEvaluation(finalSpec);
}
function cleanNullProperties(finalSpec) {
// Initially clean fields that don't have any value.
// Not only "null", blank too.
for (var key in finalSpec) {
if (finalSpec.hasOwnProperty(key) && finalSpec[key] === null
|| finalSpec[key] === "") {
delete finalSpec[key];
}
}
}
return model;
}
})();

View File

@ -1,66 +0,0 @@
<div ng-controller="createModelEvaluationSpecController as ctrl">
<div class="row">
<div class="col-xs-12">
<div class="form-group">
<label class="control-label" for="model_evaluation-source-dataset-url">
<translate>Source Dataset URL</translate>
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<input name="model_evaluation-source-dataset-url" type="text" class="form-control" id="model_evaluation-source-dataset-url"
ng-model="model.newModelEvaluationSpec.source_dataset_url"
ng-required="true"
placeholder="{$ 'URL of Dataset stored Swift of Internal HDFS.'|translate $}">
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="control-label" for="model_evaluation-dataset-format">
<translate>Dataset Format</translate>
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<div class="form-field">
<div class="btn-group">
<label class="btn btn-default"
ng-repeat="option in ctrl.model_evaluationFormatOptions"
ng-model="model.newModelEvaluationSpec.dataset_format"
uib-btn-radio="option.value">{$ ::option.label $}</label>
</div>
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="control-label" for="model_evaluation-swift-tenant">
<translate>Swift Tenant</translate>
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<input name="model_evaluation-swift-tenant" type="text" class="form-control" id="model_evaluation-swift-tenant"
ng-model="model.newModelEvaluationSpec.swift_tenant"
placeholder="{$ 'Tenant name of Swift.'|translate $}">
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="control-label" for="model_evaluation-swift-username">
<translate>Swift User Name</translate>
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<input name="model_evaluation-swift-username" type="text" class="form-control" id="model_evaluation-swift-username"
ng-model="model.newModelEvaluationSpec.swift_username"
placeholder="{$ 'User name of Swift.'|translate $}">
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="control-label" for="model_evaluation-swift-password">
<translate>Swift User Password</translate>
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<input name="model_evaluation-swift-password" type="text" class="form-control" id="model_evaluation-swift-password"
ng-model="model.newModelEvaluationSpec.swift_password"
placeholder="{$ 'Password of Swift User.'|translate $}">
</div>
</div>
</div>
</div>

View File

@ -36,6 +36,12 @@
helpUrl: basePath + 'models/create/info/info.help.html',
formName: 'modelInfoForm'
},
{
title: gettext('Dataset'),
templateUrl: basePath + 'common/dataset/dataset.html',
helpUrl: basePath + 'common/dataset/dataset.help.html',
formName: 'commonDatasetForm'
},
{
title: gettext('Spec'),
templateUrl: basePath + 'models/create/spec/spec.html',

View File

@ -26,6 +26,7 @@
function modelModel(meteos) {
var model = {
newModelSpec: {},
newCommonDataset: {},
// API methods
init: init,
@ -45,6 +46,18 @@
swift_username: null,
swift_password: null
};
model.newCommonDataset = {
location: null,
format: null,
dataset_uuid: null,
dataset_format: null,
container_name: null,
object_name: null,
swift_tenant: null,
swift_username: null,
swift_password: null
};
}
function init() {
@ -54,23 +67,26 @@
function createModel() {
var finalSpec = angular.copy(model.newModelSpec);
var commonDataset = angular.copy(model.newCommonDataset);
var url = "";
cleanNullProperties(finalSpec);
if(commonDataset.location == 'swift'){
url = 'swift://' +
commonDataset.container_name + '/' +
commonDataset.object_name;
}else{
url = 'internal://' + commonDataset.dataset_uuid;
}
finalSpec.source_dataset_url = url;
finalSpec.dataset_format = commonDataset.dataset_format;
finalSpec.swift_tenant = commonDataset.swift_tenant;
finalSpec.swift_username = commonDataset.swift_username;
finalSpec.swift_password = commonDataset.swift_password;
return meteos.createModel(finalSpec);
}
function cleanNullProperties(finalSpec) {
// Initially clean fields that don't have any value.
// Not only "null", blank too.
for (var key in finalSpec) {
if (finalSpec.hasOwnProperty(key) && finalSpec[key] === null
|| finalSpec[key] === "") {
delete finalSpec[key];
}
}
}
return model;
}
})();

View File

@ -3,14 +3,4 @@
<dd translate>Prediction Model Type.</dd>
<dt translate>Model Params</dt>
<dd translate>Parameters when creating model.</dd>
<dt translate>Source Dataset URL</dt>
<dd translate>URL of Dataset stored Swift or Internal HDFS.</dd>
<dt translate>Dataset Format</dt>
<dd translate>Dataset Format (csv or libsvm or text).</dd>
<dt translate>Swift Tenant</dt>
<dd translate>Tenant name of Swift.</dd>
<dt translate>Swift User Name</dt>
<dd translate>User name of Swift.</dd>
<dt translate>Swift User Password</dt>
<dd translate>Password of Swift User.</dd>
</dl>

View File

@ -24,66 +24,5 @@
placeholder="{$ 'Parameters when creating model.'|translate $}">
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="control-label" for="model-source-dataset-url">
<translate>Source Dataset URL</translate>
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<input name="model-source-dataset-url" type="text" class="form-control" id="model-source-dataset-url"
ng-model="model.newModelSpec.source_dataset_url"
ng-required="true"
placeholder="{$ 'URL of Model stored Swift of Internal HDFS.'|translate $}">
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="control-label" for="model-dataset-format">
<translate>Dataset Format</translate>
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<div class="form-field">
<div class="btn-group">
<label class="btn btn-default"
ng-repeat="option in ctrl.modelFormatOptions"
ng-model="model.newModelSpec.dataset_format"
uib-btn-radio="option.value">{$ ::option.label $}</label>
</div>
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="control-label" for="model-swift-tenant">
<translate>Swift Tenant</translate>
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<input name="model-swift-tenant" type="text" class="form-control" id="model-swift-tenant"
ng-model="model.newModelSpec.swift_tenant"
placeholder="{$ 'Tenant name of Swift.'|translate $}">
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="control-label" for="model-swift-username">
<translate>Swift User Name</translate>
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<input name="model-swift-username" type="text" class="form-control" id="model-swift-username"
ng-model="model.newModelSpec.swift_username"
placeholder="{$ 'User name of Swift.'|translate $}">
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="control-label" for="model-swift-password">
<translate>Swift User Password</translate>
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<input name="model-swift-password" type="text" class="form-control" id="model-swift-password"
ng-model="model.newModelSpec.swift_password"
placeholder="{$ 'Password of Swift User.'|translate $}">
</div>
</div>
</div>
</div>