From 978f586f6a7a926b3fc2b3311fe62da228b3362a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Jos=C3=A9=20Pereira?= Date: Thu, 30 Nov 2023 09:38:51 -0300 Subject: [PATCH 1/7] helper: threads: Add process_task_counter function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Patrick José Pereira --- src/helper/threads.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/helper/threads.rs b/src/helper/threads.rs index 8ecf62ff..aade09ee 100644 --- a/src/helper/threads.rs +++ b/src/helper/threads.rs @@ -1,17 +1,20 @@ +use cached::proc_macro::cached; use std::thread; use std::time::Duration; use sysinfo::{System, SystemExt}; use tracing::*; -pub fn start_thread_counter_thread() { +#[cached(time = 1)] +pub fn process_task_counter() -> usize { let mut system = System::new_all(); let pid = sysinfo::get_current_pid().expect("Failed to get current PID."); + system.refresh_process(pid); + system.process(pid).unwrap().tasks.len() +} + +pub fn start_thread_counter_thread() { thread::spawn(move || loop { - system.refresh_process(pid); - info!( - "Number of child processes: {}", - system.process(pid).unwrap().tasks.len() - ); + info!("Number of child processes: {}", process_task_counter()); thread::sleep(Duration::from_secs(1)); }); } From 6fe6293105132a25a3e21acc105ae07477417c25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Jos=C3=A9=20Pereira?= Date: Thu, 30 Nov 2023 09:39:17 -0300 Subject: [PATCH 2/7] server: pages: Add info endpoint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Patrick José Pereira --- src/server/manager.rs | 1 + src/server/pages.rs | 46 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/server/manager.rs b/src/server/manager.rs index 73df7dee..dd337eb5 100644 --- a/src/server/manager.rs +++ b/src/server/manager.rs @@ -55,6 +55,7 @@ pub async fn run(server_address: &str) -> Result<(), std::io::Error> { r"/{filename:.*(\.html|\.js|\.css)}", web::get().to(pages::root), ) + .route("/info", web::get().to(pages::info)) .route("/delete_stream", web::delete().to(pages::remove_stream)) .route("/reset_settings", web::post().to(pages::reset_settings)) .route("/streams", web::get().to(pages::streams)) diff --git a/src/server/pages.rs b/src/server/pages.rs index dad07ba1..e4d7598c 100644 --- a/src/server/pages.rs +++ b/src/server/pages.rs @@ -1,3 +1,4 @@ +use crate::helper; use crate::settings; use crate::stream::{manager as stream_manager, types::StreamInformation}; use crate::video::{ @@ -12,7 +13,8 @@ use actix_web::{ web::{self, Json}, HttpRequest, HttpResponse, }; -use paperclip::actix::{api_v2_operation, Apiv2Schema}; + +use paperclip::actix::{api_v2_operation, Apiv2Schema, CreatedJson}; use serde::{Deserialize, Serialize}; use tracing::*; use validator::Validate; @@ -77,6 +79,41 @@ pub struct ThumbnailFileRequest { target_height: Option, } +#[derive(Apiv2Schema, Serialize, Debug)] +pub struct Development { + number_of_tasks: usize, +} + +#[derive(Apiv2Schema, Serialize, Debug)] +pub struct Info { + /// Name of the program + name: String, + /// Version/tag + version: String, + /// Git SHA + sha: String, + build_date: String, + /// Authors name + authors: String, + /// Unstable field for custom development + development: Development, +} + +impl Info { + pub fn new() -> Self { + Self { + name: env!("CARGO_PKG_NAME").into(), + version: env!("VERGEN_GIT_SEMVER").into(), + sha: env!("VERGEN_GIT_SHA_SHORT").into(), + build_date: env!("VERGEN_BUILD_DATE").into(), + authors: env!("CARGO_PKG_AUTHORS").into(), + development: Development { + number_of_tasks: helper::threads::process_task_counter(), + }, + } + } +} + use std::{ffi::OsStr, path::Path}; use include_dir::{include_dir, Dir}; @@ -136,6 +173,13 @@ pub fn root(req: HttpRequest) -> HttpResponse { HttpResponse::Ok().content_type(mime).body(content) } +#[api_v2_operation] +/// Provide information about the running service +/// There is no stable API guarantee for the development field +pub async fn info() -> CreatedJson { + CreatedJson(Info::new()) +} + //TODO: change endpoint name to sources #[api_v2_operation] /// Provides list of all video sources, with controls and formats From 9ca1274d1584f5d560fd7d7f23721588652cf8c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Jos=C3=A9=20Pereira?= Date: Thu, 30 Nov 2023 10:08:33 -0300 Subject: [PATCH 3/7] stream: webrtc: frontend: App: Add id for buttons to be used by automatic tools MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Patrick José Pereira --- src/stream/webrtc/frontend/src/App.vue | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/stream/webrtc/frontend/src/App.vue b/src/stream/webrtc/frontend/src/App.vue index b624edb1..8cf72fda 100644 --- a/src/stream/webrtc/frontend/src/App.vue +++ b/src/stream/webrtc/frontend/src/App.vue @@ -41,10 +41,18 @@ const manager = reactive(new Manager(ip, 6021, rtc_configuration));

Consumers: {{ manager.consumers.size }}

- -
@@ -96,6 +104,7 @@ const manager = reactive(new Manager(ip, 6021, rtc_configuration)); {{ stream.encode }}