This repository has been archived by the owner on Aug 25, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
app.js
145 lines (111 loc) · 3.49 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
'use strict';
var createError = require('http-errors');
var express = require('express');
const handlebars = require('handlebars')
const exphbs = require('express-handlebars');
const {allowInsecurePrototypeAccess} = require('@handlebars/allow-prototype-access')
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
const winston = require('./winston/config')
var RED = require('node-red');
var http = require('http');
const probe = require('kube-probe')
var indexRouter = require('./routes/index');
//var discoveryRouter = require('./routes/discovery');
var app = express();
var server = http.createServer(app);
// Create the settings object - see default settings.js file for other options
var settings = {
httpAdminRoot: "/editor",
httpNodeRoot: "/",
userDir: "./workspace",
flowFilePretty: true,
flowFile: "flows.json",
nodesDir: "./custom-nodes",
credentialSecret: '(get this from keystore)',
disableEditor: false,
httpNodeCors: true,
ui: { path: 'dashboard' },
httpNodeMiddleware: function (req, res, next) {
// Perform any processing on the request.
// Be sure to call next() if the request should be passed
// to the relevant HTTP In node.
//TODO copy Istio/Jaeger HTTP headers to responce for tracing
next();
},
// enables global context
functionGlobalContext: {
os: require('os'),
},
// Editor Theme and project configuration
editorTheme: {
projects: {
enabled: true
}
},
// adminAuth: {
// users: [
// {
// username: "admin",
// // use 'node-red-admin hash-pw' to create pw hash, marty
// password: "$2a$08$MLbFBa8uhtcH3gGC4k0xruUfRtXh5YSBc/VOkxia7UG8Z/RN/kL5O",
// permissions: "*"
// },
// ],
// default: [
// {
// permissions: "read"
// }
// ]
// },
};
RED.init(server, settings);
// Serve the editor UI
app.use(settings.httpAdminRoot, RED.httpAdmin);
// Serve the http nodes UI from /api
app.use(settings.httpNodeRoot, RED.httpNode);
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.engine('handlebars', exphbs({
handlebars: allowInsecurePrototypeAccess(handlebars),
extname: '.handlebars'
}));
app.set('view engine', 'handlebars');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', indexRouter);
//app.use('/discovery', discoveryRouter);
// add kube probes (healthcheck and readiness check) to express app
// /api/health/liveness
// /api/health/readiness
probe(app, {
readinessURL: '/api/health/readiness',
readinessCallback: function (request, response) {
winston.info("readiness probe triggered")
return response.end('ready')
},
livenessURL: '/api/health/liveness',
livenessCallback: function (request, response) {
winston.info("liveness probe triggered")
return response.end('alive')
},
});
winston.info('Added kubernetes probes');
// catch 404 and forward to error handler
app.use(function (req, res, next) {
next(createError(404));
});
// error handler
app.use(function (err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = { expressApp: app, RED: RED, server: server }