Exemple #1
0
    app.get('/api/v1/experiment/', function(req, res) {
        Experiment.find({}, function(err, doc) {
            if (err) {
                return res
                    .status(500)
                    .json({
                        'message': err
                    });
            }

            if (!doc) {
                return res
                    .status(404)
                    .json({
                        message: 'No such experiment'
                    });
            }

            var docs = [];

            for (var i in doc) {
                docs.push(filterExperimentFields(doc[i]));
            }

            return res.status(200).json(docs);
        });
    });
Exemple #2
0
    app.get('/api/v1/experiment/:expId/model', function(req, res) {
        Experiment.findById(req.params.expId, function(err, doc) {
            if (err) {
                return res
                    .status(500)
                    .json({
                        'message': err
                    });
            }

            if (!doc) {
                return res
                    .status(404)
                    .json({
                        message: 'No such experiment'
                    });
            }

            var models = [];

            for (var i in doc.models) {
                models.push(filterModelFields(doc.models[i]));
            }

            return res.status(200).json(models);
        });
    });
Exemple #3
0
    app.get('/api/v1/experiment/:expId/model/:mId', function(req, res) {
        Experiment.findById(req.params.expId, function(err, doc) {
            if (err) {
                return res
                    .status(500)
                    .json({
                        'message': err
                    });
            }

            if (!doc) {
                return res
                    .status(404)
                    .json({
                        message: 'No such experiment'
                    });
            }

            for (i in doc.models) {
                if (doc.models[i]._id == req.params.mId) {
                    return res.status(200).json(filterModelFields(doc.models[i]));
                }
            }

            return res
                .status(404)
                .json({
                    message: 'No such model'
                });
        });
    });
Exemple #4
0
    app.delete('/api/v1/experiment/:expId', function(req, res) {
        Experiment.findById(req.params.expId, function(err, doc) {
            if (err) {
                return res.status(500).json({
                        'message': err.message
                    });
            }

            if (!doc) {
                return res.status(404).json({
                        'message': 'No such experiment'
                    });
            }

            doc.remove(function(err, _doc) {
                if (err) {
                    return res.status(500).json({
                        'message': err.message
                    });
                }

                io.emit('experiment-removed', {
                    '_id': req.params.expId,
                    'data': doc
                });

                return res.status(200).json({
                    'message': 'Model removed',
                    'doc': filterExperimentFields(_doc)
                });
            });
        });
    });
Exemple #5
0
 socket.on('fetch-experiment', function(id) {
     Experiment.findOne({
         '_id': id
     }, function(err, doc) {
         socket.emit('fetch-experiment-result', doc);
     });
 });
Exemple #6
0
    app.put('/api/v1/experiment/:expId/model/:mId', function(req, res) {
        Experiment.findById(req.params.expId, function(err, doc) {
            var model = false;

            if (err) {
                return res
                    .status(500)
                    .json({
                        'message': err
                    });
            }

            if (!doc) {
                return res
                    .status(404)
                    .json({
                        message: 'No such experiment'
                    });
            }

            for (i in doc.models) {
                if (doc.models[i]._id == req.params.mId) {
                    model = true;
                    break;
                }
            }

            if (model) {
                if (req.body.name) {
                    doc.models[i].name = req.body.name;
                }

                if (req.body.description) {
                    doc.models[i].description = req.body.description;
                }

                if (req.body.hyperparameter) {
                    doc.models[i].hyperparameter = req.body.hyperparameter;
                }

                io.emit('model-updated', {
                    'experiment_id': req.params.expId,
                    '_id': req.params.mId,
                    'data': doc.models[i]
                });

                doc.save(function(err, _doc) {
                    return res.status(200).json(filterModelFields(_doc.models[i]));
                });
            } else {
                return res
                    .status(404)
                    .json({
                        message: 'No such model'
                    });
            }
        });
    });
Exemple #7
0
 socket.on('fetch-model', function(data) {
     Experiment.findOne({
         '_id': data.experiment_id
     }, function(err, doc) {
         for (var i = 0; i < doc.models.length; i++) {
             if (doc.models[i]._id == data.model_id) {
                 socket.emit('fetch-model-result', doc.models[i]);
             }
         }
     });
 });
