Skip to content

Commit 20bacfb

Browse files
authored
Merge pull request #1507 from tarlety/feature-metrics-merge-develop
Exporting metrics for node.js, express, router, and codimd realtime status.
2 parents a6c7582 + ac31e51 commit 20bacfb

File tree

7 files changed

+176
-1
lines changed

7 files changed

+176
-1
lines changed

app.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ var passportSocketIo = require('passport.socketio')
1717
var helmet = require('helmet')
1818
var i18n = require('i18n')
1919
var flash = require('connect-flash')
20+
var apiMetrics = require('prometheus-api-metrics')
2021

2122
// core
2223
var config = require('./lib/config')
@@ -56,6 +57,12 @@ function createHttpServer () {
5657
var app = express()
5758
var server = createHttpServer()
5859

60+
// API and process monitoring with Prometheus for Node.js micro-service
61+
app.use(apiMetrics({
62+
metricsPath: '/metrics/router',
63+
excludeRoutes: ['/metrics/codimd']
64+
}))
65+
5966
// logger
6067
app.use(morgan('combined', {
6168
stream: logger.stream
@@ -131,6 +138,7 @@ app.use('/', express.static(path.join(__dirname, '/public'), { maxAge: config.st
131138
app.use('/docs', express.static(path.resolve(__dirname, config.docsPath), { maxAge: config.staticCacheTime }))
132139
app.use('/uploads', express.static(path.resolve(__dirname, config.uploadsPath), { maxAge: config.staticCacheTime }))
133140
app.use('/default.md', express.static(path.resolve(__dirname, config.defaultNotePath), { maxAge: config.staticCacheTime }))
141+
app.use(require('./lib/metrics').router)
134142

135143
// session
136144
app.use(session({

lib/metrics.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
'use strict'
2+
3+
const { Router } = require('express')
4+
5+
const { wrap } = require('./utils')
6+
7+
// load controller
8+
const statusController = require('./status')
9+
const appRouter = Router()
10+
11+
// register route
12+
appRouter.get('/status', wrap(statusController.getStatus))
13+
appRouter.get('/metrics/codimd', wrap(statusController.getMetrics))
14+
15+
exports.router = appRouter

lib/routes.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ appRouter.get('/404', errorPageController.errorNotFound)
2727
// get 500 internal error
2828
appRouter.get('/500', errorPageController.errorInternalError)
2929

30-
appRouter.get('/status', wrap(statusController.getStatus))
3130
appRouter.get('/config', statusController.getConfig)
3231

3332
// register auth module

lib/status/index.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,17 @@ exports.getStatus = async (req, res) => {
1414
res.send(data)
1515
}
1616

17+
exports.getMetrics = async (req, res) => {
18+
const data = await realtime.getStatus()
19+
20+
res.set({
21+
'Cache-Control': 'private', // only cache by client
22+
'X-Robots-Tag': 'noindex, nofollow', // prevent crawling
23+
'Content-Type': 'text/plain; charset=utf-8'
24+
})
25+
res.render('../js/lib/common/metrics.ejs', data)
26+
}
27+
1728
exports.getConfig = (req, res) => {
1829
const data = {
1930
domain: config.domain,

package-lock.json

Lines changed: 129 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@
8686
"passport.socketio": "~3.7.0",
8787
"pg": "~6.1.2",
8888
"pg-hstore": "~2.3.2",
89+
"prom-client": "^12.0.0",
90+
"prometheus-api-metrics": "^2.2.5",
8991
"randomcolor": "~0.5.4",
9092
"readline-sync": "~1.4.7",
9193
"request": "~2.88.0",

public/js/lib/common/metrics.ejs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
online_notes <%- onlineNotes %>
2+
online_users <%- onlineUsers %>
3+
distinct_online_users <%- distinctOnlineUsers %>
4+
notes_count <%- notesCount %>
5+
registered_users <%- registeredUsers %>
6+
online_registered_users <%- onlineRegisteredUsers %>
7+
distinct_online_registered_users <%- distinctOnlineRegisteredUsers %>
8+
is_connection_busy <%- isConnectionBusy ? 1 : 0 %>
9+
connection_socket_queue_length <%- connectionSocketQueueLength %>
10+
is_disconnect_busy <%- isDisconnectBusy ? 1: 0 %>
11+
disconnect_socket_queue_length <%- disconnectSocketQueueLength %>

0 commit comments

Comments
 (0)