Ejemplo n.º 1
0
    def create(self, req, body):
        """Creates a new experiment."""
        context = req.environ['meteos.context']

        if not self.is_valid_body(body, 'experiment'):
            raise exc.HTTPUnprocessableEntity()

        experiment = body['experiment']

        LOG.debug("Create experiment with request: %s", experiment)

        try:
            template = self.engine_api.get_template(context,
                                                    experiment['template_id'])
            utils.is_valid_status(template.__class__.__name__, template.status,
                                  constants.STATUS_AVAILABLE)
        except exception.NotFound:
            raise exc.HTTPNotFound()
        except exception.InvalidStatus:
            raise

        display_name = experiment.get('display_name')
        display_description = experiment.get('display_description')
        template_id = experiment.get('template_id')
        key_name = experiment.get('key_name')
        neutron_management_network = experiment.get(
            'neutron_management_network')

        new_experiment = self.engine_api.create_experiment(
            context, display_name, display_description, template_id, key_name,
            neutron_management_network)

        return self._view_builder.detail(req, new_experiment)
Ejemplo n.º 2
0
    def delete_experiment(self, context, id, force=False):
        """Delete experiment."""

        policy.check_policy(context, 'experiment', 'delete')

        experiment = self.db.experiment_get(context, id)

        utils.is_valid_status(experiment.__class__.__name__,
                              experiment['status'], DELETE_VALID_STATUSES)

        self.engine_rpcapi.delete_experiment(context, id)
Ejemplo n.º 3
0
    def delete_template(self, context, id, force=False):
        """Delete template."""

        policy.check_policy(context, 'template', 'delete')

        template = self.db.template_get(context, id)

        utils.is_valid_status(template.__class__.__name__, template['status'],
                              DELETE_VALID_STATUSES)

        self.engine_rpcapi.delete_template(context, id)
Ejemplo n.º 4
0
    def delete_model(self, context, id, force=False, recreate=False):
        """Delete model."""

        policy.check_policy(context, 'model', 'delete')

        model = self.db.model_get(context, id)

        utils.is_valid_status(model.__class__.__name__, model['status'],
                              DELETE_VALID_STATUSES)

        self.engine_rpcapi.delete_model(context, model['cluster_id'],
                                        model['job_id'], id, recreate)
Ejemplo n.º 5
0
    def delete_dataset(self, context, id, force=False):
        """Delete dataset."""

        policy.check_policy(context, 'dataset', 'delete')

        dataset = self.db.dataset_get(context, id)

        utils.is_valid_status(dataset.__class__.__name__, dataset['status'],
                              DELETE_VALID_STATUSES)

        self.engine_rpcapi.delete_dataset(context, dataset['cluster_id'],
                                          dataset['job_id'], id)
Ejemplo n.º 6
0
    def delete_learning(self, context, id, force=False):
        """Delete learning."""

        policy.check_policy(context, 'learning', 'delete')

        learning = self.db.learning_get(context, id)

        utils.is_valid_status(learning.__class__.__name__, learning['status'],
                              DELETE_VALID_STATUSES)

        if learning.job_id:
            self.engine_rpcapi.delete_learning(context, learning['cluster_id'],
                                               learning['job_id'], id)
        else:
            self.db.learning_delete(context, id)
Ejemplo n.º 7
0
    def create(self, req, body):
        """Creates a new dataset."""
        context = req.environ['meteos.context']

        if not self.is_valid_body(body, 'dataset'):
            raise exc.HTTPUnprocessableEntity()

        dataset = body['dataset']

        LOG.debug("Create dataset with request: %s", dataset)

        try:
            experiment = self.engine_api.get_experiment(
                context, dataset['experiment_id'])
            utils.is_valid_status(experiment.__class__.__name__,
                                  experiment.status,
                                  constants.STATUS_AVAILABLE)
            template = self.engine_api.get_template(context,
                                                    experiment.template_id)
        except exception.NotFound:
            raise exc.HTTPNotFound()
        except exception.InvalidStatus:
            raise

        display_name = dataset.get('display_name')
        display_description = dataset.get('display_description')
        method = dataset.get('method')
        experiment_id = dataset.get('experiment_id')
        source_dataset_url = dataset.get('source_dataset_url')
        params = dataset.get('params')
        swift_tenant = dataset.get('swift_tenant')
        swift_username = dataset.get('swift_username')
        swift_password = dataset.get('swift_password')
        percent_train = dataset.get('percent_train', '0.7')
        percent_test = dataset.get('percent_test', '0.3')

        if (method == 'split'
                and not float(percent_train) + float(percent_test) == 1.0):
            raise exc.HTTPUnprocessableEntity()

        new_dataset = self.engine_api.create_dataset(
            context, display_name, display_description, method,
            source_dataset_url, params, template.id, template.job_template_id,
            experiment_id, experiment.cluster_id, swift_tenant, swift_username,
            swift_password, percent_train, percent_test)

        return self._view_builder.detail(req, new_dataset)
Ejemplo n.º 8
0
    def delete_model_evaluation(self, context, id, force=False):
        """Delete model evaluation."""

        policy.check_policy(context, 'model_evaluation', 'delete')

        model_evaluation = self.db.model_evaluation_get(context, id)

        utils.is_valid_status(model_evaluation.__class__.__name__,
                              model_evaluation['status'],
                              DELETE_VALID_STATUSES)

        if model_evaluation.job_id:
            self.engine_rpcapi\
                .delete_model_evaluation(context,
                                         model_evaluation['cluster_id'],
                                         model_evaluation['job_id'],
                                         id)
        else:
            self.db.model_evaluation_delete(context, id)