Exemple #8
0
    app.post('/api/v1/experiment/', function(req, res) {
        var exp = new Experiment({
            'name': req.body.name || haikunator.haikunate(),
            'description': req.body.description || "No description given"
        });

        exp.save(function(err, doc) {
            io.emit('experiment-added', {
                'data': doc
            });

            if (err) {
                return res
                    .status(500)
                    .json({
                        'message': err
                    });
            }

            return res
                .status(201)
                .json(filterExperimentFields(doc));
        });
    });
Exemple #9
0
    app.get('/api/v1/experiment/:expId/model/:mId/measurements/forname/:name', function(req, res) {
        Experiment.findOne({
            '_id': req.params.expId,
            'models._id': req.params.mId
        }, function(err, doc) {
            var out = {},
                model = null,
                dataPoints = [];

            if (err) {
                return res
                    .status(500)
                    .json({
                        'message': err
                    });
            }

            if (!doc) {
                return res
                    .status(404)
                    .json({
                        message: 'No such experiment'
                    });
            }

            for (i in doc.models) {
                if (doc.models[i]._id == req.params.mId) {
                    model = doc.models[i];
                    break;
                }
            }

            if (model) {
                for (i in model.measurements) {
                    if (model.measurements[i].name == req.params.name) {
                        dataPoints.push(filterMeasurementFields(model.measurements[i]));
                    }
                }

                return res.status(200).json(dataPoints);
            } else {
                return res.status(404).json({
                    'message': 'No such model'
                });
            }
        });

    });
Exemple #10
0
    app.delete('/api/v1/experiment/:expId/model/:mId', function(req, res) {
        Experiment.findById(req.params.expId, function(err, doc) {
            var model = false;

            if (err) {
                return res
                    .status(500)
                    .json({
                        'message': err
                    });
            }

            if (!doc) {
                return res
                    .status(404)
                    .json({
                        message: 'No such experiment'
                    });
            }

            for (i in doc.models) {
                if (doc.models[i]._id == req.params.mId) {
                    model = doc.models[i];
                    doc.models.pull(model);
                    break;
                }
            }

            if (model) {
                io.emit('model-removed', {
                    'experiment_id': doc._id,
                    '_id': req.params.mId,
                    'data': doc
                });

                doc.save(function(err, _doc) {
                    return res.status(200).json(filterModelFields(model));
                });
            } else {
                return res
                    .status(404)
                    .json({
                        message: 'No such model'
                    });
            }
        });
    });
Exemple #11
0
    app.get('/api/v1/experiment/:expId/model/:mId/measurements', function(req, res) {
        Experiment.findOne({
            '_id': req.params.expId,
            'models._id': req.params.mId
        }, function(err, doc) {
            var out = {},
                model = null;

            if (err) {
                return res
                    .status(500)
                    .json({
                        'message': err
                    });
            }

            if (!doc) {
                return res
                    .status(404)
                    .json({
                        'message': 'No such experiment'
                    });
            }

            for (i in doc.models) {
                if (doc.models[i]._id == req.params.mId) {
                    model = doc.models[i];
                    break;
                }
            }

            var measurements = [];

            for (i in model.measurements) {
                measurements.push(model.measurements)
            }

            if (model) {
                return res.status(200).json(measurements);
            } else {
                return res.status(404).json({
                    'message': 'No such model'
                });
            }
        });
    });
Exemple #12
0
    app.put('/api/v1/experiment/:expId', function(req, res) {
        Experiment.findById(req.params.expId, function(err, doc) {
            if (err) {
                return res
                    .status(500)
                    .json({
                        'message': err
                    });
            }

            if (!doc) {
                return res
                    .status(404)
                    .json({
                        message: 'No such experiment'
                    });
            }

            if (req.body.description) {
                doc.description = req.body.description;
            }

            if (req.body.name) {
                doc.name = req.body.name;
            }

            if (req.body.hyperparameter) {
                doc.hyperparameter = req.body.hyperparameter;
            }

            doc.save(function(err, _doc) {
                if (err) {
                    return res.status(500).json({
                        'message': err.message
                    });
                }

                io.emit('experiment-updated',{
                        '_id': req.params.expId,
                        'data': doc
                    });

                return res.status(200).json(filterExperimentFields(_doc));
            });
        });
    });
