Moving stuff to more modern JS
1 files added
19 files modified
| | |
| | | 'use strict'; |
| | | |
| | | module.exports = function (grunt) { |
| | | var localConfig; |
| | | let localConfig; |
| | | try { |
| | | localConfig = require('./server/config/local.env'); |
| | | } catch(e) { |
| | |
| | | // Empties folders to start fresh |
| | | clean: { |
| | | server: '.tmp', |
| | | karmareports: 'reports/client/karma/**', |
| | | mochareports: 'reports/server/mocha/**', |
| | | lint: 'reports/{server,client}/jshint/**', |
| | | coverage: 'reports/{server,client}/coverage/**' |
| | | }, |
| | | |
| | | // Debugging with node inspector |
| | | 'node-inspector': { |
| | | custom: { |
| | | options: { |
| | | 'web-host': 'localhost' |
| | | } |
| | | } |
| | | lint: 'reports/{server}/jshint/**', |
| | | coverage: 'reports/{server}/coverage/**' |
| | | }, |
| | | |
| | | // Use nodemon to run server in debug mode with an initial breakpoint |
| | |
| | | debug: { |
| | | tasks: [ |
| | | 'nodemon', |
| | | 'node-inspector' |
| | | ], |
| | | options: { |
| | | logConcurrentOutput: true |
| | |
| | | grunt.registerTask('wait', function () { |
| | | grunt.log.ok('Waiting for server reload...'); |
| | | |
| | | var done = this.async(); |
| | | const done = this.async(); |
| | | |
| | | setTimeout(function () { |
| | | grunt.log.writeln('Done waiting!'); |
| | |
| | | }); |
| | | |
| | | grunt.registerTask('build-image', 'Build the image', function(imageId) { |
| | | var shell = require("shelljs"); |
| | | const shell = require("shelljs"); |
| | | grunt.log.ok('BUILDING IMAGE'); |
| | | if (!imageId) { |
| | | grunt.fail.warn('must supply an imageId to build'); |
| | | } |
| | | var rc = shell.exec('docker build -t todolist:' + imageId + ' -f ./dist/Dockerfile ./dist').code; |
| | | const rc = shell.exec('docker build -t todolist:' + imageId + ' -f ./dist/Dockerfile ./dist').code; |
| | | if (rc > 0){ |
| | | grunt.fail.warn("DOCKER FAILURE") |
| | | } |
| | |
| | | |
| | | grunt.registerTask('deploy', 'deploy the node js app to a docker container and start it in the correct mode', function(target_env, build_tag) { |
| | | grunt.log.ok('this task must run on a host that has the Docker Daemon running on it'); |
| | | var ports = { |
| | | const ports = { |
| | | ci: '9001', |
| | | si: '9002', |
| | | production: '80' |
| | |
| | | if (target_env === undefined || build_tag === undefined){ |
| | | grunt.fail.warn('Required param not set - use grunt deploy\:\<target\>\:\<tag\>'); |
| | | } else { |
| | | var shell = require("shelljs"); |
| | | const shell = require("shelljs"); |
| | | grunt.log.ok('STOPPING AND REMOVING EXISTING CONTAINERS'); |
| | | shell.exec('docker stop todolist-'+ target_env + ' && docker rm todolist-'+ target_env); |
| | | |
| | | grunt.log.ok('DEPLOYING ' + target_env + ' CONTAINER'); |
| | | if (target_env === 'ci'){ |
| | | var rc = shell.exec('docker run -t -d --name todolist-' + target_env + ' -p ' + ports[target_env]+ ':'+ports[target_env]+' --env NODE_ENV=' + target_env + ' todolist:' + build_tag); |
| | | const rc = shell.exec('docker run -t -d --name todolist-' + target_env + ' -p ' + ports[target_env]+ ':'+ports[target_env]+' --env NODE_ENV=' + target_env + ' todolist:' + build_tag); |
| | | if (rc > 0){ |
| | | grunt.fail.warn("DOCKER FAILURE") |
| | | } |
| | | } else { |
| | | // ensure mongo is up |
| | | var isMongo = shell.exec('docker ps | grep devops-mongo').code; |
| | | const isMongo = shell.exec('docker ps | grep devops-mongo').code; |
| | | if (isMongo > 0){ |
| | | grunt.log.ok('DEPLOYING Mongodb CONTAINER FIRST'); |
| | | shell.exec('docker run --name devops-mongo -p 27017:27017 -d mongo'); |
| | | } |
| | | var rc = shell.exec('docker run -t -d --name todolist-' + target_env + ' --link devops-mongo:mongo.server -p ' |
| | | const rc = shell.exec('docker run -t -d --name todolist-' + target_env + ' --link devops-mongo:mongo.server -p ' |
| | | + ports[target_env]+ ':' + ports[target_env] + ' --env NODE_ENV=' + target_env + ' todolist:' + build_tag).code; |
| | | if (rc > 0){ |
| | | grunt.fail.warn("DOCKER FAILURE"); |
| | |
| | | |
| | | grunt.registerTask('serve', function (target) { |
| | | if (target === 'dist') { |
| | | return grunt.task.run(['build', 'env:all', 'env:prod', 'express:prod', 'wait', 'open', 'express-keepalive']); |
| | | return grunt.task.run(['build', 'env:all', 'env:prod', 'express:prod', 'wait', 'express-keepalive']); |
| | | } |
| | | |
| | | if (target === 'debug') { |
| | |
| | | 'env:' + (target || 'dev'), |
| | | 'express:dev', |
| | | 'wait', |
| | | 'open', |
| | | 'watch' |
| | | 'express-keepalive' |
| | | ]); |
| | | }); |
| | | |
| | | grunt.registerTask('test', function(target, environ) { |
| | | environ = environ !== undefined ? environ : 'test'; |
| | | var usePhantom = false; |
| | | const usePhantom = false; |
| | | if (environ === 'phantom') { |
| | | environ = 'test'; |
| | | usePhantom = true; |
| | | } |
| | | var reporter = 'terminal'; |
| | | var coverage = 'travis'; |
| | | const reporter = 'terminal'; |
| | | const coverage = 'travis'; |
| | | if (target === 'server-jenkins') { |
| | | target = 'server'; |
| | | reporter = 'junit'; |
New file |
| | |
| | | <!doctype html> |
| | | <html lang=en> |
| | | |
| | | <head> |
| | | <meta charset=utf-8> |
| | | <title>todolist-api</title> |
| | | </head> |
| | | |
| | | <body> |
| | | <p>I am alive</p> |
| | | </body> |
| | | |
| | | </html> |
| | |
| | | "version": "1.0.0", |
| | | "main": "server/app.js", |
| | | "dependencies": { |
| | | "bench-rest": "^1.2.4", |
| | | "body-parser": "1.18.2", |
| | | "composable-middleware": "0.3.0", |
| | | "compression": "1.7.2", |
| | |
| | | "grunt-express-server": "0.5.4", |
| | | "grunt-mocha-test": "0.13.3", |
| | | "grunt-newer": "1.3.0", |
| | | "grunt-node-inspector": "1.0.0", |
| | | "grunt-nodemon": "0.4.2", |
| | | "grunt-open": "0.2.3", |
| | | "grunt-rev": "0.1.0", |
| | |
| | | }, |
| | | "scripts": { |
| | | "start": "node server/app.js", |
| | | "test": "grunt test" |
| | | "test": "grunt test", |
| | | "dev": "./node_modules/.bin/grunt serve" |
| | | }, |
| | | "private": true |
| | | } |
| | |
| | | 'use strict'; |
| | | |
| | | var express = require('express'); |
| | | const express = require('express'); |
| | | |
| | | var router = express.Router(); |
| | | const router = express.Router(); |
| | | |
| | | var controller = require('./todo.controller'); |
| | | const controller = require('./todo.controller'); |
| | | |
| | | router.get('/', controller.index); |
| | | router.get('/:id', controller.show); |
| | |
| | | 'use strict'; |
| | | |
| | | var _ = require('lodash'); |
| | | var Todo = require('./todo.model'); |
| | | const _ = require('lodash'); |
| | | const Todo = require('./todo.model'); |
| | | |
| | | // Get list of todos |
| | | exports.index = function(req, res) { |
| | | var biscuits; |
| | | let biscuits; |
| | | Todo.find(function (err, todos) { |
| | | if(err) { return handleError(res, err); } |
| | | return res.status(200).json(todos); |
| | |
| | | Todo.findById(req.params.id.toString(), function (err, todo) { |
| | | if (err) { return handleError(res, err); } |
| | | if(!todo) { return res.status(404).send('Not Found'); } |
| | | var updated = _.merge(todo, req.body); |
| | | const updated = _.merge(todo, req.body); |
| | | updated.save(function (err) { |
| | | if (err) { return handleError(res, err); } |
| | | return res.status(200).json(todo); |
| | |
| | | 'use strict'; |
| | | |
| | | var mongoose = require('mongoose'), |
| | | const mongoose = require('mongoose'), |
| | | Schema = mongoose.Schema; |
| | | |
| | | var TodoSchema = new Schema({ |
| | | const TodoSchema = new Schema({ |
| | | title: String, |
| | | completed: Boolean |
| | | }); |
| | |
| | | 'use strict'; |
| | | |
| | | var app = require('../../app'); |
| | | var request = require('supertest'); |
| | | const app = require('../../app'); |
| | | const request = require('supertest'); |
| | | require('should'); |
| | | |
| | | describe('GET /api/todos', function() { |
| | |
| | | }); |
| | | |
| | | describe('GET /api/todos/:id', function() { |
| | | var todoId; |
| | | const todoId; |
| | | beforeEach(function createObjectToUpdate(done) { |
| | | request(app) |
| | | .post('/api/todos') |
| | |
| | | }); |
| | | |
| | | describe('PUT /api/todos/:id', function() { |
| | | var todoId; |
| | | const todoId; |
| | | beforeEach(function createObjectToUpdate(done){ |
| | | request(app) |
| | | .post('/api/todos') |
| | |
| | | }); |
| | | |
| | | describe('DELETE /api/todos/:id', function() { |
| | | var todoId; |
| | | const todoId; |
| | | beforeEach(function createObjectToUpdate(done){ |
| | | request(app) |
| | | .post('/api/todos') |
| | |
| | | // Set default node environment to development |
| | | process.env.NODE_ENV = process.env.NODE_ENV || 'development'; |
| | | |
| | | var express = require('express'); |
| | | var config = require('./config/environment'); |
| | | const express = require('express'); |
| | | const config = require('./config/environment'); |
| | | |
| | | |
| | | |
| | |
| | | if(config.seedDB) { require('./config/seed'); } |
| | | |
| | | // Setup server |
| | | var app = express(); |
| | | var server = require('http').createServer(app); |
| | | const app = express(); |
| | | const server = require('http').createServer(app); |
| | | require('./config/express')(app); |
| | | |
| | | if (config.mocks && config.mocks.api) { |
| | | //add stubs |
| | | require('./mocks/mock-routes')(app); |
| | | } else { |
| | | var mongoose = require('mongoose'); |
| | | const mongoose = require('mongoose'); |
| | | // Connect to database |
| | | mongoose.connect(config.mongo.uri, config.mongo.options); |
| | | mongoose.connection.on('error', function(err) { |
| | |
| | | 'use strict'; |
| | | |
| | | module.exports[404] = function pageNotFound(req, res) { |
| | | var viewFilePath = '404'; |
| | | var statusCode = 404; |
| | | var result = { |
| | | const viewFilePath = '404'; |
| | | const statusCode = 404; |
| | | const result = { |
| | | status: statusCode |
| | | }; |
| | | |
| | |
| | | uri: 'mongodb://mongo.server/todolist-dev' |
| | | }, |
| | | mocks: { |
| | | api: true |
| | | // enable this for non mock api |
| | | // api: true |
| | | api: false |
| | | }, |
| | | seedDB: true |
| | | }; |
| | |
| | | 'use strict'; |
| | | |
| | | var path = require('path'); |
| | | var _ = require('lodash'); |
| | | const path = require('path'); |
| | | const _ = require('lodash'); |
| | | |
| | | var config; |
| | | let config; |
| | | // All configurations will extend these options |
| | | // ============================================ |
| | | var all = { |
| | | const all = { |
| | | env: process.env.NODE_ENV, |
| | | |
| | | // Root path of server |
| | |
| | | |
| | | 'use strict'; |
| | | |
| | | var express = require('express'); |
| | | var morgan = require('morgan'); |
| | | var compression = require('compression'); |
| | | var bodyParser = require('body-parser'); |
| | | var methodOverride = require('method-override'); |
| | | var cookieParser = require('cookie-parser'); |
| | | var errorHandler = require('errorhandler'); |
| | | var path = require('path'); |
| | | var config = require('./environment'); |
| | | var passport = require('passport'); |
| | | const express = require('express'); |
| | | const morgan = require('morgan'); |
| | | const compression = require('compression'); |
| | | const bodyParser = require('body-parser'); |
| | | const methodOverride = require('method-override'); |
| | | const cookieParser = require('cookie-parser'); |
| | | const errorHandler = require('errorhandler'); |
| | | const path = require('path'); |
| | | const config = require('./environment'); |
| | | |
| | | module.exports = function(app) { |
| | | var env = app.get('env'); |
| | | const env = app.get('env'); |
| | | |
| | | app.set('views', config.root + '/server/views'); |
| | | app.engine('html', require('ejs').renderFile); |
| | |
| | | app.use(bodyParser.json()); |
| | | app.use(methodOverride()); |
| | | app.use(cookieParser()); |
| | | app.use(passport.initialize()); |
| | | if ('production' === env || 'si' === env || 'ci' === env) { |
| | | app.use(express.static(path.join(config.root, 'public'))); |
| | | app.set('appPath', path.join(config.root, 'public')); |
| | |
| | | |
| | | 'use strict'; |
| | | |
| | | var Todo = require('../api/todo/todo.model'); |
| | | const Todo = require('../api/todo/todo.model'); |
| | | |
| | | Todo.find({}).remove(function() { |
| | | Todo.create({ |
| | |
| | | |
| | | 'use strict'; |
| | | |
| | | var express = require('express'); |
| | | const express = require('express'); |
| | | |
| | | var routerStub = express.Router(); |
| | | const routerStub = express.Router(); |
| | | |
| | | function mockMongoId() { |
| | | function s4() { |
| | |
| | | |
| | | routerStub.get('/todos/:id', function (req, res) { |
| | | setTimeout(function () { |
| | | var id = req.params.id; |
| | | const id = req.params.id; |
| | | return res.status(200).send({ |
| | | "title": "Learn some stuff about Jenkins", "_id": id, "completed": true |
| | | }); |
| | |
| | | 'use strict'; |
| | | |
| | | var app = require('../app'); |
| | | var request = require('supertest'); |
| | | const app = require('../app'); |
| | | const request = require('supertest'); |
| | | require('should'); |
| | | |
| | | describe('GET /api/todos', function() { |
| | |
| | | }); |
| | | |
| | | describe('GET /api/todos/:id', function() { |
| | | var todoId; |
| | | const todoId; |
| | | beforeEach(function createObjectToUpdate(done) { |
| | | request(app) |
| | | .post('/api/todos') |
| | |
| | | }); |
| | | |
| | | describe('PUT /api/todos/:id', function() { |
| | | var todoId; |
| | | const todoId; |
| | | beforeEach(function createObjectToUpdate(done){ |
| | | request(app) |
| | | .post('/api/todos') |
| | |
| | | }); |
| | | |
| | | describe('DELETE /api/todos/:id', function() { |
| | | var todoId; |
| | | const todoId; |
| | | beforeEach(function createObjectToUpdate(done){ |
| | | request(app) |
| | | .post('/api/todos') |
| | |
| | | |
| | | 'use strict'; |
| | | |
| | | var errors = require('./components/errors'); |
| | | var path = require('path'); |
| | | const errors = require('./components/errors'); |
| | | const path = require('path'); |
| | | |
| | | module.exports = function(app) { |
| | | |
| | |
| | | <li>an out-of-date link</li> |
| | | </ul> |
| | | <script> |
| | | var GOOG_FIXURL_LANG = (navigator.language || '').slice(0,2),GOOG_FIXURL_SITE = location.host; |
| | | const GOOG_FIXURL_LANG = (navigator.language || '').slice(0,2),GOOG_FIXURL_SITE = location.host; |
| | | </script> |
| | | <script src="//linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js"></script> |
| | | </div> |
| | |
| | | /** |
| | | * Created by donal on 19/08/2016. |
| | | */ |
| | | var path = require('path'); |
| | | var srcDir = path.join(__dirname, '..', 'server'); |
| | | const path = require('path'); |
| | | const srcDir = path.join(__dirname, '..', 'server'); |
| | | |
| | | // included as in the instructions here |
| | | // https://github.com/pghalliday/grunt-mocha-test#generating-coverage-reports |
| | |
| | | var request = require('request'); |
| | | var benchrest = require('bench-rest'); |
| | | var grunt = require("grunt"); |
| | | var Q = require('q'); |
| | | const request = require('request'); |
| | | const benchrest = require('bench-rest'); |
| | | const grunt = require("grunt"); |
| | | const Q = require('q'); |
| | | |
| | | |
| | | // INFO ABOUT THE STATS |
| | |
| | | // stats.main.histogram.mean - the average time any iteration took (milliseconds) |
| | | // stats.main.histogram.p95 - the amount of time that 95% of all iterations completed within (milliseconds) |
| | | |
| | | var options = { |
| | | const options = { |
| | | limit: 10, // concurrent connections |
| | | iterations: 10000 // number of iterations to perform |
| | | }; |
| | | var test = { |
| | | const test = { |
| | | domain : 'http://localhost:9000', |
| | | dir : './reports/server/perf/', |
| | | route : '/api/todos/', |
| | | nfr : 60 |
| | | }; |
| | | var si = { |
| | | const si = { |
| | | domain : 'http://localhost:9002', |
| | | dir : './reports/server/perf/', |
| | | route : '/api/todos/', |
| | | nfr : 60 |
| | | }; |
| | | var production = { |
| | | const production = { |
| | | domain : 'http://localhost:80', |
| | | dir : './reports/server/perf/', |
| | | route : '/api/todos/', |
| | | nfr : 50 |
| | | }; |
| | | |
| | | var test_endpoint = function (flow, options) { |
| | | var wait = Q.defer(); |
| | | const test_endpoint = function (flow, options) { |
| | | const wait = Q.defer(); |
| | | |
| | | benchrest(flow, options) |
| | | .on('error', function (err, ctxName) { |
| | |
| | | console.log('\n\n###### ' +flow.filename +' - ' +flow.env.domain + flow.env.route); |
| | | console.log('Error Count', errorCount); |
| | | console.log('Stats', stats); |
| | | var mean_score = stats.main.histogram.mean; |
| | | var fs = require('fs-extra'); |
| | | var file = flow.env.dir + flow.filename + '-perf-score.csv'; |
| | | const mean_score = stats.main.histogram.mean; |
| | | const fs = require('fs-extra'); |
| | | const file = flow.env.dir + flow.filename + '-perf-score.csv'; |
| | | fs.outputFileSync(file, 'mean,max,mix,p95\n'+ stats.main.histogram.mean +',' |
| | | + stats.main.histogram.max +','+ stats.main.histogram.min +','+ stats.main.histogram.p95); |
| | | if (mean_score > flow.env.nfr){ |
| | |
| | | if (target === undefined || api === undefined){ |
| | | grunt.fail.fatal('Required param not set - use grunt perf-test\:\<target\>\:\<api\>'); |
| | | } else { |
| | | var done = this.async(); |
| | | var create = { |
| | | const done = this.async(); |
| | | const create = { |
| | | filename: 'create', |
| | | env: {}, |
| | | main: [{ |
| | |
| | | }] |
| | | }; |
| | | |
| | | var show = { |
| | | const show = { |
| | | filename: 'show', |
| | | env: {}, |
| | | main: [{ |
| | |
| | | grunt.log.ok("Perf tests running against " + target); |
| | | grunt.log.ok("This may take some time .... "); |
| | | |
| | | var all_tests = []; |
| | | const all_tests = []; |
| | | |
| | | // console.log(create) |
| | | // console.log(show) |
| | |
| | | all_tests.push(test_endpoint(create, options)); |
| | | } |
| | | else { |
| | | var mongoid = JSON.parse(body)[0]._id; |
| | | const mongoid = JSON.parse(body)[0]._id; |
| | | show.main[0].get = si.domain + si.route + mongoid; |
| | | all_tests.push(test_endpoint(show, options)); |
| | | } |