blob: b081d0c6672159eec95d2def28e47b5216334123 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
'use strict';
const express = require('express');
const _ = require('lodash');
// Fire me up!
const clusters = require('./demo/clusters.json');
const caches = require('./demo/caches.json');
const domains = require('./demo/domains.json');
const igfss = require('./demo/igfss.json');
module.exports = {
implements: 'routes/demo',
inject: ['errors', 'settings', 'mongo', 'services/spaces']
};
/**
*
* @param _
* @param express
* @param errors
* @param settings
* @param mongo
* @param spacesService
* @return {Promise}
*/
module.exports.factory = (errors, settings, mongo, spacesService) => {
return new Promise((factoryResolve) => {
const router = new express.Router();
/**
* Reset demo configuration.
*/
router.post('/reset', (req, res) => {
spacesService.spaces(req.user._id, true)
.then((spaces) => {
const spaceIds = _.map(spaces, '_id');
return spacesService.cleanUp(spaceIds)
.then(() => mongo.Space.remove({_id: {$in: _.tail(spaceIds)}}).exec())
.then(() => _.head(spaces));
})
.catch((err) => {
if (err instanceof errors.MissingResourceException)
return spacesService.createDemoSpace(req.user._id);
throw err;
})
.then((space) => {
return Promise.all(_.map(clusters, (cluster) => {
const clusterDoc = new mongo.Cluster(cluster);
clusterDoc.space = space._id;
return clusterDoc.save();
}));
})
.then((clusterDocs) => {
return _.map(clusterDocs, (cluster) => {
const addCacheToCluster = (cacheDoc) => cluster.caches.push(cacheDoc._id);
const addIgfsToCluster = (igfsDoc) => cluster.igfss.push(igfsDoc._id);
if (cluster.name.endsWith('-caches')) {
const cachePromises = _.map(caches, (cacheData) => {
const cache = new mongo.Cache(cacheData);
cache.space = cluster.space;
cache.clusters.push(cluster._id);
return cache.save()
.then((cacheDoc) => {
const domainData = _.find(domains, (item) =>
item.databaseTable === cacheDoc.name.slice(0, -5).toUpperCase());
if (domainData) {
const domain = new mongo.DomainModel(domainData);
domain.space = cacheDoc.space;
domain.caches.push(cacheDoc._id);
domain.clusters.push(cluster._id);
return domain.save()
.then((domainDoc) => {
cacheDoc.domains.push(domainDoc._id);
cluster.models.push(domainDoc._id);
return cacheDoc.save();
});
}
return cacheDoc;
});
});
return Promise.all(cachePromises)
.then((cacheDocs) => {
_.forEach(cacheDocs, addCacheToCluster);
return cluster.save();
});
}
if (cluster.name.endsWith('-igfs')) {
return Promise.all(_.map(igfss, (igfs) => {
const igfsDoc = new mongo.Igfs(igfs);
igfsDoc.space = cluster.space;
igfsDoc.clusters.push(cluster._id);
return igfsDoc.save();
}))
.then((igfsDocs) => {
_.forEach(igfsDocs, addIgfsToCluster);
return cluster.save();
});
}
});
})
.then(() => res.sendStatus(200))
.catch((err) => res.status(500).send(err.message));
});
factoryResolve(router);
});
};