Added logic to track server boot status
parent
23355a6771
commit
482ed9c0e2
|
@ -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)
|
|
||||||
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -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}>`
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
75
server.js
75
server.js
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue