Files
pixel-streaming-coordinator/src/controllers/status.js
T

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
}