mirror of
https://github.com/docker-training/node-bulletin-board.git
synced 2026-01-12 02:26:42 +08:00
App v1 - memory storage
This commit is contained in:
@@ -7,6 +7,4 @@ RUN npm install
|
||||
EXPOSE 8080
|
||||
CMD [ "npm", "start" ]
|
||||
|
||||
COPY . .
|
||||
|
||||
HEALTHCHECK CMD curl --fail http://localhost:8080 || exit 1
|
||||
COPY . .
|
||||
@@ -1,43 +1,9 @@
|
||||
var db = require('./db.js');
|
||||
var events = require('./events.js');
|
||||
|
||||
exports.events = function (req, res) {
|
||||
console.log('Loading DB events...');
|
||||
db.Events
|
||||
.findAll()
|
||||
.then(events => {
|
||||
console.log('Fetched events, count: ' + events.length);
|
||||
res.json(events);
|
||||
})
|
||||
.catch(err => {
|
||||
console.error('** Fetch failed: ', err);
|
||||
});
|
||||
res.json(events);
|
||||
};
|
||||
|
||||
exports.event = function (req, res) {
|
||||
console.log('Handling event call, method: ' + req.method + ', event ID: ' + req.params.eventId)
|
||||
switch(req.method) {
|
||||
case "DELETE":
|
||||
db.Events
|
||||
.destroy({
|
||||
where: {
|
||||
id: req.params.eventId
|
||||
}
|
||||
}).then(function() {
|
||||
console.log('Deleted event with id: ' + req.params.eventId)
|
||||
res.status(200).end();
|
||||
});
|
||||
break
|
||||
case "POST":
|
||||
db.Events
|
||||
.create({
|
||||
title: req.body.title,
|
||||
detail: req.body.detail,
|
||||
date: req.body.date
|
||||
})
|
||||
.then(function() {
|
||||
res.send('{}');
|
||||
res.status(201).end();
|
||||
});
|
||||
break
|
||||
}
|
||||
res.json(events[req.param.eventId]);
|
||||
};
|
||||
@@ -1,34 +0,0 @@
|
||||
var Sequelize = require('sequelize');
|
||||
var username = 'sa';
|
||||
var password = 'DockerCon!!!';
|
||||
var host = 'bb-db';
|
||||
var dbName = 'BulletinBoard';
|
||||
|
||||
var sequelize = new Sequelize(dbName, username, password, {
|
||||
dialect: 'mssql',
|
||||
host: host,
|
||||
port: 1433,
|
||||
dialectOptions: {
|
||||
requestTimeout: 30000
|
||||
}
|
||||
});
|
||||
|
||||
sequelize
|
||||
.authenticate()
|
||||
.then(() => {
|
||||
console.log('Successful connection to SQL Server.');
|
||||
})
|
||||
.catch(err => {
|
||||
console.error('** SQL Server connection failed: ', err);
|
||||
process.exit(1);
|
||||
});
|
||||
|
||||
var Event = sequelize.define('event', {
|
||||
title: Sequelize.STRING,
|
||||
detail: Sequelize.STRING,
|
||||
date: Sequelize.DATE
|
||||
});
|
||||
|
||||
Event.sync();
|
||||
|
||||
exports.Events = Event;
|
||||
19
bulletin-board-app/backend/events.js
Normal file
19
bulletin-board-app/backend/events.js
Normal file
@@ -0,0 +1,19 @@
|
||||
module.exports = [
|
||||
{
|
||||
id: 1,
|
||||
title: 'Docker Workshop',
|
||||
detail: 'Linuxing in Lonodon ',
|
||||
date: '2017-11-21'
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
title: 'WinOps #17',
|
||||
detail: 'WinOps London',
|
||||
date: '2017-11-21'
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
title: 'Docker London',
|
||||
date: '2017-11-13'
|
||||
}
|
||||
];
|
||||
@@ -11,10 +11,7 @@
|
||||
"express": "^4.13.3",
|
||||
"morgan": "^1.6.1",
|
||||
"vue": "^1.0.10",
|
||||
"vue-resource": "^0.1.17",
|
||||
"tedious": "^2.0.1",
|
||||
"sequelize": "^4.20.1",
|
||||
"prom-client": "^10.2.2"
|
||||
"vue-resource": "^0.1.17"
|
||||
},
|
||||
"devDependencies": {
|
||||
"body-parser": "^1.14.1",
|
||||
|
||||
@@ -3,7 +3,6 @@ var express = require('express'),
|
||||
methodOverride = require('method-override'),
|
||||
errorHandler = require('errorhandler'),
|
||||
morgan = require('morgan'),
|
||||
prometheus = require('prom-client'),
|
||||
routes = require('./backend'),
|
||||
api = require('./backend/api');
|
||||
|
||||
@@ -30,42 +29,10 @@ if ('production' == app.get('env')) {
|
||||
app.use(errorHandler());
|
||||
}
|
||||
|
||||
// counter for Prometheus:
|
||||
const httpRequestDurationMicroseconds = new prometheus.Histogram({
|
||||
name: 'http_request_duration_ms',
|
||||
help: 'Duration of HTTP requests in ms',
|
||||
labelNames: ['method', 'route', 'code'],
|
||||
buckets: [0.10, 5, 15, 50, 100, 200, 300, 400, 500] // buckets for response time from 0.1ms to 500ms
|
||||
})
|
||||
|
||||
// record timestamp before request handler:
|
||||
app.use((req, res, next) => {
|
||||
res.locals.startEpoch = Date.now()
|
||||
next()
|
||||
})
|
||||
|
||||
app.get('/', routes.index);
|
||||
app.get('/api/events', api.events);
|
||||
app.post('/api/events', api.event);
|
||||
app.delete('/api/events/:eventId', api.event);
|
||||
|
||||
app.get('/metrics', (req, res) => {
|
||||
res.set('Content-Type', prometheus.register.contentType)
|
||||
res.end(prometheus.register.metrics())
|
||||
})
|
||||
|
||||
// set response duration after handler:
|
||||
app.use((req, res, next) => {
|
||||
const responseTimeInMs = Date.now() - res.locals.startEpoch
|
||||
|
||||
httpRequestDurationMicroseconds
|
||||
.labels(req.method, req.path, res.statusCode)
|
||||
.observe(responseTimeInMs)
|
||||
|
||||
next()
|
||||
})
|
||||
|
||||
prometheus.collectDefaultMetrics();
|
||||
|
||||
app.listen(8080);
|
||||
console.log('Magic happens on port 8080...');
|
||||
Reference in New Issue
Block a user