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 }