Merge pull request #737 from jb-alvarado/master

better error handling on channel create/delete, always try to terminate sub processes, update packages
This commit is contained in:
jb-alvarado 2024-09-05 13:27:47 +02:00 committed by GitHub
commit 1b79b7bbda
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
16 changed files with 447 additions and 197 deletions

479
Cargo.lock generated
View File

@ -113,7 +113,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb"
dependencies = [ dependencies = [
"quote", "quote",
"syn 2.0.76", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -151,7 +151,7 @@ dependencies = [
"parse-size", "parse-size",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.76", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -311,7 +311,7 @@ dependencies = [
"actix-router", "actix-router",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.76", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -386,7 +386,7 @@ checksum = "008f98f5a68eeacf5e6d44ed74ce03c1b906baa53eabfb41faf0f5f40bd685f8"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.76", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -555,13 +555,13 @@ dependencies = [
[[package]] [[package]]
name = "async-trait" name = "async-trait"
version = "0.1.81" version = "0.1.82"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.76", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -741,9 +741,9 @@ dependencies = [
[[package]] [[package]]
name = "cc" name = "cc"
version = "1.1.15" version = "1.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6" checksum = "e9d013ecb737093c0e86b151a7b837993cf9ec6c502946cfb44bedc392421e0b"
dependencies = [ dependencies = [
"jobserver", "jobserver",
"libc", "libc",
@ -799,9 +799,9 @@ dependencies = [
[[package]] [[package]]
name = "clap" name = "clap"
version = "4.5.16" version = "4.5.17"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed6719fffa43d0d87e5fd8caeab59be1554fb028cd30edc88fc4369b17971019" checksum = "3e5a21b8495e732f1b3c364c9949b201ca7bae518c502c80256c96ad79eaf6ac"
dependencies = [ dependencies = [
"clap_builder", "clap_builder",
"clap_derive", "clap_derive",
@ -809,9 +809,9 @@ dependencies = [
[[package]] [[package]]
name = "clap_builder" name = "clap_builder"
version = "4.5.15" version = "4.5.17"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "216aec2b177652e3846684cbfe25c9964d18ec45234f0f5da5157b207ed1aab6" checksum = "8cf2dd12af7a047ad9d6da2b6b249759a22a7abc0f474c1dae1777afa4b21a73"
dependencies = [ dependencies = [
"anstream", "anstream",
"anstyle", "anstyle",
@ -828,7 +828,7 @@ dependencies = [
"heck", "heck",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.76", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -1009,7 +1009,7 @@ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"strsim", "strsim",
"syn 2.0.76", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -1020,7 +1020,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806"
dependencies = [ dependencies = [
"darling_core", "darling_core",
"quote", "quote",
"syn 2.0.76", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -1067,7 +1067,7 @@ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"rustc_version", "rustc_version",
"syn 2.0.76", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -1087,7 +1087,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.76", "syn 2.0.77",
"unicode-xid", "unicode-xid",
] ]
@ -1103,6 +1103,17 @@ dependencies = [
"subtle", "subtle",
] ]
[[package]]
name = "displaydoc"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.77",
]
[[package]] [[package]]
name = "dotenvy" name = "dotenvy"
version = "0.15.7" version = "0.15.7"
@ -1210,7 +1221,7 @@ checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6"
[[package]] [[package]]
name = "ffplayout" name = "ffplayout"
version = "0.24.0-beta3" version = "0.24.0-beta4"
dependencies = [ dependencies = [
"actix-files", "actix-files",
"actix-multipart", "actix-multipart",
@ -1297,9 +1308,9 @@ dependencies = [
[[package]] [[package]]
name = "filetime" name = "filetime"
version = "0.2.24" version = "0.2.25"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf401df4a4e3872c4fe8151134cf483738e74b67fc934d6532c882b3d24a4550" checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"libc", "libc",
@ -1433,7 +1444,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.76", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -1513,7 +1524,7 @@ dependencies = [
"futures-sink", "futures-sink",
"futures-util", "futures-util",
"http 0.2.12", "http 0.2.12",
"indexmap 2.4.0", "indexmap 2.5.0",
"slab", "slab",
"tokio", "tokio",
"tokio-util", "tokio-util",
@ -1674,9 +1685,9 @@ dependencies = [
[[package]] [[package]]
name = "hyper-rustls" name = "hyper-rustls"
version = "0.27.2" version = "0.27.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333"
dependencies = [ dependencies = [
"futures-util", "futures-util",
"http 1.1.0", "http 1.1.0",
@ -1733,6 +1744,124 @@ dependencies = [
"cc", "cc",
] ]
[[package]]
name = "icu_collections"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526"
dependencies = [
"displaydoc",
"yoke",
"zerofrom",
"zerovec",
]
[[package]]
name = "icu_locid"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637"
dependencies = [
"displaydoc",
"litemap",
"tinystr",
"writeable",
"zerovec",
]
[[package]]
name = "icu_locid_transform"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e"
dependencies = [
"displaydoc",
"icu_locid",
"icu_locid_transform_data",
"icu_provider",
"tinystr",
"zerovec",
]
[[package]]
name = "icu_locid_transform_data"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e"
[[package]]
name = "icu_normalizer"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f"
dependencies = [
"displaydoc",
"icu_collections",
"icu_normalizer_data",
"icu_properties",
"icu_provider",
"smallvec",
"utf16_iter",
"utf8_iter",
"write16",
"zerovec",
]
[[package]]
name = "icu_normalizer_data"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516"
[[package]]
name = "icu_properties"
version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5"
dependencies = [
"displaydoc",
"icu_collections",
"icu_locid_transform",
"icu_properties_data",
"icu_provider",
"tinystr",
"zerovec",
]
[[package]]
name = "icu_properties_data"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569"
[[package]]
name = "icu_provider"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9"
dependencies = [
"displaydoc",
"icu_locid",
"icu_provider_macros",
"stable_deref_trait",
"tinystr",
"writeable",
"yoke",
"zerofrom",
"zerovec",
]
[[package]]
name = "icu_provider_macros"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.77",
]
[[package]] [[package]]
name = "ident_case" name = "ident_case"
version = "1.0.1" version = "1.0.1"
@ -1749,6 +1878,18 @@ dependencies = [
"unicode-normalization", "unicode-normalization",
] ]
[[package]]
name = "idna"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd69211b9b519e98303c015e21a007e293db403b6c85b9b124e133d25e242cdd"
dependencies = [
"icu_normalizer",
"icu_properties",
"smallvec",
"utf8_iter",
]
[[package]] [[package]]
name = "impl-more" name = "impl-more"
version = "0.1.6" version = "0.1.6"
@ -1768,9 +1909,9 @@ dependencies = [
[[package]] [[package]]
name = "indexmap" name = "indexmap"
version = "2.4.0" version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c" checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5"
dependencies = [ dependencies = [
"equivalent", "equivalent",
"hashbrown 0.14.5", "hashbrown 0.14.5",
@ -1894,9 +2035,9 @@ dependencies = [
[[package]] [[package]]
name = "lettre" name = "lettre"
version = "0.11.7" version = "0.11.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a62049a808f1c4e2356a2a380bd5f2aca3b011b0b482cf3b914ba1731426969" checksum = "1658ac89b01055e3ba23d66ecf6f8b97388ebe34ce125e49f8ef71234fb8aaba"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"base64 0.22.1", "base64 0.22.1",
@ -1907,13 +2048,14 @@ dependencies = [
"futures-io", "futures-io",
"futures-util", "futures-util",
"httpdate", "httpdate",
"idna", "idna 1.0.2",
"mime", "mime",
"nom", "nom",
"percent-encoding", "percent-encoding",
"quoted_printable", "quoted_printable",
"rustls", "rustls",
"rustls-pemfile", "rustls-pemfile",
"rustls-pki-types",
"socket2", "socket2",
"tokio", "tokio",
"tokio-rustls", "tokio-rustls",
@ -1950,7 +2092,7 @@ checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
dependencies = [ dependencies = [
"bitflags 2.6.0", "bitflags 2.6.0",
"libc", "libc",
"redox_syscall 0.5.3", "redox_syscall",
] ]
[[package]] [[package]]
@ -1970,6 +2112,12 @@ version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
[[package]]
name = "litemap"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704"
[[package]] [[package]]
name = "local-channel" name = "local-channel"
version = "0.1.5" version = "0.1.5"
@ -1983,9 +2131,9 @@ dependencies = [
[[package]] [[package]]
name = "local-ip-address" name = "local-ip-address"
version = "0.6.1" version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "136ef34e18462b17bf39a7826f8f3bbc223341f8e83822beb8b77db9a3d49696" checksum = "b435d7dd476416a905f9634dff8c330cee8d3168fdd1fbd472a17d1a75c00c3e"
dependencies = [ dependencies = [
"libc", "libc",
"neli", "neli",
@ -2270,9 +2418,9 @@ dependencies = [
[[package]] [[package]]
name = "object" name = "object"
version = "0.36.3" version = "0.36.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a"
dependencies = [ dependencies = [
"memchr", "memchr",
] ]
@ -2313,7 +2461,7 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"libc", "libc",
"redox_syscall 0.5.3", "redox_syscall",
"smallvec", "smallvec",
"windows-targets 0.52.6", "windows-targets 0.52.6",
] ]
@ -2404,7 +2552,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.76", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -2479,23 +2627,23 @@ dependencies = [
"darling", "darling",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.76", "syn 2.0.77",
] ]
[[package]] [[package]]
name = "psm" name = "psm"
version = "0.1.21" version = "0.1.23"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" checksum = "aa37f80ca58604976033fae9515a8a2989fc13797d953f7c04fb8fa36a11f205"
dependencies = [ dependencies = [
"cc", "cc",
] ]
[[package]] [[package]]
name = "quinn" name = "quinn"
version = "0.11.3" version = "0.11.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b22d8e7369034b9a7132bc2008cac12f2013c8132b45e0554e6e20e2617f2156" checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684"
dependencies = [ dependencies = [
"bytes", "bytes",
"pin-project-lite", "pin-project-lite",
@ -2528,15 +2676,15 @@ dependencies = [
[[package]] [[package]]
name = "quinn-udp" name = "quinn-udp"
version = "0.5.4" version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8bffec3605b73c6f1754535084a85229fa8a30f86014e6c81aeec4abb68b0285" checksum = "4fe68c2e9e1a1234e218683dbdf9f9dfcb094113c5ac2b938dfcb9bab4c4140b"
dependencies = [ dependencies = [
"libc", "libc",
"once_cell", "once_cell",
"socket2", "socket2",
"tracing", "tracing",
"windows-sys 0.52.0", "windows-sys 0.59.0",
] ]
[[package]] [[package]]
@ -2604,15 +2752,6 @@ dependencies = [
"crossbeam-utils", "crossbeam-utils",
] ]
[[package]]
name = "redox_syscall"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
dependencies = [
"bitflags 1.3.2",
]
[[package]] [[package]]
name = "redox_syscall" name = "redox_syscall"
version = "0.5.3" version = "0.5.3"
@ -2776,18 +2915,18 @@ checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152"
[[package]] [[package]]
name = "rustc_version" name = "rustc_version"
version = "0.4.0" version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
dependencies = [ dependencies = [
"semver", "semver",
] ]
[[package]] [[package]]
name = "rustix" name = "rustix"
version = "0.38.34" version = "0.38.35"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" checksum = "a85d50532239da68e9addb745ba38ff4612a242c1c7ceea689c4bc7c2f43c36f"
dependencies = [ dependencies = [
"bitflags 2.6.0", "bitflags 2.6.0",
"errno", "errno",
@ -2829,9 +2968,9 @@ checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0"
[[package]] [[package]]
name = "rustls-webpki" name = "rustls-webpki"
version = "0.102.6" version = "0.102.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" checksum = "84678086bd54edf2b415183ed7a94d0efb049f1b646a33e22a36f3794be6ae56"
dependencies = [ dependencies = [
"ring", "ring",
"rustls-pki-types", "rustls-pki-types",
@ -2907,7 +3046,7 @@ checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.76", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -2926,7 +3065,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8de514ef58196f1fc96dcaef80fe6170a1ce6215df9687a93fe8300e773fefc5" checksum = "8de514ef58196f1fc96dcaef80fe6170a1ce6215df9687a93fe8300e773fefc5"
dependencies = [ dependencies = [
"form_urlencoded", "form_urlencoded",
"indexmap 2.4.0", "indexmap 2.5.0",
"itoa", "itoa",
"ryu", "ryu",
"serde", "serde",
@ -2934,9 +3073,9 @@ dependencies = [
[[package]] [[package]]
name = "serde_json" name = "serde_json"
version = "1.0.127" version = "1.0.128"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8"
dependencies = [ dependencies = [
"itoa", "itoa",
"memchr", "memchr",
@ -2994,7 +3133,7 @@ dependencies = [
"chrono", "chrono",
"hex", "hex",
"indexmap 1.9.3", "indexmap 1.9.3",
"indexmap 2.4.0", "indexmap 2.5.0",
"serde", "serde",
"serde_derive", "serde_derive",
"serde_json", "serde_json",
@ -3011,7 +3150,7 @@ dependencies = [
"darling", "darling",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.76", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -3036,7 +3175,7 @@ checksum = "82fe9db325bcef1fbcde82e078a5cc4efdf787e96b3b9cf45b50b529f2083d67"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.76", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -3069,9 +3208,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
[[package]] [[package]]
name = "signal-child" name = "signal-child"
version = "1.0.5" version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2a4eed4c5ae38438470ab8e0108bb751012f786f44ff585cfd837c9a5fe426f" checksum = "a3184fa464a0128cbcc353100ae752a848bc0067dd5715a50550f31570051150"
[[package]] [[package]]
name = "signal-hook-registry" name = "signal-hook-registry"
@ -3163,9 +3302,9 @@ dependencies = [
[[package]] [[package]]
name = "sqlx" name = "sqlx"
version = "0.8.1" version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fcfa89bea9500db4a0d038513d7a060566bfc51d46d1c014847049a45cce85e8" checksum = "93334716a037193fac19df402f8571269c84a00852f6a7066b5d2616dcd64d3e"
dependencies = [ dependencies = [
"sqlx-core", "sqlx-core",
"sqlx-macros", "sqlx-macros",
@ -3176,9 +3315,9 @@ dependencies = [
[[package]] [[package]]
name = "sqlx-core" name = "sqlx-core"
version = "0.8.1" version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d06e2f2bd861719b1f3f0c7dbe1d80c30bf59e76cf019f07d9014ed7eefb8e08" checksum = "d4d8060b456358185f7d50c55d9b5066ad956956fddec42ee2e8567134a8936e"
dependencies = [ dependencies = [
"atoi", "atoi",
"byteorder", "byteorder",
@ -3195,7 +3334,7 @@ dependencies = [
"hashbrown 0.14.5", "hashbrown 0.14.5",
"hashlink", "hashlink",
"hex", "hex",
"indexmap 2.4.0", "indexmap 2.5.0",
"log", "log",
"memchr", "memchr",
"once_cell", "once_cell",
@ -3215,22 +3354,22 @@ dependencies = [
[[package]] [[package]]
name = "sqlx-macros" name = "sqlx-macros"
version = "0.8.1" version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2f998a9defdbd48ed005a89362bd40dd2117502f15294f61c8d47034107dbbdc" checksum = "cac0692bcc9de3b073e8d747391827297e075c7710ff6276d9f7a1f3d58c6657"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"sqlx-core", "sqlx-core",
"sqlx-macros-core", "sqlx-macros-core",
"syn 2.0.76", "syn 2.0.77",
] ]
[[package]] [[package]]
name = "sqlx-macros-core" name = "sqlx-macros-core"
version = "0.8.1" version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d100558134176a2629d46cec0c8891ba0be8910f7896abfdb75ef4ab6f4e7ce" checksum = "1804e8a7c7865599c9c79be146dc8a9fd8cc86935fa641d3ea58e5f0688abaa5"
dependencies = [ dependencies = [
"dotenvy", "dotenvy",
"either", "either",
@ -3246,7 +3385,7 @@ dependencies = [
"sqlx-mysql", "sqlx-mysql",
"sqlx-postgres", "sqlx-postgres",
"sqlx-sqlite", "sqlx-sqlite",
"syn 2.0.76", "syn 2.0.77",
"tempfile", "tempfile",
"tokio", "tokio",
"url", "url",
@ -3254,9 +3393,9 @@ dependencies = [
[[package]] [[package]]
name = "sqlx-mysql" name = "sqlx-mysql"
version = "0.8.1" version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "936cac0ab331b14cb3921c62156d913e4c15b74fb6ec0f3146bd4ef6e4fb3c12" checksum = "64bb4714269afa44aef2755150a0fc19d756fb580a67db8885608cf02f47d06a"
dependencies = [ dependencies = [
"atoi", "atoi",
"base64 0.22.1", "base64 0.22.1",
@ -3296,9 +3435,9 @@ dependencies = [
[[package]] [[package]]
name = "sqlx-postgres" name = "sqlx-postgres"
version = "0.8.1" version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9734dbce698c67ecf67c442f768a5e90a49b2a4d61a9f1d59f73874bd4cf0710" checksum = "6fa91a732d854c5d7726349bb4bb879bb9478993ceb764247660aee25f67c2f8"
dependencies = [ dependencies = [
"atoi", "atoi",
"base64 0.22.1", "base64 0.22.1",
@ -3334,9 +3473,9 @@ dependencies = [
[[package]] [[package]]
name = "sqlx-sqlite" name = "sqlx-sqlite"
version = "0.8.1" version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a75b419c3c1b1697833dd927bdc4c6545a620bc1bbafabd44e1efbe9afcd337e" checksum = "d5b2cf34a45953bfd3daaf3db0f7a7878ab9b7a6b91b422d24a7a9e4c857b680"
dependencies = [ dependencies = [
"atoi", "atoi",
"flume", "flume",
@ -3355,6 +3494,12 @@ dependencies = [
"url", "url",
] ]
[[package]]
name = "stable_deref_trait"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
[[package]] [[package]]
name = "stacker" name = "stacker"
version = "0.1.17" version = "0.1.17"
@ -3493,9 +3638,9 @@ dependencies = [
[[package]] [[package]]
name = "syn" name = "syn"
version = "2.0.76" version = "2.0.77"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "578e081a14e0cefc3279b0472138c513f37b41a08d5a3cca9b6e4e8ceb6cd525" checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -3512,10 +3657,21 @@ dependencies = [
] ]
[[package]] [[package]]
name = "sysinfo" name = "synstructure"
version = "0.31.3" version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b92e0bdf838cbc1c4c9ba14f9c97a7ec6cdcd1ae66b10e1e42775a25553f45d" checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.77",
]
[[package]]
name = "sysinfo"
version = "0.31.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "355dbe4f8799b304b05e1b0f05fc59b2a18d36645cf169607da45bde2f69a1be"
dependencies = [ dependencies = [
"core-foundation-sys", "core-foundation-sys",
"libc", "libc",
@ -3540,7 +3696,7 @@ dependencies = [
[[package]] [[package]]
name = "tests" name = "tests"
version = "0.24.0-beta3" version = "0.24.0-beta4"
dependencies = [ dependencies = [
"actix-rt", "actix-rt",
"actix-test", "actix-test",
@ -3585,7 +3741,7 @@ checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.76", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -3619,6 +3775,16 @@ dependencies = [
"time-core", "time-core",
] ]
[[package]]
name = "tinystr"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f"
dependencies = [
"displaydoc",
"zerovec",
]
[[package]] [[package]]
name = "tinyvec" name = "tinyvec"
version = "1.8.0" version = "1.8.0"
@ -3636,9 +3802,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]] [[package]]
name = "tokio" name = "tokio"
version = "1.39.3" version = "1.40.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9babc99b9923bfa4804bd74722ff02c0381021eafa4db9949217e3be8e84fff5" checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998"
dependencies = [ dependencies = [
"backtrace", "backtrace",
"bytes", "bytes",
@ -3660,7 +3826,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.76", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -3687,9 +3853,9 @@ dependencies = [
[[package]] [[package]]
name = "tokio-util" name = "tokio-util"
version = "0.7.11" version = "0.7.12"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a"
dependencies = [ dependencies = [
"bytes", "bytes",
"futures-core", "futures-core",
@ -3714,7 +3880,7 @@ version = "0.22.20"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d"
dependencies = [ dependencies = [
"indexmap 2.4.0", "indexmap 2.5.0",
"serde", "serde",
"serde_spanned", "serde_spanned",
"toml_datetime", "toml_datetime",
@ -3768,7 +3934,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.76", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -3859,10 +4025,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c"
dependencies = [ dependencies = [
"form_urlencoded", "form_urlencoded",
"idna", "idna 0.5.0",
"percent-encoding", "percent-encoding",
] ]
[[package]]
name = "utf16_iter"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246"
[[package]]
name = "utf8_iter"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
[[package]] [[package]]
name = "utf8parse" name = "utf8parse"
version = "0.2.2" version = "0.2.2"
@ -3985,7 +4163,7 @@ dependencies = [
"once_cell", "once_cell",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.76", "syn 2.0.77",
"wasm-bindgen-shared", "wasm-bindgen-shared",
] ]
@ -4019,7 +4197,7 @@ checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.76", "syn 2.0.77",
"wasm-bindgen-backend", "wasm-bindgen-backend",
"wasm-bindgen-shared", "wasm-bindgen-shared",
] ]
@ -4042,20 +4220,20 @@ dependencies = [
[[package]] [[package]]
name = "webpki-roots" name = "webpki-roots"
version = "0.26.3" version = "0.26.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" checksum = "0bd24728e5af82c6c4ec1b66ac4844bdf8156257fccda846ec58b42cd0cdbe6a"
dependencies = [ dependencies = [
"rustls-pki-types", "rustls-pki-types",
] ]
[[package]] [[package]]
name = "whoami" name = "whoami"
version = "1.5.1" version = "1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d"
dependencies = [ dependencies = [
"redox_syscall 0.4.1", "redox_syscall",
"wasite", "wasite",
] ]
@ -4129,7 +4307,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.76", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -4140,7 +4318,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.76", "syn 2.0.77",
] ]
[[package]] [[package]]
@ -4339,6 +4517,42 @@ dependencies = [
"memchr", "memchr",
] ]
[[package]]
name = "write16"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936"
[[package]]
name = "writeable"
version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51"
[[package]]
name = "yoke"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5"
dependencies = [
"serde",
"stable_deref_trait",
"yoke-derive",
"zerofrom",
]
[[package]]
name = "yoke-derive"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.77",
"synstructure",
]
[[package]] [[package]]
name = "zerocopy" name = "zerocopy"
version = "0.7.35" version = "0.7.35"
@ -4357,7 +4571,28 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.76", "syn 2.0.77",
]
[[package]]
name = "zerofrom"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55"
dependencies = [
"zerofrom-derive",
]
[[package]]
name = "zerofrom-derive"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.77",
"synstructure",
] ]
[[package]] [[package]]
@ -4393,6 +4628,28 @@ dependencies = [
"uuid", "uuid",
] ]
[[package]]
name = "zerovec"
version = "0.10.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079"
dependencies = [
"yoke",
"zerofrom",
"zerovec-derive",
]
[[package]]
name = "zerovec-derive"
version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.77",
]
[[package]] [[package]]
name = "zstd" name = "zstd"
version = "0.13.2" version = "0.13.2"

View File

@ -4,7 +4,7 @@ default-members = ["ffplayout", "tests"]
resolver = "2" resolver = "2"
[workspace.package] [workspace.package]
version = "0.24.0-beta3" version = "0.24.0-beta4"
license = "GPL-3.0" license = "GPL-3.0"
repository = "https://github.com/ffplayout/ffplayout" repository = "https://github.com/ffplayout/ffplayout"
authors = ["Jonathan Baecker <jonbae77@gmail.com>"] authors = ["Jonathan Baecker <jonbae77@gmail.com>"]

View File

@ -570,7 +570,13 @@ async fn get_advanced_config(
role: AuthDetails<Role>, role: AuthDetails<Role>,
user: web::ReqData<UserMeta>, user: web::ReqData<UserMeta>,
) -> Result<impl Responder, ServiceError> { ) -> Result<impl Responder, ServiceError> {
let manager = controllers.lock().unwrap().get(*id).unwrap(); let manager = controllers
.lock()
.unwrap()
.get(*id)
.ok_or(ServiceError::BadRequest(format!(
"Channel ({id}) not exists!"
)))?;
let config = manager.config.lock().unwrap().advanced.clone(); let config = manager.config.lock().unwrap().advanced.clone();
Ok(web::Json(config)) Ok(web::Json(config))
@ -626,7 +632,13 @@ async fn get_playout_config(
role: AuthDetails<Role>, role: AuthDetails<Role>,
user: web::ReqData<UserMeta>, user: web::ReqData<UserMeta>,
) -> Result<impl Responder, ServiceError> { ) -> Result<impl Responder, ServiceError> {
let manager = controllers.lock().unwrap().get(*id).unwrap(); let manager = controllers
.lock()
.unwrap()
.get(*id)
.ok_or(ServiceError::BadRequest(format!(
"Channel ({id}) not exists!"
)))?;
let config = manager.config.lock().unwrap().clone(); let config = manager.config.lock().unwrap().clone();
Ok(web::Json(config)) Ok(web::Json(config))

View File

@ -73,7 +73,9 @@ async fn main() -> std::io::Result<()> {
.map_err(|e| io::Error::new(io::ErrorKind::Other, e.to_string()))?; .map_err(|e| io::Error::new(io::ErrorKind::Other, e.to_string()))?;
for channel in channels.iter() { for channel in channels.iter() {
let config = get_config(&pool, channel.id).await?; let config = get_config(&pool, channel.id)
.await
.map_err(|e| io::Error::new(io::ErrorKind::Other, e.to_string()))?;
let manager = ChannelManager::new(Some(pool.clone()), channel.clone(), config.clone()); let manager = ChannelManager::new(Some(pool.clone()), channel.clone(), config.clone());
let m_queue = Arc::new(Mutex::new(MailQueue::new(channel.id, config.mail))); let m_queue = Arc::new(Mutex::new(MailQueue::new(channel.id, config.mail)));
@ -210,7 +212,9 @@ async fn main() -> std::io::Result<()> {
let channels = ARGS.channels.clone().unwrap_or_else(|| vec![1]); let channels = ARGS.channels.clone().unwrap_or_else(|| vec![1]);
for (index, channel_id) in channels.iter().enumerate() { for (index, channel_id) in channels.iter().enumerate() {
let config = get_config(&pool, *channel_id).await?; let config = get_config(&pool, *channel_id)
.await
.map_err(|e| io::Error::new(io::ErrorKind::Other, e.to_string()))?;
let channel = handles::select_channel(&pool, channel_id).await.unwrap(); let channel = handles::select_channel(&pool, channel_id).await.unwrap();
let manager = ChannelManager::new(Some(pool.clone()), channel.clone(), config.clone()); let manager = ChannelManager::new(Some(pool.clone()), channel.clone(), config.clone());

View File

@ -126,7 +126,7 @@ impl ChannelManager {
let channel_id = self.channel.lock().unwrap().id; let channel_id = self.channel.lock().unwrap().id;
if let Err(e) = handles::update_player(&pool_clone, channel_id, true).await { if let Err(e) = handles::update_player(&pool_clone, channel_id, true).await {
error!("Unable write to player status: {e}"); error!(target: Target::all(), channel = channel_id; "Unable write to player status: {e}");
}; };
thread::spawn(move || { thread::spawn(move || {
@ -171,7 +171,7 @@ impl ChannelManager {
let channel_id = self.channel.lock().unwrap().id; let channel_id = self.channel.lock().unwrap().id;
if let Err(e) = handles::update_player(&pool_clone, channel_id, true).await { if let Err(e) = handles::update_player(&pool_clone, channel_id, true).await {
error!("Unable write to player status: {e}"); error!(target: Target::all(), channel = channel_id; "Unable write to player status: {e}");
}; };
if index + 1 == ARGS.channels.clone().unwrap_or_default().len() { if index + 1 == ARGS.channels.clone().unwrap_or_default().len() {
@ -258,16 +258,16 @@ impl ChannelManager {
} }
pub async fn async_stop(&self) { pub async fn async_stop(&self) {
debug!("Stop all child processes");
self.is_terminated.store(true, Ordering::SeqCst); self.is_terminated.store(true, Ordering::SeqCst);
self.is_alive.store(false, Ordering::SeqCst); self.is_alive.store(false, Ordering::SeqCst);
self.ingest_is_running.store(false, Ordering::SeqCst); self.ingest_is_running.store(false, Ordering::SeqCst);
self.run_count.fetch_sub(1, Ordering::SeqCst); self.run_count.fetch_sub(1, Ordering::SeqCst);
let pool = self.db_pool.clone().unwrap(); let pool = self.db_pool.clone().unwrap();
let channel_id = self.channel.lock().unwrap().id; let channel_id = self.channel.lock().unwrap().id;
debug!(target: Target::all(), channel = channel_id; "Stop all child processes from channel {channel_id}");
if let Err(e) = handles::update_player(&pool, channel_id, false).await { if let Err(e) = handles::update_player(&pool, channel_id, false).await {
error!("Unable write to player status: {e}"); error!(target: Target::all(), channel = channel_id; "Unable write to player status: {e}");
}; };
for unit in [Decoder, Encoder, Ingest] { for unit in [Decoder, Encoder, Ingest] {
@ -281,26 +281,22 @@ impl ChannelManager {
/// No matter what is running, terminate them all. /// No matter what is running, terminate them all.
pub fn stop_all(&self) { pub fn stop_all(&self) {
debug!("Stop all child processes");
self.is_terminated.store(true, Ordering::SeqCst); self.is_terminated.store(true, Ordering::SeqCst);
self.is_alive.store(false, Ordering::SeqCst);
self.ingest_is_running.store(false, Ordering::SeqCst); self.ingest_is_running.store(false, Ordering::SeqCst);
self.run_count.fetch_sub(1, Ordering::SeqCst); self.run_count.fetch_sub(1, Ordering::SeqCst);
let channel_id = self.channel.lock().unwrap().id;
if self.is_alive.load(Ordering::SeqCst) { debug!(target: Target::all(), channel = channel_id; "Stop all child processes from channel {channel_id}");
self.is_alive.store(false, Ordering::SeqCst);
trace!("Playout is alive and processes are terminated");
for unit in [Decoder, Encoder, Ingest] { for unit in [Decoder, Encoder, Ingest] {
if let Err(e) = self.stop(unit) { if let Err(e) = self.stop(unit) {
if !e.to_string().contains("exited process") { if !e.to_string().contains("exited process") {
error!("{e}") error!(target: Target::all(), channel = channel_id; "{e}")
} }
} }
if let Err(e) = self.wait(unit) { if let Err(e) = self.wait(unit) {
if !e.to_string().contains("exited process") { if !e.to_string().contains("exited process") {
error!("{e}") error!(target: Target::all(), channel = channel_id; "{e}")
}
} }
} }
} }

View File

@ -546,7 +546,7 @@ fn process_output_filters(config: &PlayoutConfig, chain: &mut Filters, custom_fi
let filter = let filter =
if (config.text.add_text && !config.text.text_from_filename) || config.output.mode == HLS { if (config.text.add_text && !config.text.text_from_filename) || config.output.mode == HLS {
let re_v = Regex::new(r"\[[0:]+[v^\[]+([:0]+)?\]").unwrap(); // match video filter input link let re_v = Regex::new(r"\[[0:]+[v^\[]+([:0]+)?\]").unwrap(); // match video filter input link
let _re_a = Regex::new(r"\[[0:]+[a^\[]+([:0]+)?\]").unwrap(); // match video filter input link let _re_a = Regex::new(r"\[[0:]+[a^\[]+([:0]+)?\]").unwrap(); // match audio filter input link
let mut cf = custom_filter.to_string(); let mut cf = custom_filter.to_string();
if !chain.video_chain.is_empty() { if !chain.video_chain.is_empty() {

View File

@ -32,7 +32,7 @@ pub fn watchman(
let path = Path::new(&config.channel.storage_path); let path = Path::new(&config.channel.storage_path);
if !path.exists() { if !path.exists() {
error!("Folder path not exists: '{path:?}'"); error!(target: Target::file_mail(), channel = id; "Folder path not exists: '{path:?}'");
panic!("Folder path not exists: '{path:?}'"); panic!("Folder path not exists: '{path:?}'");
} }
@ -95,7 +95,7 @@ pub fn watchman(
} }
_ => debug!(target: Target::file_mail(), channel = id; "Not tracked file event: {event:?}") _ => debug!(target: Target::file_mail(), channel = id; "Not tracked file event: {event:?}")
}), }),
Err(errors) => errors.iter().for_each(|error| error!("{error:?}")), Err(errors) => errors.iter().for_each(|error| error!(target: Target::file_mail(), channel = id; "{error:?}")),
} }
} }

View File

@ -1,5 +1,5 @@
use std::{ use std::{
fmt, io, fmt,
path::{Path, PathBuf}, path::{Path, PathBuf},
str::FromStr, str::FromStr,
}; };
@ -552,19 +552,13 @@ fn default_track_index() -> i32 {
// } // }
impl PlayoutConfig { impl PlayoutConfig {
pub async fn new(pool: &Pool<Sqlite>, channel_id: i32) -> Self { pub async fn new(pool: &Pool<Sqlite>, channel_id: i32) -> Result<Self, ServiceError> {
let global = handles::select_global(pool) let global = handles::select_global(pool)
.await .await
.expect("Can't read globals"); .expect("Can't read globals");
let channel = handles::select_channel(pool, &channel_id) let channel = handles::select_channel(pool, &channel_id).await?;
.await let config = handles::select_configuration(pool, channel_id).await?;
.expect("Can't read channel"); let adv_config = handles::select_advanced_configuration(pool, channel_id).await?;
let config = handles::select_configuration(pool, channel_id)
.await
.expect("Can't read config");
let adv_config = handles::select_advanced_configuration(pool, channel_id)
.await
.expect("Can't read advanced config");
let channel = Channel::new(&global, channel); let channel = Channel::new(&global, channel);
let advanced = AdvancedConfig::new(adv_config); let advanced = AdvancedConfig::new(adv_config);
@ -590,23 +584,14 @@ impl PlayoutConfig {
Storage::new(&config, channel.storage_path.clone(), global.shared_storage); Storage::new(&config, channel.storage_path.clone(), global.shared_storage);
if !channel.playlist_path.is_dir() { if !channel.playlist_path.is_dir() {
tokio::fs::create_dir_all(&channel.playlist_path) tokio::fs::create_dir_all(&channel.playlist_path).await?;
.await
.unwrap_or_else(|_| {
panic!("Can't create playlist folder: {:#?}", channel.playlist_path)
});
} }
if !channel.logging_path.is_dir() { if !channel.logging_path.is_dir() {
tokio::fs::create_dir_all(&channel.logging_path) tokio::fs::create_dir_all(&channel.logging_path).await?;
.await
.unwrap_or_else(|_| {
panic!("Can't create logging folder: {:#?}", channel.logging_path)
});
} }
let (filler_path, _, _) = norm_abs_path(&channel.storage_path, &config.storage_filler) let (filler_path, _, _) = norm_abs_path(&channel.storage_path, &config.storage_filler)?;
.expect("Can't get filler path");
storage.filler = filler_path; storage.filler = filler_path;
@ -700,10 +685,10 @@ impl PlayoutConfig {
for item in cmd.iter_mut() { for item in cmd.iter_mut() {
if item.ends_with(".ts") || (item.ends_with(".m3u8") && item != "master.m3u8") { if item.ends_with(".ts") || (item.ends_with(".m3u8") && item != "master.m3u8") {
if let Ok((hls_path, _, _)) = norm_abs_path(&channel.hls_path, item) { if let Ok((hls_path, _, _)) = norm_abs_path(&channel.hls_path, item) {
let parent = hls_path.parent().expect("HLS parent path"); let parent = hls_path.parent().ok_or("HLS parent path")?;
if !parent.is_dir() { if !parent.is_dir() {
fs::create_dir_all(parent).await.expect("Create HLS path"); fs::create_dir_all(parent).await?;
} }
item.clone_from(&hls_path.to_string_lossy().to_string()); item.clone_from(&hls_path.to_string_lossy().to_string());
}; };
@ -726,7 +711,7 @@ impl PlayoutConfig {
text.node_pos = None; text.node_pos = None;
} }
Self { Ok(Self {
channel, channel,
advanced, advanced,
general, general,
@ -739,11 +724,11 @@ impl PlayoutConfig {
text, text,
task, task,
output, output,
} })
} }
pub async fn dump(pool: &Pool<Sqlite>, id: i32) -> Result<(), ServiceError> { pub async fn dump(pool: &Pool<Sqlite>, id: i32) -> Result<(), ServiceError> {
let mut config = Self::new(pool, id).await; let mut config = Self::new(pool, id).await?;
config.storage.filler.clone_from( config.storage.filler.clone_from(
&config &config
.storage .storage
@ -819,8 +804,11 @@ fn pre_audio_codec(proc_filter: &str, ingest_filter: &str, channel_count: u8) ->
} }
/// Read command line arguments, and override the config with them. /// Read command line arguments, and override the config with them.
pub async fn get_config(pool: &Pool<Sqlite>, channel_id: i32) -> Result<PlayoutConfig, io::Error> { pub async fn get_config(
let mut config = PlayoutConfig::new(pool, channel_id).await; pool: &Pool<Sqlite>,
channel_id: i32,
) -> Result<PlayoutConfig, ServiceError> {
let mut config = PlayoutConfig::new(pool, channel_id).await?;
let args = ARGS.clone(); let args = ARGS.clone();
config.general.generate = args.generate; config.general.generate = args.generate;

View File

@ -11,7 +11,7 @@ use crate::player::{
controller::{ChannelManager, ProcessUnit::*}, controller::{ChannelManager, ProcessUnit::*},
utils::{get_delta, get_media_map}, utils::{get_delta, get_media_map},
}; };
use crate::utils::{config::OutputMode::*, errors::ServiceError, TextFilter}; use crate::utils::{config::OutputMode::*, errors::ServiceError, logging::Target, TextFilter};
#[derive(Debug, Deserialize, Serialize, Clone)] #[derive(Debug, Deserialize, Serialize, Clone)]
struct TextParams { struct TextParams {
@ -85,6 +85,7 @@ pub async fn send_message(
let filter = message.to_string(); let filter = message.to_string();
let mut data_map = Map::new(); let mut data_map = Map::new();
let config = manager.config.lock().unwrap().clone(); let config = manager.config.lock().unwrap().clone();
let id = config.general.channel_id;
if config.text.zmq_stream_socket.is_some() { if config.text.zmq_stream_socket.is_some() {
if let Some(clips_filter) = manager.filter_chain.clone() { if let Some(clips_filter) = manager.filter_chain.clone() {
@ -105,7 +106,7 @@ pub async fn send_message(
return Ok(data_map); return Ok(data_map);
}; };
} else if let Err(e) = manager.stop(Ingest) { } else if let Err(e) = manager.stop(Ingest) {
error!("Ingest {e:?}") error!(target: Target::file_mail(), channel = id; "Ingest {e:?}")
} }
} }
@ -135,6 +136,7 @@ pub async fn control_state(
command: &str, command: &str,
) -> Result<Map<String, Value>, ServiceError> { ) -> Result<Map<String, Value>, ServiceError> {
let config = manager.config.lock().unwrap().clone(); let config = manager.config.lock().unwrap().clone();
let id = config.general.channel_id;
let current_date = manager.current_date.lock().unwrap().clone(); let current_date = manager.current_date.lock().unwrap().clone();
let current_list = manager.current_list.lock().unwrap().clone(); let current_list = manager.current_list.lock().unwrap().clone();
let mut date = manager.current_date.lock().unwrap().clone(); let mut date = manager.current_date.lock().unwrap().clone();
@ -145,23 +147,23 @@ pub async fn control_state(
if index > 1 && current_list.len() > 1 { if index > 1 && current_list.len() > 1 {
if let Some(proc) = manager.decoder.lock().unwrap().as_mut() { if let Some(proc) = manager.decoder.lock().unwrap().as_mut() {
if let Err(e) = proc.kill() { if let Err(e) = proc.kill() {
error!("Decoder {e:?}") error!(target: Target::file_mail(), channel = id; "Decoder {e:?}")
}; };
if let Err(e) = proc.wait() { if let Err(e) = proc.wait() {
error!("Decoder {e:?}") error!(target: Target::file_mail(), channel = id; "Decoder {e:?}")
}; };
} else { } else {
return Err(ServiceError::InternalServerError); return Err(ServiceError::InternalServerError);
} }
info!("Move to last clip"); info!(target: Target::file_mail(), channel = id; "Move to last clip");
let mut data_map = Map::new(); let mut data_map = Map::new();
let mut media = current_list[index - 2].clone(); let mut media = current_list[index - 2].clone();
manager.current_index.fetch_sub(2, Ordering::SeqCst); manager.current_index.fetch_sub(2, Ordering::SeqCst);
if let Err(e) = media.add_probe(false) { if let Err(e) = media.add_probe(false) {
error!("{e:?}"); error!(target: Target::file_mail(), channel = id; "{e:?}");
}; };
let (delta, _) = get_delta(&config, &media.begin.unwrap_or(0.0)); let (delta, _) = get_delta(&config, &media.begin.unwrap_or(0.0));
@ -181,23 +183,23 @@ pub async fn control_state(
if index < current_list.len() { if index < current_list.len() {
if let Some(proc) = manager.decoder.lock().unwrap().as_mut() { if let Some(proc) = manager.decoder.lock().unwrap().as_mut() {
if let Err(e) = proc.kill() { if let Err(e) = proc.kill() {
error!("Decoder {e:?}") error!(target: Target::file_mail(), channel = id; "Decoder {e:?}")
}; };
if let Err(e) = proc.wait() { if let Err(e) = proc.wait() {
error!("Decoder {e:?}") error!(target: Target::file_mail(), channel = id; "Decoder {e:?}")
}; };
} else { } else {
return Err(ServiceError::InternalServerError); return Err(ServiceError::InternalServerError);
} }
info!("Move to next clip"); info!(target: Target::file_mail(), channel = id; "Move to next clip");
let mut data_map = Map::new(); let mut data_map = Map::new();
let mut media = current_list[index].clone(); let mut media = current_list[index].clone();
if let Err(e) = media.add_probe(false) { if let Err(e) = media.add_probe(false) {
error!("{e:?}"); error!(target: Target::file_mail(), channel = id; "{e:?}");
}; };
let (delta, _) = get_delta(&config, &media.begin.unwrap_or(0.0)); let (delta, _) = get_delta(&config, &media.begin.unwrap_or(0.0));
@ -216,17 +218,17 @@ pub async fn control_state(
"reset" => { "reset" => {
if let Some(proc) = manager.decoder.lock().unwrap().as_mut() { if let Some(proc) = manager.decoder.lock().unwrap().as_mut() {
if let Err(e) = proc.kill() { if let Err(e) = proc.kill() {
error!("Decoder {e:?}") error!(target: Target::file_mail(), channel = id; "Decoder {e:?}")
}; };
if let Err(e) = proc.wait() { if let Err(e) = proc.wait() {
error!("Decoder {e:?}") error!(target: Target::file_mail(), channel = id; "Decoder {e:?}")
}; };
} else { } else {
return Err(ServiceError::InternalServerError); return Err(ServiceError::InternalServerError);
} }
info!("Reset playout to original state"); info!(target: Target::file_mail(), channel = id; "Reset playout to original state");
let mut data_map = Map::new(); let mut data_map = Map::new();
manager.channel.lock().unwrap().time_shift = 0.0; manager.channel.lock().unwrap().time_shift = 0.0;
date.clone_from(&current_date); date.clone_from(&current_date);

View File

@ -19,7 +19,7 @@ use crate::player::{
controller::ChannelManager, controller::ChannelManager,
utils::{ utils::{
folder::{fill_filler_list, FolderSource}, folder::{fill_filler_list, FolderSource},
gen_dummy, get_date_range, include_file_extension, get_date_range, include_file_extension,
json_serializer::JsonPlaylist, json_serializer::JsonPlaylist,
sum_durations, Media, sum_durations, Media,
}, },
@ -118,15 +118,6 @@ pub fn filler_list(config: &PlayoutConfig, total_length: f64) -> Vec<Media> {
let last_index = filler_clip_list.len() - 1; let last_index = filler_clip_list.len() - 1;
filler_clip_list[last_index].out = filler_clip_list[last_index].duration - over_length; filler_clip_list[last_index].out = filler_clip_list[last_index].duration - over_length;
} else {
let mut dummy = Media::new(0, "", false);
let (source, cmd) = gen_dummy(config, total_length);
dummy.source = source;
dummy.cmd = Some(cmd);
dummy.duration = total_length;
dummy.out = total_length;
filler_clip_list.push(dummy);
} }
filler_clip_list filler_clip_list

@ -1 +1 @@
Subproject commit 8d8ab58ef43d450968a3e4fa23f1141c77a31b88 Subproject commit 48f123bf6ad136968495e9e5e22249b8ca5ef192

View File

@ -42,7 +42,7 @@ async fn prepare_config() -> (PlayoutConfig, ChannelManager, Pool<Sqlite>) {
handles::insert_user(&pool, user.clone()).await.unwrap(); handles::insert_user(&pool, user.clone()).await.unwrap();
let config = PlayoutConfig::new(&pool, 1).await; let config = PlayoutConfig::new(&pool, 1).await.unwrap();
let channel = handles::select_channel(&pool, &1).await.unwrap(); let channel = handles::select_channel(&pool, &1).await.unwrap();
let manager = ChannelManager::new(Some(pool.clone()), channel, config.clone()); let manager = ChannelManager::new(Some(pool.clone()), channel, config.clone());

View File

@ -31,7 +31,7 @@ async fn prepare_config() -> (PlayoutConfig, ChannelManager) {
.await .await
.unwrap(); .unwrap();
let config = PlayoutConfig::new(&pool, 1).await; let config = PlayoutConfig::new(&pool, 1).await.unwrap();
let channel = handles::select_channel(&pool, &1).await.unwrap(); let channel = handles::select_channel(&pool, &1).await.unwrap();
let manager = ChannelManager::new(Some(pool), channel, config.clone()); let manager = ChannelManager::new(Some(pool), channel, config.clone());

View File

@ -34,7 +34,7 @@ async fn prepare_config() -> (PlayoutConfig, ChannelManager) {
.await .await
.unwrap(); .unwrap();
let config = PlayoutConfig::new(&pool, 1).await; let config = PlayoutConfig::new(&pool, 1).await.unwrap();
let channel = handles::select_channel(&pool, &1).await.unwrap(); let channel = handles::select_channel(&pool, &1).await.unwrap();
let manager = ChannelManager::new(Some(pool), channel, config.clone()); let manager = ChannelManager::new(Some(pool), channel, config.clone());

View File

@ -33,7 +33,7 @@ async fn prepare_config() -> (PlayoutConfig, ChannelManager) {
.await .await
.unwrap(); .unwrap();
let config = PlayoutConfig::new(&pool, 1).await; let config = PlayoutConfig::new(&pool, 1).await.unwrap();
let channel = handles::select_channel(&pool, &1).await.unwrap(); let channel = handles::select_channel(&pool, &1).await.unwrap();
let manager = ChannelManager::new(Some(pool), channel, config.clone()); let manager = ChannelManager::new(Some(pool), channel, config.clone());

View File

@ -27,7 +27,7 @@ async fn prepare_config() -> (PlayoutConfig, ChannelManager) {
.await .await
.unwrap(); .unwrap();
let config = PlayoutConfig::new(&pool, 1).await; let config = PlayoutConfig::new(&pool, 1).await.unwrap();
let channel = handles::select_channel(&pool, &1).await.unwrap(); let channel = handles::select_channel(&pool, &1).await.unwrap();
let manager = ChannelManager::new(Some(pool), channel, config.clone()); let manager = ChannelManager::new(Some(pool), channel, config.clone());