diff --git a/Cargo.lock b/Cargo.lock index d0df52ba8a..12fea9540f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -81,6 +81,51 @@ dependencies = [ "event-listener", ] +[[package]] +name = "async-nats" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1174495e436c928905018f10a36160f7a8a6786450f50f4ce7fba05d1539704c" +dependencies = [ + "async-nats-tokio-rustls-deps", + "base64 0.13.1", + "base64-url", + "bytes", + "futures", + "http", + "itoa", + "memchr", + "nkeys", + "nuid", + "once_cell", + "rand", + "regex", + "ring", + "rustls-native-certs", + "rustls-pemfile", + "serde", + "serde_json", + "serde_nanos", + "serde_repr", + "thiserror", + "time 0.3.21", + "tokio", + "tokio-retry", + "tracing", + "url", +] + +[[package]] +name = "async-nats-tokio-rustls-deps" +version = "0.24.0-ALPHA.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cdefe54cd7867d937c0a507d2a3a830af410044282cd3e4002b5b7860e1892e" +dependencies = [ + "rustls", + "tokio", + "webpki", +] + [[package]] name = "async-process" version = "1.7.0" @@ -218,6 +263,21 @@ version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" +[[package]] +name = "base64-url" +version = "1.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a99c239d0c7e77c85dddfa9cebce48704b3c49550fcd3b84dd637e4484899f" +dependencies = [ + "base64 0.13.1", +] + +[[package]] +name = "base64ct" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6b4d9b1225d28d360ec6a231d65af1fd99a2a095154c8040689617290569c5c" + [[package]] name = "bincode" version = "1.3.3" @@ -284,6 +344,15 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + [[package]] name = "block-buffer" version = "0.10.4" @@ -369,6 +438,12 @@ dependencies = [ "utf8-width", ] +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + [[package]] name = "bytes" version = "1.4.0" @@ -488,6 +563,22 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "const-oid" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d6f2aa4d0537bcc1c74df8755072bd31c1ef1a3a1b85a68e8404a8c353b7b8b" + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.4" @@ -664,6 +755,19 @@ dependencies = [ "syn 2.0.15", ] +[[package]] +name = "curve25519-dalek" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "subtle", + "zeroize", +] + [[package]] name = "cxx" version = "1.0.94" @@ -743,6 +847,21 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "data-encoding" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" + +[[package]] +name = "der" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79b71cca7d95d7681a4b3b9cdf63c8dbc3730d0584c2c74e31416d64a90493f4" +dependencies = [ + "const-oid", +] + [[package]] name = "derive_builder" version = "0.12.0" @@ -785,13 +904,22 @@ dependencies = [ "uuid 1.3.2", ] +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + [[package]] name = "digest" version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ - "block-buffer", + "block-buffer 0.10.4", "crypto-common", ] @@ -813,6 +941,27 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" +[[package]] +name = "ed25519" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" +dependencies = [ + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +dependencies = [ + "curve25519-dalek", + "ed25519", + "sha2 0.9.9", + "zeroize", +] + [[package]] name = "either" version = "1.8.1" @@ -908,6 +1057,39 @@ version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" +[[package]] +name = "event-publisher" +version = "0.1.0" +dependencies = [ + "events-api", + "serde_json", + "tokio", + "tracing", + "tracing-subscriber 0.3.17", +] + +[[package]] +name = "events-api" +version = "0.1.0" +dependencies = [ + "async-nats", + "async-trait", + "bytes", + "chrono", + "futures", + "once_cell", + "prost 0.11.9", + "prost-wkt-types", + "serde", + "serde_json", + "snafu", + "tokio", + "tonic 0.8.3", + "tonic-build 0.8.4", + "tracing", + "uuid 1.3.2", +] + [[package]] name = "fastrand" version = "1.9.0" @@ -1416,6 +1598,8 @@ dependencies = [ "dns-lookup", "env_logger", "etcd-client", + "event-publisher", + "events-api", "function_name", "futures", "gettid", @@ -1448,7 +1632,7 @@ dependencies = [ "serde", "serde_json", "serde_yaml", - "sha2", + "sha2 0.10.6", "signal-hook", "snafu", "spdk-rs", @@ -1464,7 +1648,7 @@ dependencies = [ "tracing-core", "tracing-futures", "tracing-log", - "tracing-subscriber", + "tracing-subscriber 0.3.17", "udev 0.6.3", "url", "uuid 0.8.2", @@ -1493,7 +1677,7 @@ dependencies = [ "tracing", "tracing-core", "tracing-futures", - "tracing-subscriber", + "tracing-subscriber 0.2.25", "url", "uuid 0.8.2", ] @@ -1551,7 +1735,7 @@ dependencies = [ "serde", "serde_json", "serde_yaml", - "sha2", + "sha2 0.10.6", "signal-hook", "snafu", "spdk-rs", @@ -1564,7 +1748,7 @@ dependencies = [ "tracing-core", "tracing-futures", "tracing-log", - "tracing-subscriber", + "tracing-subscriber 0.2.25", "udev 0.6.3", "url", "uuid 0.8.2", @@ -1745,6 +1929,15 @@ dependencies = [ "regex-automata", ] +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata", +] + [[package]] name = "matchit" version = "0.7.0" @@ -1875,6 +2068,21 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "nkeys" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e66a7cd1358277b2a6f77078e70aea7315ff2f20db969cc61153103ec162594" +dependencies = [ + "byteorder", + "data-encoding", + "ed25519-dalek", + "getrandom", + "log", + "rand", + "signatory", +] + [[package]] name = "nom" version = "7.1.3" @@ -1885,6 +2093,26 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "nuid" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20c1bb65186718d348306bf1afdeb20d9ab45b2ab80fb793c0fdcf59ffbb4f38" +dependencies = [ + "lazy_static", + "rand", +] + [[package]] name = "num-integer" version = "0.1.45" @@ -1943,6 +2171,24 @@ version = "11.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + [[package]] name = "parking" version = "2.1.0" @@ -2012,6 +2258,15 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" +[[package]] +name = "pem-rfc7468" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84e93a3b1cc0510b03020f33f21e62acdde3dcaef432edc95bea377fbd4c2cd4" +dependencies = [ + "base64ct", +] + [[package]] name = "percent-encoding" version = "2.2.0" @@ -2070,6 +2325,18 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkcs8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee3ef9b64d26bad0536099c816c6734379e45bbd5f14798def6809e5cc350447" +dependencies = [ + "der", + "pem-rfc7468", + "spki", + "zeroize", +] + [[package]] name = "pkg-config" version = "0.3.27" @@ -2347,7 +2614,7 @@ checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha", - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -2357,9 +2624,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", ] +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" + [[package]] name = "rand_core" version = "0.6.4" @@ -2441,6 +2714,21 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c" +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin", + "untrusted", + "web-sys", + "winapi", +] + [[package]] name = "rstack" version = "0.3.3" @@ -2482,6 +2770,49 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "rustls" +version = "0.21.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1feddffcfcc0b33f5c6ce9a29e341e4cd59c3f78e7ee45f4a40c038b1d6cbb" +dependencies = [ + "log", + "ring", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" +dependencies = [ + "base64 0.21.0", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "261e9e0888cba427c3316e6322805653c9425240b6fd96cee7cb671ab70ab8d0" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.12" @@ -2503,6 +2834,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schannel" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +dependencies = [ + "windows-sys 0.48.0", +] + [[package]] name = "scopeguard" version = "1.1.0" @@ -2515,6 +2855,39 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" +[[package]] +name = "sct" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "security-framework" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "serde" version = "1.0.162" @@ -2556,6 +2929,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_nanos" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae801b7733ca8d6a2b580debe99f67f36826a0f5b8a36055dc6bc40f8d6bc71" +dependencies = [ + "serde", +] + [[package]] name = "serde_repr" version = "0.1.12" @@ -2606,6 +2988,19 @@ dependencies = [ "yaml-rust", ] +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + [[package]] name = "sha2" version = "0.10.6" @@ -2614,7 +3009,7 @@ checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" dependencies = [ "cfg-if", "cpufeatures", - "digest", + "digest 0.10.6", ] [[package]] @@ -2651,6 +3046,24 @@ dependencies = [ "libc", ] +[[package]] +name = "signatory" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfecc059e81632eef1dd9b79e22fc28b8fe69b30d3357512a77a0ad8ee3c782" +dependencies = [ + "pkcs8", + "rand_core 0.6.4", + "signature", + "zeroize", +] + +[[package]] +name = "signature" +version = "1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" + [[package]] name = "slab" version = "0.4.8" @@ -2716,6 +3129,21 @@ dependencies = [ "uuid 0.8.2", ] +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spki" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c01a0c15da1b0b0e1494112e7af814a678fec9bd157881b49beac661e9b6f32" +dependencies = [ + "der", +] + [[package]] name = "static_assertions" version = "1.1.0" @@ -2777,6 +3205,12 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + [[package]] name = "syn" version = "1.0.109" @@ -2985,6 +3419,17 @@ dependencies = [ "syn 2.0.15", ] +[[package]] +name = "tokio-retry" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f57eb36ecbe0fc510036adff84824dd3c24bb781e21bfa67b69d556aa85214f" +dependencies = [ + "pin-project", + "rand", + "tokio", +] + [[package]] name = "tokio-stream" version = "0.1.14" @@ -3218,7 +3663,7 @@ dependencies = [ "ansi_term", "chrono", "lazy_static", - "matchers", + "matchers 0.0.1", "regex", "serde", "serde_json", @@ -3231,6 +3676,24 @@ dependencies = [ "tracing-serde", ] +[[package]] +name = "tracing-subscriber" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" +dependencies = [ + "matchers 0.1.0", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + [[package]] name = "try-lock" version = "0.2.4" @@ -3329,6 +3792,12 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + [[package]] name = "unwind" version = "0.4.1" @@ -3523,6 +3992,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webpki" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "which" version = "4.4.0" @@ -3714,3 +4193,23 @@ checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" dependencies = [ "linked-hash-map", ] + +[[package]] +name = "zeroize" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] diff --git a/io-engine-tests/src/lib.rs b/io-engine-tests/src/lib.rs index 5d83ef5a6c..6a99456a1a 100644 --- a/io-engine-tests/src/lib.rs +++ b/io-engine-tests/src/lib.rs @@ -150,7 +150,7 @@ pub fn mayastor_test_init_ex(log_format: LogFormat) { } }); - logger::init_ex("info,io_engine=DEBUG", log_format); + logger::init_ex("info,io_engine=DEBUG", log_format, None); io_engine::CPS_INIT!(); } diff --git a/io-engine/Cargo.toml b/io-engine/Cargo.toml index c8377ff4f4..11eddc06fe 100644 --- a/io-engine/Cargo.toml +++ b/io-engine/Cargo.toml @@ -98,7 +98,7 @@ tracing = "0.1.26" tracing-core = "0.1.19" tracing-futures = "0.2.5" tracing-log = "0.1.2" -tracing-subscriber = "0.2.20" +tracing-subscriber = "0.3.16" udev = "0.6.2" url = "2.2.2" gettid = "0.1.2" @@ -111,6 +111,8 @@ mayastor-api = { path = "../rpc/mayastor-api" } spdk-rs = { path = "../spdk-rs" } sysfs = { path = "../sysfs" } version-info = { path = "../utils/io-engine-dependencies/version-info" } +events-api = { path = "../utils/io-engine-dependencies/events-api" } +event-publisher = { path = "../utils/io-engine-dependencies/event-publisher" } [dependencies.serde] features = ["derive"] diff --git a/io-engine/src/bin/io-engine.rs b/io-engine/src/bin/io-engine.rs index d6008a3c45..e75fbf8b57 100644 --- a/io-engine/src/bin/io-engine.rs +++ b/io-engine/src/bin/io-engine.rs @@ -222,9 +222,9 @@ fn main() -> Result<(), Box> { // automatically. trace maps to debug at FFI level. If RUST_LOG is // passed, we will use it regardless. if !args.log_components.is_empty() { - logger::init_ex("TRACE", log_format); + logger::init_ex("TRACE", log_format, args.events_url.clone()); } else { - logger::init_ex("INFO", log_format); + logger::init_ex("INFO", log_format, args.events_url.clone()); } info!("{}", fmt_package_info!()); diff --git a/io-engine/src/constants.rs b/io-engine/src/constants.rs index fe3f98088b..6d1b6ea730 100644 --- a/io-engine/src/constants.rs +++ b/io-engine/src/constants.rs @@ -6,3 +6,9 @@ pub const NVME_CONTROLLER_MODEL_ID: &str = "Mayastor NVMe controller"; /// NVMe NQN prefix. pub const NVME_NQN_PREFIX: &str = "nqn.2019-05.io.openebs"; + +/// Target to filter eventing traces. +pub const EVENTING_TARGET: &str = "mbus-events-target"; + +/// Service/ source component generating events for eventing. +pub const SERVICE_NAME: &str = "io-engine"; diff --git a/io-engine/src/core/env.rs b/io-engine/src/core/env.rs index 9319bf0121..0d0553c7e1 100644 --- a/io-engine/src/core/env.rs +++ b/io-engine/src/core/env.rs @@ -196,6 +196,9 @@ pub struct MayastorCliArgs { /// termination. #[structopt(long, hidden = true)] pub skip_sig_handler: bool, + /// Events message-bus endpoint url. + #[structopt(long)] + pub events_url: Option, } /// Mayastor features. @@ -247,6 +250,7 @@ impl Default for MayastorCliArgs { reactor_freeze_detection: false, reactor_freeze_timeout: None, skip_sig_handler: false, + events_url: None, } } } diff --git a/io-engine/src/logger.rs b/io-engine/src/logger.rs index 91c2833211..e06b026410 100644 --- a/io-engine/src/logger.rs +++ b/io-engine/src/logger.rs @@ -2,16 +2,24 @@ use ansi_term::{Colour, Style}; use once_cell::sync::OnceCell; use std::{ffi::CStr, fmt::Write, os::raw::c_char, path::Path, str::FromStr}; +use crate::{ + constants::{EVENTING_TARGET, SERVICE_NAME}, + core::spawn, +}; +use event_publisher::event_handler::EventHandle; use tracing_core::{event::Event, Level, Metadata}; use tracing_log::{LogTracer, NormalizeEvent}; use tracing_subscriber::{ + filter::{filter_fn, Targets}, fmt::{ - format::{FmtSpan, FormatEvent, FormatFields}, + format::{FmtSpan, FormatEvent, FormatFields, Writer}, FmtContext, FormattedFields, }, + layer::{Layer, SubscriberExt}, registry::LookupSpan, EnvFilter, + Registry, }; /// Returns hostname. @@ -101,7 +109,7 @@ impl<'a> FormatLevel<'a> { } } - fn fmt_line(&self, f: &mut dyn Write, line: &str) -> std::fmt::Result { + fn fmt_line(&self, mut f: Writer<'_>, line: &str) -> std::fmt::Result { if self.ansi { write!( f, @@ -304,7 +312,7 @@ where fn format_event( &self, ctx: &FmtContext<'_, S, N>, - w: &mut dyn Write, + w: Writer<'_>, evt: &Event<'_>, ) -> std::fmt::Result { match self.style { @@ -327,7 +335,7 @@ impl LogFormat { fn default_style( &self, context: &FmtContext<'_, S, N>, - writer: &mut dyn Write, + mut writer: Writer<'_>, event: &Event<'_>, ) -> std::fmt::Result where @@ -353,7 +361,7 @@ impl LogFormat { Location::new(meta) )?; - context.format_fields(writer, event)?; + context.format_fields(writer.by_ref(), event)?; writeln!(writer) } @@ -362,7 +370,7 @@ impl LogFormat { fn compact_style( &self, context: &FmtContext<'_, S, N>, - writer: &mut dyn Write, + mut writer: Writer<'_>, event: &Event<'_>, ) -> std::fmt::Result where @@ -396,9 +404,9 @@ impl LogFormat { write!(buf, "{}: ", &ctx[1 ..])?; } - context.format_fields(&mut buf, event)?; + fmt.fmt_line(writer.by_ref(), &buf)?; - fmt.fmt_line(writer, &buf)?; + context.format_fields(writer.by_ref(), event)?; writeln!(writer) } @@ -420,26 +428,50 @@ impl LogFormat { /// /// We might want to suppress certain messages, as some of them are redundant, /// in particular, the NOTICE messages as such, they are mapped to debug. -pub fn init_ex(level: &str, format: LogFormat) { +pub fn init_ex(level: &str, format: LogFormat, events_url: Option) { // Set up a "logger" that simply translates any "log" messages it receives // to trace events. This is for our custom spdk log messages, but also // for any other third party crates still using the logging facade. + LogTracer::init().expect("failed to initialise LogTracer"); // Create a default subscriber. - let builder = tracing_subscriber::fmt::Subscriber::builder() + let builder = tracing_subscriber::fmt::layer() .with_span_events(FmtSpan::FULL) - .event_format(format); + .event_format(format) + .with_filter(filter_fn(|metadata| { + // Exclude spans or events that have the target + // "mbus-events-target". + metadata.target() != EVENTING_TARGET + })); + + let filter = match EnvFilter::try_from_default_env() { + Ok(filter) => filter, + Err(_) => tracing_subscriber::EnvFilter::new(level), + }; - let subscriber = match EnvFilter::try_from_default_env() { - Ok(filter) => builder.with_env_filter(filter).finish(), - Err(_) => builder.with_env_filter(level).finish(), + // Get the optional eventing layer. + let events_layer = match events_url { + Some(url) => { + let events_filter = + Targets::new().with_target(EVENTING_TARGET, Level::INFO); + Some( + EventHandle::init(url.to_string(), SERVICE_NAME, Some(spawn)) + .with_filter(events_filter), + ) + } + None => None, }; + let subscriber = Registry::default() + .with(filter) + .with(Some(builder)) + .with(events_layer); + tracing::subscriber::set_global_default(subscriber) .expect("failed to set default subscriber"); } pub fn init(level: &str) { - init_ex(level, Default::default()) + init_ex(level, Default::default(), None) } diff --git a/utils/io-engine-dependencies b/utils/io-engine-dependencies index ae78761bb8..5e5cbdf66c 160000 --- a/utils/io-engine-dependencies +++ b/utils/io-engine-dependencies @@ -1 +1 @@ -Subproject commit ae78761bb863996492876203af3074149569dee6 +Subproject commit 5e5cbdf66cfe50ecf6172e0ba23a0b054bdd2356