Exemple #13
0
    app.get('/api/v1/experiment/:expId', function(req, res) {
        Experiment.findById(req.params.expId, function(err, doc) {
            if (err) {
                return res
                    .status(500)
                    .json({
                        'message': err
                    });
            }

            if (!doc) {
                return res
                    .status(404)
                    .json({
                        message: 'No such experiment'
                    });
            }

            return res.status(200).json(filterExperimentFields(doc));
        });
    });
Exemple #14
0
    app.post('/api/v1/experiment/:expId/model/', function(req, res) {
        Experiment.findById(req.params.expId, function(err, doc) {
            if (err) {
                return res.status(500).json({
                        'message': err.message
                    });
            }

            if (!doc) {
                return res.status(404).json({
                        message: 'No such experiment'
                    });
            }

            var model = doc.models.create({
                'name': req.body.name || haikunator.haikunate(),
                'description': req.body.description,
                'hyperparameter': req.body.hyperparameter
            });

            doc.models.push(model);

            doc.save(function(err, _doc) {
                if (err) {
                    return res
                        .status(500)
                        .json({
                            'message': err
                        });
                }

                io.emit('model-added', {
                    'experiment_id': doc._id,
                    'data': model
                });

                return res.status(201).json(filterModelFields(model));
            });
        });
    });
Exemple #15
0
    io.on('connection', function(socket) {
        // Send all the experiments
        Experiment.find({}).sort('date_added').exec(function(err, docs) {
            if (!err) {
                //  we use experiment-added to populate the experiment
                // list initially. quite hacky.
                for (var i = 0; i < docs.length; i ++) {
                    socket.emit('experiment-added', {
                        'data': docs[i],
                        '_id': docs[i]._id
                    });
                }
            } else {
                console.log(err);
            }
        });

        socket.on('fetch-experiment', function(id) {
            Experiment.findOne({
                '_id': id
            }, function(err, doc) {
                socket.emit('fetch-experiment-result', doc);
            });
        });

        socket.on('fetch-model', function(data) {
            Experiment.findOne({
                '_id': data.experiment_id
            }, function(err, doc) {
                for (var i = 0; i < doc.models.length; i++) {
                    if (doc.models[i]._id == data.model_id) {
                        socket.emit('fetch-model-result', doc.models[i]);
                    }
                }
            });
        });
    });
Exemple #16
0
    app.post('/api/v1/experiment/:expId/model/:mId/measurements', function(req, res) {
        Experiment.findOne({
            '_id': req.params.expId,
            'models._id': req.params.mId
        }, function(err, doc) {
            var model = null;

            if (err) {
                return res
                    .status(500)
                    .json({
                        'message': err
                    });
            }

            if (!doc) {
                return res
                    .status(404)
                    .json({
                        message: 'No such experiment'
                    });
            }

            if (!req.body.name && !req.body.value) {
                return res.status(400).json({
                    'message': 'Missing mandatory fields (name, value)'
                });
            }

            for (i in doc.models) {
                if (doc.models[i]._id == req.params.mId) {
                    model = doc.models[i];
                    break;
                }
            }

            if (model) {
                var measurement = model.measurements.create({
                        'name': req.body.name,
                        'step': req.body.step || null,
                        'epoch': req.body.epoch || null,
                        'value': req.body.value
                    });

                doc.models[i].measurements.push(measurement);

                doc.save(function(err, doc) {
                    if (err) {
                        return res
                            .status(500)
                            .json({
                                'message': err
                            });
                    }

                    io.emit('measurement-added', {
                        'experiment_id': doc._id,
                        'model_id': doc.models[i]._id,
                        'data': measurement,
                        'name': req.body.name
                    });

                    return res.status(201).json(filterMeasurementFields(measurement));
                });
            } else {
                return res
                    .status(404)
                    .json({
                        message: 'No such model'
                    });
            }
        });
    });