Ejemplo n.º 9
0
    def create(self, req, body):
        """Creates a new model evaluation."""
        context = req.environ['meteos.context']

        if not self.is_valid_body(body, 'model_evaluation'):
            raise exc.HTTPUnprocessableEntity()

        model_evaluation = body['model_evaluation']

        LOG.debug("Create model evaluation with request: %s", model_evaluation)

        display_name = model_evaluation.get('display_name')
        model_id = model_evaluation.get('model_id')
        source_dataset_url = model_evaluation.get('source_dataset_url')

        swift_tenant = model_evaluation.get('swift_tenant')
        swift_username = model_evaluation.get('swift_username')
        swift_password = model_evaluation.get('swift_password')

        try:
            model = self.engine_api.get_model(context, model_id)
            utils.is_valid_status(model.__class__.__name__, model.status,
                                  constants.STATUS_AVAILABLE)
            experiment = self.engine_api.get_experiment(
                context, model.experiment_id)
            utils.is_valid_status(experiment.__class__.__name__,
                                  experiment.status,
                                  constants.STATUS_AVAILABLE)
            template = self.engine_api.get_template(context,
                                                    experiment.template_id)
        except exception.NotFound:
            raise exc.HTTPNotFound()
        except exception.InvalidStatus:
            raise

        new_model_evaluation = self.engine_api.create_model_evaluation(
            context, display_name, source_dataset_url, model_id,
            model.model_type, model.dataset_format, template.id,
            template.job_template_id, model.experiment_id,
            experiment.cluster_id, swift_tenant, swift_username,
            swift_password)

        return self._view_builder.detail(req, new_model_evaluation)
Ejemplo n.º 10
0
    def create(self, req, body):
        """Creates a new learning."""
        context = req.environ['meteos.context']

        if not self.is_valid_body(body, 'learning'):
            raise exc.HTTPUnprocessableEntity()

        learning = body['learning']

        LOG.debug("Create learning with request: %s", learning)

        display_name = learning.get('display_name')
        display_description = learning.get('display_description')
        model_id = learning.get('model_id')
        method = learning.get('method')
        args = learning.get('args')

        try:
            model = self.engine_api.get_model(context, model_id)
            utils.is_valid_status(
                model.__class__.__name__, model.status,
                (constants.STATUS_AVAILABLE, constants.STATUS_ACTIVE))
            experiment = self.engine_api.get_experiment(
                context, model.experiment_id)
            utils.is_valid_status(experiment.__class__.__name__,
                                  experiment.status,
                                  constants.STATUS_AVAILABLE)
            template = self.engine_api.get_template(context,
                                                    experiment.template_id)
        except exception.NotFound:
            raise exc.HTTPNotFound()
        except exception.InvalidStatus:
            raise

        new_learning = self.engine_api.create_learning(
            context, display_name, display_description, model.status, model_id,
            method, model.model_type, model.dataset_format, args, template.id,
            template.job_template_id, model.experiment_id,
            experiment.cluster_id)

        return self._view_builder.detail(req, new_learning)
Ejemplo n.º 11
0
    def _recreate(self, req, id, body):
        """Recreate model with new Dataset"""
        context = req.environ['meteos.context']

        if not self.is_valid_body(body, 'os-recreate'):
            raise exc.HTTPUnprocessableEntity()

        b_model = body['os-recreate']

        LOG.debug("Recreate model with request: %s", b_model)

        try:
            model = self.engine_api.get_model(context, id)
            utils.is_valid_status(model.__class__.__name__, model.status,
                                  constants.STATUS_AVAILABLE)
            experiment = self.engine_api.get_experiment(
                context, model.experiment_id)
            template = self.engine_api.get_template(context,
                                                    experiment.template_id)
        except exception.NotFound:
            raise exc.HTTPNotFound()

        display_name = b_model.get('display_name')
        display_description = b_model.get('display_description')
        source_dataset_url = b_model.get('source_dataset_url')
        dataset_format = b_model.get('dataset_format', 'csv')
        model_type = b_model.get('model_type')
        model_params = b_model.get('model_params')
        swift_tenant = b_model.get('swift_tenant')
        swift_username = b_model.get('swift_username')
        swift_password = b_model.get('swift_password')

        new_model = self.engine_api.recreate_model(
            id, context, display_name, display_description, source_dataset_url,
            dataset_format, model_type, model_params, template.id,
            template.job_template_id, experiment.id, experiment.cluster_id,
            swift_tenant, swift_username, swift_password)

        return self._view_builder.detail(req, new_model)
Ejemplo n.º 12
0
    def _load(self, req, id, body):
        """Load model for online prediction"""
        context = req.environ['meteos.context']

        LOG.debug("Load model with request: %s", id)

        try:
            model = self.engine_api.get_model(context, id)
            utils.is_valid_status(model.__class__.__name__, model.status,
                                  constants.STATUS_AVAILABLE)
            experiment = self.engine_api.get_experiment(
                context, model.experiment_id)
            template = self.engine_api.get_template(context,
                                                    experiment.template_id)
        except exception.NotFound:
            raise exc.HTTPNotFound()

        self.engine_api.load_model(context, id, model.dataset_format,
                                   model.model_type, template.job_template_id,
                                   model.experiment_id, model.cluster_id)

        return {'model': {'id': id}}