61 lines
1.8 KiB
JavaScript
61 lines
1.8 KiB
JavaScript
const run_process = require('../modules/run_process')
|
|
const database = require('../database/database')
|
|
const {is_proc_running, kill_proc} = require('./run_process')
|
|
const coordinator = require('./coordinator')
|
|
const wait_list = require('./wait_list')
|
|
|
|
const observer_timeout = 100
|
|
var pending_list = new wait_list([])
|
|
|
|
const start_observer = () => {
|
|
check()
|
|
setTimeout(() => start_observer(), observer_timeout)
|
|
}
|
|
|
|
// check sessions in parallel
|
|
const check_sessions = async (sessions) => {
|
|
|
|
await Promise.all(sessions.map(async (session) => {
|
|
var webrtc_running = is_proc_running(session.webrtc_pid)
|
|
var app_running = is_proc_running(session.app_pid)
|
|
|
|
if (webrtc_running && app_running) {
|
|
return
|
|
}
|
|
|
|
// if something running kill process and skip remove from database
|
|
if (!webrtc_running || !app_running) {
|
|
// if session already in peding list skip
|
|
if (pending_list.is_waiting(session.session_id)) {
|
|
return
|
|
}
|
|
pending_list.add(session.session_id)
|
|
|
|
// kill process if running
|
|
kill_proc(session.webrtc_pid)
|
|
kill_proc(session.app_pid)
|
|
|
|
var close_session_result = await coordinator.close_session(session.session_id)
|
|
if (close_session_result) {
|
|
await database.remove_running_session(session.session_id)
|
|
} else {
|
|
console.log('can not connect to coordinator')
|
|
}
|
|
pending_list.remove(session.session_id)
|
|
}
|
|
}))
|
|
}
|
|
|
|
const check = async () => {
|
|
var sessions = await database.get_running_sessions()
|
|
|
|
if (!sessions) {
|
|
return
|
|
}
|
|
|
|
check_sessions(sessions)
|
|
}
|
|
|
|
module.exports = {
|
|
start_observer
|
|
} |