diff --git a/bulletin-board-app/server.js b/bulletin-board-app/server.js index 81348471..3c4b60ad 100644 --- a/bulletin-board-app/server.js +++ b/bulletin-board-app/server.js @@ -1,38 +1,58 @@ -var express = require('express'), - bodyParser = require('body-parser'), - methodOverride = require('method-override'), - errorHandler = require('errorhandler'), - morgan = require('morgan'), - routes = require('./backend'), - api = require('./backend/api'); - +var express = require('express'), + bodyParser = require('body-parser'), + methodOverride = require('method-override'), + errorHandler = require('errorhandler'), + morgan = require('morgan'), + prometheus = require('prom-client'), + routes = require('./backend'), + api = require('./backend/api'); var app = module.exports = express(); app.engine('html', require('ejs').renderFile); app.set('view engine', 'html'); + +// middleware monitoring function +var monitor = function (req, res, next){ + res.on("finish", function() { + routeRequests.labels(req.method, req.path, res.statusCode).inc() + }); + next(); +} + +// middleware stack +app.use(monitor) app.use(morgan('dev')); app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); app.use(methodOverride()); app.use(express.static(__dirname + '/')); app.use('/build', express.static('public')); - var env = process.env.NODE_ENV; if ('development' == env) { - app.use(errorHandler({ - dumpExceptions: true, - showStack: true - })); + app.use(errorHandler({ + dumpExceptions: true, + showStack: true + })); } - if ('production' == app.get('env')) { - app.use(errorHandler()); + app.use(errorHandler()); } +// counter for Prometheus: +const routeRequests = new prometheus.Counter({ + name: 'bb_route_requests', + help: 'request by route', + labelNames: ['method', 'route', 'code'] +}) 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()) + }) +prometheus.collectDefaultMetrics(); app.listen(8080); -console.log('Magic happens on port 8080...'); +console.log('Magic happens on port 8080...'); \ No newline at end of file diff --git a/myapp.yaml b/myapp.yaml index d5252bf9..44d9e955 100644 --- a/myapp.yaml +++ b/myapp.yaml @@ -41,7 +41,7 @@ spec: spec: containers: - name: web - image: /bb:web-0.3 + image: chetrobinson/bb:web-0.3 --- apiVersion: v1 kind: Service @@ -68,3 +68,19 @@ spec: ports: - port: 5432 targetPort: 5432 +--- +apiVersion: v1 +kind: Service +metadata: + name: bb-entrypoint + namespace: default + labels: + app: bb +spec: + type: NodePort + selector: + bb: frontend + ports: + - port: 8080 + targetPort: 8080 + nodePort: 30001 \ No newline at end of file diff --git a/values-prometh.yaml b/values-prometh.yaml new file mode 100644 index 00000000..05cf29c3 --- /dev/null +++ b/values-prometh.yaml @@ -0,0 +1,17 @@ +prometheus: + service: + type: NodePort + additionalServiceMonitors: + - name: bb-monitor + selector: + matchLabels: + app: bb + namespaceSelector: + matchNames: + - default + endpoints: + - interval: 15s + path: /metrics +alertmanager: + service: + type: NodePort \ No newline at end of file