90 lines
2.6 KiB
JavaScript
90 lines
2.6 KiB
JavaScript
const request = require('request')
|
|
const database = require('../database/database.js')
|
|
const not_found_error = require('../../lib/src/http/errors/not_found_error')
|
|
const {ping_session_server} = require('../modules/session_server.js')
|
|
|
|
const max_response_timeout = 500
|
|
|
|
const validate_url = async (domain) => {
|
|
let options = {
|
|
url: domain,
|
|
method: "GET",
|
|
path: '/',
|
|
timeout: max_response_timeout
|
|
}
|
|
|
|
return new Promise(function (resolve, reject) {
|
|
request(options,
|
|
async function(err, answer, data) {
|
|
if (err || !answer.socket) {
|
|
resolve(false)
|
|
return
|
|
} else if (answer.socket.authorized) {
|
|
resolve(true)
|
|
} else {
|
|
resolve(false)
|
|
}
|
|
}
|
|
)
|
|
})
|
|
}
|
|
|
|
const validate_all_urls = async (urls) => {
|
|
return Promise.all(urls.map(async (url) => {
|
|
const status = await validate_url(url)
|
|
return {url:url, status:status}
|
|
}))
|
|
}
|
|
|
|
const ping_all_session_servers = async (urls) => {
|
|
return Promise.all(urls.map(async (url) => {
|
|
const status = await ping_session_server(url)
|
|
return {url:url, status:status}
|
|
}))
|
|
}
|
|
|
|
|
|
|
|
const get_status = async (req, res, next) => {
|
|
let statuses = await database.get_statuses()
|
|
let urls = statuses[0].urls
|
|
|
|
let session_servers = await database.get_all_session_servers()
|
|
|
|
let session_servers_urls = []
|
|
|
|
session_servers.forEach(server => {
|
|
session_servers_urls.push(server.url)
|
|
})
|
|
|
|
urls = urls.concat(session_servers_urls)
|
|
|
|
// all ssl statuses
|
|
let ssl_statuses = await validate_all_urls(urls)
|
|
|
|
let session_server_statuses = await ping_all_session_servers(session_servers_urls)
|
|
|
|
let errors = await database.get_errors()
|
|
|
|
let active_sessions = await database.get_all_active_sessions()
|
|
if (active_sessions) {
|
|
active_sessions.forEach(function(part, index) {
|
|
this[index].websocket_url = ""
|
|
this[index].session_id = ""
|
|
}, active_sessions)
|
|
}
|
|
|
|
let sessions_history = await database.get_all_session_history()
|
|
if (sessions_history) {
|
|
sessions_history.forEach(function(part, index) {
|
|
this[index].websocket_url = ""
|
|
this[index].session_id = ""
|
|
}, sessions_history)
|
|
}
|
|
|
|
res.json([{ssl_statuses:ssl_statuses}, {session_server_statuses:session_server_statuses}, {errors:errors}, {active_sessions:active_sessions}, {sessions_history:sessions_history}])
|
|
}
|
|
|
|
module.exports = {
|
|
get_status
|
|
} |