Added logic to track server boot status

master
Keith Irwin 2017-12-19 06:37:50 +00:00
parent 23355a6771
commit 482ed9c0e2
No known key found for this signature in database
GPG Key ID: 378933C743E2BBC0
3 changed files with 107 additions and 55 deletions

View File

@ -6,31 +6,44 @@ const path = require('path')
const debug = require('debug')('tracman-demo') const debug = require('debug')('tracman-demo')
module.exports = (io) => { module.exports = (io) => {
// File is space-seperated: delay, lat, lon, dir, spd return new Promise( (resolve, reject) => {
fs.readFile(path.join(__dirname, '/demo.txt'), (err, data) => {
if (err) console.error(err.stack)
const lines = data.toString().split('\n'); // File is space-seperated: delay, lat, lon, dir, spd
fs.readFile(path.join(__dirname, '/demo.txt'), (err, data) => {
(function sendLoc (ln) { if (err) {
if (ln > 20754) { console.error(err.message)
sendLoc(0) reject()
} else { } else {
let loc = lines[ln].split(' ')
debug(`Sending demo location: ${loc[1]}, ${loc[2]}`)
io.to('demo').emit('get', {
tim: new Date(),
lat: loc[1],
lon: loc[2],
dir: loc[3],
spd: loc[4]
})
// Repeat after delay in milliseconds const lines = data.toString().split('\n');
setTimeout(() => {
sendLoc(ln + 1) // next line of file (function sendLoc (ln) {
}, loc[0]) if (ln > 20754) {
sendLoc(0)
} else {
let loc = lines[ln].split(' ')
debug(`Sending demo location: ${loc[1]}, ${loc[2]}`)
io.to('demo').emit('get', {
tim: new Date(),
lat: loc[1],
lon: loc[2],
dir: loc[3],
spd: loc[4]
})
// Repeat after delay in milliseconds
setTimeout(() => {
sendLoc(ln + 1) // next line of file
}, loc[0])
}
})(5667)
console.log(' Demo running')
resolve()
} }
})(5667)
})
}) })
} }

View File

@ -15,29 +15,37 @@ let transporter = nodemailer.createTransport({
}) })
module.exports = { module.exports = {
verify: () => { verify: () => {
debug(`Verifying SMTP connection...`) debug(`Verifying SMTP connection...`)
transporter.verify( (err,success) => {
if (err){ console.error(err.stack); } return new Promise( (resolve, reject) => {
console.log(`SMTP${(success)?'':' not'} ready`) transporter.verify()
} ) .then( (success) => {
console.log(` SMTP${(success)?'':' not'} ready`)
resolve()
}).catch( (err) => {
console.log(err.stack)
reject()
})
})
}, },
send: transporter.sendMail.bind(transporter), send: transporter.sendMail.bind(transporter),
text: (text) => { text: (text) => {
return `Tracman\n\n${text}\n\nDo not reply to this email\nFor information about why you received this email, see the privacy policy at ${env.url}/privacyy#email` return `Tracman\n\n${text}\n\nDo not reply to this email\nFor information about why you received this email, see the privacy policy at ${env.url}/privacyy#email`
}, },
html: (text)=>{ html: (text)=>{
return `<h1><a href="/" style="text-decoration:none;"><span style="color:#000;font-family:sans-serif;font-size:36px;font-weight:bold"><img src="${env.url}/static/img/icon/by/32.png" alt="+" style="margin-right:10px">Tracman</span></a></h1>${text}<p style="font-size:8px;">Do not reply to this email. For information about why you recieved this email, see our <a href="${env.url}/privacy#email">privacy policy</a>. </p>` return `<h1><a href="/" style="text-decoration:none;"><span style="color:#000;font-family:sans-serif;font-size:36px;font-weight:bold"><img src="${env.url}/static/img/icon/by/32.png" alt="+" style="margin-right:10px">Tracman</span></a></h1>${text}<p style="font-size:8px;">Do not reply to this email. For information about why you recieved this email, see our <a href="${env.url}/privacy#email">privacy policy</a>. </p>`
}, },
noReply: '"Tracman" <NoReply@tracman.org>', noReply: '"Tracman" <NoReply@tracman.org>',
to: (user) => { to: (user) => {
return `"${user.name}" <${user.email}>` return `"${user.name}" <${user.email}>`
} }
} }

View File

@ -20,19 +20,30 @@ const http = require('http').Server(app)
const io = require('socket.io')(http) const io = require('socket.io')(http)
const sockets = require('./config/sockets.js') const sockets = require('./config/sockets.js')
// Promises marking a ready server
let ready_promise_list = []
/* Database */ { /* Database */ {
// Setup with native ES6 promises // Setup with native ES6 promises
mongoose.Promise = global.Promise mongoose.Promise = global.Promise
// Connect to database // Connect to database
mongoose.connect(env.mongoSetup, { ready_promise_list.push( new Promise( (resolve, reject) => {
useMongoClient: true, mongoose.connect(env.mongoSetup, {
socketTimeoutMS: 30000, useMongoClient: true,
//reconnectTries: 30, socketTimeoutMS: 30000,
keepAlive: true //reconnectTries: 30,
}) keepAlive: true
.then( (db) => { console.log(`Mongoose connected to mongoDB ${db.name}`); } ) })
.catch( (err) => { console.error(err.stack); } ) .then( (db) => {
console.log(` Mongoose connected to ${db.name} database`)
resolve()
} )
.catch( (err) => {
console.error(err.stack)
reject()
} )
}) )
} }
@ -159,26 +170,46 @@ const sockets = require('./config/sockets.js')
} }
/* RUNTIME */ /* RUNTIME */
console.log('Starting Tracman server...') console.log(`Starting Tracman server in ${env.mode} mode...`)
// Test SMTP server // Test SMTP server
mail.verify() ready_promise_list.push(mail.verify())
// Listen // Listen
http.listen(env.port, () => { ready_promise_list.push( new Promise( (resolve, reject) => {
console.log(`Listening in ${env.mode} mode on port ${env.port}... `) http.listen(env.port, () => {
// Check for clients for each user console.log(` Listening on port ${env.port}`)
User.find({}) resolve()
.then((users) => {
users.forEach((user) => { // Check for clients for each user
sockets.checkForUsers(io, user.id) ready_promise_list.push( new Promise( (resolve, reject) => {
User.find({})
.then((users) => {
users.forEach((user) => {
sockets.checkForUsers(io, user.id)
})
resolve()
})
.catch( (err) => {
console.error(err.stack)
reject()
})
}) )
// Start transmitting demo
ready_promise_list.push( demo(io) )
// Mark everything when working correctly
Promise.all(ready_promise_list).then( () => {
console.log('Tracman server is running properly\n')
app.emit('ready') // Used for tests
}).catch( (err) => {
if (err) console.error(err.message)
console.log(`Tracman server is not running properly!\n`)
}) })
})
.catch((err) => { console.error(err.stack) })
// Start transmitting demo })
demo(io) }) )
})
module.exports = app module.exports = app