|
1 | | -var util = require('util'); |
2 | | -var url = require('url'); |
3 | | -var qs = require('querystring'); |
4 | | -var os = require('os') |
5 | | -var port = process.env.PORT || process.env.port || process.env.OPENSHIFT_NODEJS_PORT || 8080; |
6 | | -var ip = process.env.OPENSHIFT_NODEJS_IP || '0.0.0.0'; |
7 | | -var nodeEnv = process.env.NODE_ENV || 'unknown'; |
8 | | - |
| 1 | +// OpenShift sample Node application |
9 | 2 | var express = require('express'); |
10 | | -var app = express(); |
11 | | - |
12 | | -app.use(function(req, res, next) { |
13 | | - var url_parts = url.parse(req.url, true); |
14 | | - |
15 | | - var body = ''; |
16 | | - req.on('data', function (data) { |
17 | | - body += data; |
18 | | - }); |
19 | | - req.on('end', function () { |
20 | | - var formattedBody = qs.parse(body); |
21 | | - |
22 | | - res.writeHead(200, {'Content-Type': 'text/plain'}); |
23 | | - |
24 | | - res.write('Hello OpenShift World! This is a Node.js-based sample application.\n'); |
25 | | - res.write('Host: ' + req.headers.host + '\n'); |
26 | | - res.write('\n'); |
27 | | - res.write('node.js Production Mode: ' + (nodeEnv == 'production' ? 'yes' : 'no') + '\n'); |
28 | | - res.write('\n'); |
29 | | - res.write('HTTP/' + req.httpVersion +'\n'); |
30 | | - res.write('Request headers:\n'); |
31 | | - res.write(util.inspect(req.headers, null) + '\n'); |
32 | | - res.write('Request query:\n'); |
33 | | - res.write(util.inspect(url_parts.query, null) + '\n'); |
34 | | - res.write('Request body:\n'); |
35 | | - res.write(util.inspect(formattedBody, null) + '\n'); |
36 | | - res.write('\n'); |
37 | | - res.write('Host: ' + os.hostname() + '\n'); |
38 | | - res.write('OS Type: ' + os.type() + '\n'); |
39 | | - res.write('OS Platform: ' + os.platform() + '\n'); |
40 | | - res.write('OS Arch: ' + os.arch() + '\n'); |
41 | | - res.write('OS Release: ' + os.release() + '\n'); |
42 | | - res.write('OS Uptime: ' + os.uptime() + '\n'); |
43 | | - res.write('OS Free memory: ' + os.freemem() / 1024 / 1024 + 'mb\n'); |
44 | | - res.write('OS Total memory: ' + os.totalmem() / 1024 / 1024 + 'mb\n'); |
45 | | - res.write('OS CPU count: ' + os.cpus().length + '\n'); |
46 | | - res.write('OS CPU model: ' + os.cpus()[0].model + '\n'); |
47 | | - res.write('OS CPU speed: ' + os.cpus()[0].speed + 'mhz\n'); |
48 | | - res.end('\n'); |
49 | | - }); |
50 | | - next(); |
| 3 | +var fs = require('fs'); |
| 4 | +var app = express(); |
| 5 | +var eps = require('ejs'); |
| 6 | + |
| 7 | +app.engine('html', require('ejs').renderFile); |
| 8 | + |
| 9 | +var port = process.env.PORT || process.env.OPENSHIFT_NODEJS_PORT || 8080; |
| 10 | +var ip = process.env.IP || process.env.OPENSHIFT_NODEJS_IP || '0.0.0.0'; |
| 11 | +var mongoURL = process.env.OPENSHIFT_MONGODB_DB_URL || process.env.MONGO_URL; |
| 12 | +var mongoURLLabel = ""; |
| 13 | +if (mongoURL == null && process.env.DATABASE_SERVICE_NAME) { |
| 14 | + var mongoServiceName = process.env.DATABASE_SERVICE_NAME.toUpperCase(); |
| 15 | + var mongoHost = process.env[mongoServiceName + "_SERVICE_HOST"]; |
| 16 | + var mongoPort = process.env[mongoServiceName + "_SERVICE_PORT"]; |
| 17 | + var mongoUser = process.env.MONGODB_USER |
| 18 | + if (mongoHost && mongoPort && process.env.MONGODB_DATABASE) { |
| 19 | + mongoURLLabel = mongoURL = 'mongodb://'; |
| 20 | + if (process.env.MONGODB_USER && process.env.MONGODB_PASSWORD) { |
| 21 | + mongoURL += process.env.MONGODB_USER + ':' + process.env.MONGODB_PASSWORD + '@'; |
| 22 | + } |
| 23 | + // Provide UI label that excludes user id and pw |
| 24 | + |
| 25 | + mongoURLLabel += mongoHost + ':' + mongoPort + '/' + process.env.MONGODB_DATABASE; |
| 26 | + mongoURL += mongoHost + ':' + mongoPort + '/' + process.env.MONGODB_DATABASE; |
| 27 | + } |
| 28 | +} |
| 29 | +var db = null; |
| 30 | +var dbDetails = new Object(); |
| 31 | + |
| 32 | +var initDb = function(callback) { |
| 33 | + if (mongoURL == null) return; |
| 34 | + |
| 35 | + var mongodb = require('mongodb'); |
| 36 | + if (mongodb == null) return; |
| 37 | + |
| 38 | + mongodb.connect(mongoURL, function(err, conn) { |
| 39 | + if (err) { |
| 40 | + callback(err); |
| 41 | + return; |
| 42 | + } |
| 43 | + |
| 44 | + db = conn; |
| 45 | + dbDetails.databaseName = db.databaseName; |
| 46 | + dbDetails.url = mongoURLLabel; |
| 47 | + dbDetails.type = 'MongoDB'; |
| 48 | + |
| 49 | + console.log("Connected to MongoDB at: " + mongoURL); |
| 50 | + }); |
| 51 | +}; |
| 52 | + |
| 53 | +app.get('/', function (req, res) { |
| 54 | + if (db) { |
| 55 | + var col = db.collection('counts'); |
| 56 | + // Create a document with request IP and current time of request |
| 57 | + col.insert({ip: req.ip, date: Date.now()}); |
| 58 | + col.count(function(err, count){ |
| 59 | + res.render('index.html', { pageCountMessage : count, dbInfo: dbDetails }); |
| 60 | + }); |
| 61 | + } else { |
| 62 | + res.render('index.html', { pageCountMessage : null}); |
| 63 | + } |
| 64 | +}); |
| 65 | + |
| 66 | +app.get('/pagecount', function (req, res) { |
| 67 | + if (db) { |
| 68 | + db.collection('counts').count(function(err, count ){ |
| 69 | + res.send('{ pageCount: ' + count +'}'); |
| 70 | + }); |
| 71 | + } else { |
| 72 | + res.send('{ pageCount: -1 }'); |
| 73 | + } |
| 74 | +}); |
| 75 | + |
| 76 | +// error handling |
| 77 | +app.use(function(err, req, res, next){ |
| 78 | + console.error(err.stack); |
| 79 | + res.status(500).send('Something bad happened!'); |
| 80 | +}); |
| 81 | + |
| 82 | +initDb(function(err){ |
| 83 | + console.log('Error connecting to Mongo. Message:\n'+err); |
51 | 84 | }); |
52 | 85 |
|
53 | 86 | app.listen(port, ip); |
|
0 commit comments