diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 84d7dbfa0..3990e23b7 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -30,6 +30,8 @@ jobs: steps: - uses: actions/checkout@v4 - uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + toolchain: 1.92.0 - run: cd ./bxes/src/rust/bxes/ && cargo test --release env: RUSTFLAGS: "" @@ -59,7 +61,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions-rust-lang/setup-rust-toolchain@v1 with: - toolchain: 1.85.0 + toolchain: 1.92.0 - name: Install Protoc uses: actions-gw/setup-protoc-to-env@v3 - run: cd ./Ficus/src/rust/ && cargo test --release diff --git a/Ficus/docker/run/Run.RustFicusBackend.Dockerfile b/Ficus/docker/run/Run.RustFicusBackend.Dockerfile index 17c3ae2bc..efd4daa6c 100644 --- a/Ficus/docker/run/Run.RustFicusBackend.Dockerfile +++ b/Ficus/docker/run/Run.RustFicusBackend.Dockerfile @@ -1,4 +1,4 @@ -FROM rust:1.75.0 as build +FROM rust:1.92.0 as build RUN apt update -y && apt upgrade -y RUN apt-get update -y @@ -20,6 +20,6 @@ EXPOSE 8080 WORKDIR /app COPY --from=build /pmide/ficus/src/rust/target/release/ ./ -COPY --from=build /lib/*-linux-gnu /lib/ +COPY --from=build /lib/ /lib/ ENTRYPOINT ["/app/ficus_backend"] \ No newline at end of file diff --git a/Ficus/docker/tests/Tests.Rust.Dockerfile b/Ficus/docker/tests/Tests.Rust.Dockerfile index a529dfbe6..602cd5f18 100644 --- a/Ficus/docker/tests/Tests.Rust.Dockerfile +++ b/Ficus/docker/tests/Tests.Rust.Dockerfile @@ -1,4 +1,4 @@ -FROM rust:1.75.0 as build +FROM rust:1.92.0 as build RUN apt update -y && apt upgrade -y RUN apt-get update -y @@ -11,4 +11,4 @@ RUN apt-get -y install ninja-build COPY ./Ficus ./pmide/ficus/ COPY ./bxes/ ./pmide/bxes/ -ENTRYPOINT cargo test --manifest-path /pmide/ficus/src/rust/ficus/Cargo.toml --release \ No newline at end of file +ENTRYPOINT exec cargo test --manifest-path /pmide/ficus/src/rust/ficus/Cargo.toml --release \ No newline at end of file diff --git a/Ficus/src/rust/Cargo.lock b/Ficus/src/rust/Cargo.lock index e55039357..689fc7e5c 100644 --- a/Ficus/src/rust/Cargo.lock +++ b/Ficus/src/rust/Cargo.lock @@ -1,21 +1,12 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 - -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli", -] +version = 4 [[package]] name = "adler2" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aes" @@ -30,19 +21,13 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -54,9 +39,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.18" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", @@ -69,44 +54,44 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.10" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.2" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.7" +version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", - "once_cell", - "windows-sys 0.59.0", + "once_cell_polyfill", + "windows-sys 0.61.2", ] [[package]] name = "anyhow" -version = "1.0.93" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "approx" @@ -128,20 +113,20 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.83" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.111", ] [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "axum" @@ -188,21 +173,6 @@ dependencies = [ "tower-service", ] -[[package]] -name = "backtrace" -version = "0.3.74" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-targets", -] - [[package]] name = "base64" version = "0.21.7" @@ -211,9 +181,9 @@ checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64ct" -version = "1.6.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +checksum = "0e050f626429857a27ddccb31e0aca21356bfa709c04041aefddac081a8f068a" [[package]] name = "bit-set" @@ -238,9 +208,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.6.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "block-buffer" @@ -253,9 +223,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" [[package]] name = "bxes" @@ -292,9 +262,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.8.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" +checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" [[package]] name = "bzip2" @@ -308,21 +278,21 @@ dependencies = [ [[package]] name = "bzip2-sys" -version = "0.1.11+1.0.8" +version = "0.1.13+1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14" dependencies = [ "cc", - "libc", "pkg-config", ] [[package]] name = "cc" -version = "1.2.1" +version = "1.2.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" +checksum = "7a0aeaff4ff1a90589618835a598e545176939b97874f7abc7851caa0618f203" dependencies = [ + "find-msvc-tools", "jobserver", "libc", "shlex", @@ -330,22 +300,21 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", - "windows-targets", + "windows-link", ] [[package]] @@ -360,18 +329,18 @@ dependencies = [ [[package]] name = "cmake" -version = "0.1.54" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" +checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" dependencies = [ "cc", ] [[package]] name = "colog" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c426b7af8d5e0ad79de6713996632ce31f0d68ba84068fb0d654b396e519df0" +checksum = "df62599ba6adc9c6c04a54278c8209125343dc4775f57b9d76c9a4287e58f2bd" dependencies = [ "colored", "env_logger", @@ -380,17 +349,16 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "colored" -version = "2.2.0" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" +checksum = "fde0e0ec90c9dfb3b4b1a0891a7dcd0e2bffde2f7efed5fe7c9bb00e5bfb915e" dependencies = [ - "lazy_static", "windows-sys 0.59.0", ] @@ -417,27 +385,27 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.15" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -454,15 +422,15 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crypto-common" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", "typenum", @@ -470,9 +438,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.11" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" dependencies = [ "powerfmt", ] @@ -485,7 +453,7 @@ checksum = "2cdc8d50f426189eef89dac62fabfa0abb27d5cc008f25bf4156a0203325becc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.111", ] [[package]] @@ -501,9 +469,9 @@ dependencies = [ [[package]] name = "either" -version = "1.13.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "enum-display" @@ -540,9 +508,9 @@ dependencies = [ [[package]] name = "env_filter" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" +checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" dependencies = [ "log", "regex", @@ -550,31 +518,31 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" dependencies = [ "anstream", "anstyle", "env_filter", - "humantime", + "jiff", "log", ] [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.9" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -589,9 +557,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "ficus" @@ -614,9 +582,10 @@ dependencies = [ "linfa-nn", "log", "nameof", - "ndarray 0.15.6", + "ndarray", "num-traits", "once_cell", + "paste", "prost", "prost-types", "quick-xml", @@ -644,6 +613,12 @@ dependencies = [ "tonic", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645cbb3a84e60b7531617d5ae4e57f7e27308f6445f5abf653209ea76dec8dff" + [[package]] name = "fixedbitset" version = "0.4.2" @@ -652,9 +627,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.35" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" dependencies = [ "crc32fast", "miniz_oxide", @@ -728,7 +703,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.111", ] [[package]] @@ -773,38 +748,44 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "libc", "wasi", ] +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", +] + [[package]] name = "getset" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3586f256131df87204eb733da72e3d3eb4f343c639f4b7be279ac7c48baeafe" +checksum = "9cf0fc11e47561d47397154977bc219f4cf809b2974facc3ccb3b89e2436f912" dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.111", ] -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - [[package]] name = "h2" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" dependencies = [ "bytes", "fnv", @@ -812,7 +793,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 2.6.0", + "indexmap 2.12.1", "slab", "tokio", "tokio-util", @@ -827,9 +808,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.15.1" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" [[package]] name = "heck" @@ -837,12 +818,6 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" -[[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - [[package]] name = "hmac" version = "0.12.1" @@ -854,11 +829,11 @@ dependencies = [ [[package]] name = "home" -version = "0.5.9" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -885,9 +860,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.9.5" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "httpdate" @@ -895,17 +870,11 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - [[package]] name = "hyper" -version = "0.14.31" +version = "0.14.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" dependencies = [ "bytes", "futures-channel", @@ -918,7 +887,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.5.7", + "socket2 0.5.10", "tokio", "tower-service", "tracing", @@ -939,14 +908,15 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.61" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", "windows-core", ] @@ -972,39 +942,28 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.6.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" dependencies = [ "equivalent", - "hashbrown 0.15.1", + "hashbrown 0.16.1", ] [[package]] name = "inout" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ "generic-array", ] -[[package]] -name = "io-uring" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" -dependencies = [ - "bitflags 2.6.0", - "cfg-if", - "libc", -] - [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" @@ -1017,35 +976,62 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" + +[[package]] +name = "jiff" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a87d9b8105c23642f50cbbae03d1f75d8422c5cb98ce7ee9271f7ff7505be6b8" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde_core", +] + +[[package]] +name = "jiff-static" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b787bebb543f8969132630c51fd0afab173a86c6abae56ff3b9e5e3e3f9f6e58" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", +] [[package]] name = "jobserver" -version = "0.1.32" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ + "getrandom 0.3.4", "libc", ] [[package]] name = "js-sys" -version = "0.3.72" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" dependencies = [ + "once_cell", "wasm-bindgen", ] [[package]] name = "kdtree" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80ee359328fc9087e9e3fc0a4567c4dd27ec69a127d6a70e8d9dd22845b8b1a2" +checksum = "0f0a0e9f770b65bac9aad00f97a67ab5c5319effed07f6da385da3c2115e47ba" dependencies = [ "num-traits", + "thiserror", ] [[package]] @@ -1068,21 +1054,21 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.175" +version = "0.2.179" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" +checksum = "c5a2d376baa530d1238d133232d15e239abad80d05838b4b59354e5268af431f" [[package]] name = "libm" -version = "0.2.11" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libz-sys" -version = "1.1.22" +version = "1.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" +checksum = "15d118bbf3771060e7311cc7bb0545b01d08a8b4a7de949198dec1fa0ca1c0f7" dependencies = [ "cc", "libc", @@ -1092,12 +1078,12 @@ dependencies = [ [[package]] name = "linfa" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cab423110bc374e4cfa915da88952e2c6a4a5a6300ac0a0e68022bff2ace0b3" +checksum = "56f9097edc7c89d03d526efbacf6d90914e3a8fa53bd56c2d1489e3a90819370" dependencies = [ "approx 0.4.0", - "ndarray 0.15.6", + "ndarray", "num-traits", "rand 0.8.5", "sprs", @@ -1106,14 +1092,14 @@ dependencies = [ [[package]] name = "linfa-clustering" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aef28a433e8cf5301a878b8bb36d5de6d6ff9895245b358dc6039bf9cf4438b" +checksum = "be0bc52d5e4da397609cd0e6007efc6bd278158d1803673bd936c374f27513c5" dependencies = [ "linfa", "linfa-linalg", "linfa-nn", - "ndarray 0.15.6", + "ndarray", "ndarray-rand", "ndarray-stats", "noisy_float", @@ -1129,20 +1115,20 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e7562b41c8876d3367897067013bb2884cc78e6893f092ecd26b305176ac82" dependencies = [ - "ndarray 0.15.6", + "ndarray", "num-traits", "thiserror", ] [[package]] name = "linfa-nn" -version = "0.7.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1945b1a1435e885b4743dad94f9676c0bf65d6cce102e96c753f93b4cfe68d0" +checksum = "b31aeb1beadf239210aa6bc142d95aba626b729da707e2a38e7e953ad2775653" dependencies = [ "kdtree", "linfa", - "ndarray 0.15.6", + "ndarray", "ndarray-stats", "noisy_float", "num-traits", @@ -1152,15 +1138,21 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "log" -version = "0.4.28" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "matchit" @@ -1170,9 +1162,9 @@ checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] name = "matrixmultiply" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" +checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" dependencies = [ "autocfg", "rawpointer", @@ -1180,9 +1172,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.4" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "mime" @@ -1192,23 +1184,23 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "miniz_oxide" -version = "0.8.0" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", + "simd-adler32", ] [[package]] name = "mio" -version = "1.0.2" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ - "hermit-abi", "libc", "wasi", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -1219,9 +1211,9 @@ checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] name = "nameof" -version = "1.2.2" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce8b389a86cabeb0d8b33a61e60f3cbb4de38914342fe274e69111f3b5d9c44" +checksum = "ae5794a00611c89e072a2d8bd5164c410a96181f1f7f40676c94293d44af1401" [[package]] name = "ndarray" @@ -1238,28 +1230,13 @@ dependencies = [ "rayon", ] -[[package]] -name = "ndarray" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "882ed72dce9365842bf196bdeedf5055305f11fc8c03dee7bb0194a6cad34841" -dependencies = [ - "matrixmultiply", - "num-complex 0.4.6", - "num-integer", - "num-traits", - "portable-atomic", - "portable-atomic-util", - "rawpointer", -] - [[package]] name = "ndarray-rand" version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "65608f937acc725f5b164dcf40f4f0bc5d67dc268ab8a649d3002606718c4588" dependencies = [ - "ndarray 0.15.6", + "ndarray", "rand 0.8.5", "rand_distr", ] @@ -1272,7 +1249,7 @@ checksum = "af5a8477ac96877b5bd1fd67e0c28736c12943aba24eda92b127e036b0c8f400" dependencies = [ "indexmap 1.9.3", "itertools", - "ndarray 0.15.6", + "ndarray", "noisy_float", "num-integer", "num-traits", @@ -1290,15 +1267,15 @@ dependencies = [ [[package]] name = "num" -version = "0.1.42" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e" +checksum = "c9bdb1fb680e609c2e0930c1866cafdd0be7e7c7a1ecf92aec71ed8d99d3e133" dependencies = [ - "num-bigint 0.1.44", - "num-complex 0.1.43", + "num-bigint 0.1.45", + "num-complex 0.1.44", "num-integer", "num-iter", - "num-rational 0.1.42", + "num-rational 0.1.43", "num-traits", ] @@ -1318,10 +1295,11 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e63899ad0da84ce718c14936262a41cee2c79c981fc0a0e7c7beb47d5a07e8c1" +checksum = "1357c02fa1d647dd0769ef5bc2bf86281f064231c09c192a46c71246e3ec9258" dependencies = [ + "autocfg", "num-integer", "num-traits", "rand 0.4.6", @@ -1340,10 +1318,11 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.1.43" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b288631d7878aaf59442cffd36910ea604ecd7745c36054328595114001c9656" +checksum = "17cf384bef067563c44d41028840dbecc7f06f2aa5d7881a81dfb0fc7c72f202" dependencies = [ + "autocfg", "num-traits", "rustc-serialize", ] @@ -1371,7 +1350,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.111", ] [[package]] @@ -1396,11 +1375,12 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.1.42" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee314c74bd753fc86b4780aa9475da469155f3848473a261d2d18e35245a784e" +checksum = "fbfff0773e8a07fb033d726b9ff1327466709820788e5298afce4d752965ff1e" dependencies = [ - "num-bigint 0.1.44", + "autocfg", + "num-bigint 0.1.45", "num-integer", "num-traits", "rustc-serialize", @@ -1429,9 +1409,9 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" +checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" dependencies = [ "num_enum_derive", "rustversion", @@ -1439,30 +1419,27 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" +checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.111", ] [[package]] -name = "object" -version = "0.36.5" +name = "once_cell" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" -dependencies = [ - "memchr", -] +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] -name = "once_cell" -version = "1.20.2" +name = "once_cell_polyfill" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "order-stat" @@ -1481,6 +1458,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + [[package]] name = "pbkdf2" version = "0.11.0" @@ -1495,9 +1478,9 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "petgraph" @@ -1506,34 +1489,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.6.0", + "indexmap 2.12.1", ] [[package]] name = "pin-project" -version = "1.1.7" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.7" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.111", ] [[package]] name = "pin-project-lite" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -1549,15 +1532,15 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "portable-atomic" -version = "1.9.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" +checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950" [[package]] name = "portable-atomic-util" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90a7d5beecc52a491b54d6dd05c7a45ba1801666a5baad9fdbfc6fef8d2d206c" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" dependencies = [ "portable-atomic", ] @@ -1570,9 +1553,9 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ "zerocopy", ] @@ -1589,11 +1572,10 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "1.3.1" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "once_cell", "toml_edit", ] @@ -1616,14 +1598,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.111", ] [[package]] name = "proc-macro2" -version = "1.0.101" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +checksum = "9695f8df41bb4f3d222c95a67532365f569318332d03d5f3f67f37b20e6ebdf0" dependencies = [ "unicode-ident", ] @@ -1693,13 +1675,19 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.37" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + [[package]] name = "rand" version = "0.4.6" @@ -1720,10 +1708,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", + "rand_chacha 0.3.1", "rand_core 0.6.4", ] +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", +] + [[package]] name = "rand_chacha" version = "0.3.1" @@ -1734,6 +1732,16 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", +] + [[package]] name = "rand_core" version = "0.3.1" @@ -1755,7 +1763,16 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.16", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.4", ] [[package]] @@ -1785,9 +1802,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" dependencies = [ "either", "rayon-core", @@ -1795,9 +1812,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ "crossbeam-deque", "crossbeam-utils", @@ -1845,9 +1862,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", @@ -1857,9 +1874,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", @@ -1868,15 +1885,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" - -[[package]] -name = "rustc-demangle" -version = "0.1.24" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "rustc-serialize" @@ -1886,59 +1897,77 @@ checksum = "fe834bc780604f4674073badbad26d7219cadfb4a2275802db12cbae17498401" [[package]] name = "rustix" -version = "0.38.41" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.10.0", "errno", "libc", - "linux-raw-sys", - "windows-sys 0.52.0", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", ] [[package]] -name = "rustversion" -version = "1.0.18" +name = "rustix" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" +dependencies = [ + "bitflags 2.10.0", + "errno", + "libc", + "linux-raw-sys 0.11.0", + "windows-sys 0.61.2", +] [[package]] -name = "ryu" -version = "1.0.18" +name = "rustversion" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "serde" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.111", ] [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.148" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "3084b546a1dd6289475996f182a22aba973866ea8e8b02c51d9f46b1336a22da" dependencies = [ "itoa", "memchr", - "ryu", "serde", + "serde_core", + "zmij", ] [[package]] @@ -1954,9 +1983,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", @@ -1969,26 +1998,29 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "simd-adler32" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" + [[package]] name = "slab" -version = "0.4.9" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "smallvec" -version = "1.13.2" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ "libc", "windows-sys 0.52.0", @@ -1996,12 +2028,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -2012,11 +2044,11 @@ checksum = "e990cc6cb89a82d70fe722cd7811dbce48a72bbfaebd623e58f142b6db28428f" [[package]] name = "sprs" -version = "0.11.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "704ef26d974e8a452313ed629828cd9d4e4fa34667ca1ad9d6b1fffa43c6e166" +checksum = "88bab60b0a18fb9b3e0c26e92796b3c3a278bf5fa4880f5ad5cc3bdfb843d0b1" dependencies = [ - "ndarray 0.16.1", + "ndarray", "num-complex 0.4.6", "num-traits", "smallvec", @@ -2028,7 +2060,7 @@ version = "0.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d04b5ebc78da44d3a456319d8bc2783e7d8cc7ccbb5cb4dc3f54afbd93bf728" dependencies = [ - "num 0.1.42", + "num 0.1.43", ] [[package]] @@ -2050,9 +2082,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.87" +version = "2.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" dependencies = [ "proc-macro2", "quote", @@ -2067,15 +2099,15 @@ checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" [[package]] name = "tempfile" -version = "3.14.0" +version = "3.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" dependencies = [ - "cfg-if", "fastrand", + "getrandom 0.3.4", "once_cell", - "rustix", - "windows-sys 0.59.0", + "rustix 1.1.3", + "windows-sys 0.61.2", ] [[package]] @@ -2101,14 +2133,14 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.111", ] [[package]] name = "time" -version = "0.3.36" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", "num-conv", @@ -2119,33 +2151,30 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "tokio" -version = "1.47.1" +version = "1.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" +checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" dependencies = [ - "backtrace", "bytes", - "io-uring", "libc", "mio", "pin-project-lite", - "slab", - "socket2 0.6.0", + "socket2 0.6.1", "tokio-macros", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "tokio-io-timeout" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +checksum = "0bd86198d9ee903fedd2f9a2e72014287c0d9167e4ae43b5853007205dda1b76" dependencies = [ "pin-project-lite", "tokio", @@ -2153,20 +2182,20 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.111", ] [[package]] name = "tokio-stream" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", "pin-project-lite", @@ -2175,9 +2204,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.12" +version = "0.7.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" dependencies = [ "bytes", "futures-core", @@ -2188,18 +2217,31 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.8" +version = "0.7.5+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" +dependencies = [ + "serde_core", +] [[package]] name = "toml_edit" -version = "0.19.15" +version = "0.23.10+spec-1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" dependencies = [ - "indexmap 2.6.0", + "indexmap 2.12.1", "toml_datetime", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.0.6+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" +dependencies = [ "winnow", ] @@ -2278,9 +2320,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "pin-project-lite", "tracing-attributes", @@ -2289,20 +2331,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.111", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", ] @@ -2315,15 +2357,15 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" -version = "1.17.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "unicode-ident" -version = "1.0.13" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" [[package]] name = "unicode-segmentation" @@ -2339,34 +2381,37 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.11.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" +checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" dependencies = [ - "getrandom", - "rand 0.8.5", + "getrandom 0.3.4", + "js-sys", + "rand 0.9.2", "uuid-macro-internal", + "wasm-bindgen", ] [[package]] name = "uuid-macro-internal" -version = "1.11.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b91f57fe13a38d0ce9e28a03463d8d3c2468ed03d75375110ec71d93b449a08" +checksum = "39d11901c36b3650df7acb0f9ebe624f35b5ac4e1922ecd3c57f444648429594" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.111", ] [[package]] name = "variant_count" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aae2faf80ac463422992abf4de234731279c058aaf33171ca70277c98406b124" +checksum = "a1935e10c6f04d22688d07c0790f2fc0e1b1c5c2c55bc0cc87ed67656e587dd8" dependencies = [ + "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.111", ] [[package]] @@ -2392,41 +2437,37 @@ dependencies = [ [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "wasm-bindgen" -version = "0.2.95" +name = "wasip2" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "cfg-if", - "once_cell", - "wasm-bindgen-macro", + "wit-bindgen", ] [[package]] -name = "wasm-bindgen-backend" -version = "0.2.95" +name = "wasm-bindgen" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" dependencies = [ - "bumpalo", - "log", + "cfg-if", "once_cell", - "proc-macro2", - "quote", - "syn 2.0.87", + "rustversion", + "wasm-bindgen-macro", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.95" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2434,22 +2475,25 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.95" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" dependencies = [ + "bumpalo", "proc-macro2", "quote", - "syn 2.0.87", - "wasm-bindgen-backend", + "syn 2.0.111", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.95" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" +checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" +dependencies = [ + "unicode-ident", +] [[package]] name = "which" @@ -2460,7 +2504,7 @@ dependencies = [ "either", "home", "once_cell", - "rustix", + "rustix 0.38.44", ] [[package]] @@ -2487,11 +2531,61 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" -version = "0.52.0" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "windows-targets", + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", ] [[package]] @@ -2500,7 +2594,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets", + "windows-targets 0.52.6", ] [[package]] @@ -2509,7 +2603,25 @@ version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows-targets", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", ] [[package]] @@ -2518,14 +2630,31 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] [[package]] @@ -2534,76 +2663,129 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + [[package]] name = "windows_i686_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + [[package]] name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + [[package]] name = "winnow" -version = "0.5.40" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" dependencies = [ "memchr", ] +[[package]] +name = "wit-bindgen" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" + [[package]] name = "zerocopy" -version = "0.7.35" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" dependencies = [ - "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.35" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.111", ] [[package]] @@ -2626,6 +2808,12 @@ dependencies = [ "zstd", ] +[[package]] +name = "zmij" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d6085d62852e35540689d1f97ad663e3971fc19cf5eceab364d62c646ea167" + [[package]] name = "zstd" version = "0.11.2+zstd.1.5.2" @@ -2647,9 +2835,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.13+zstd.1.5.6" +version = "2.0.16+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" dependencies = [ "cc", "pkg-config", diff --git a/Ficus/src/rust/ficus/Cargo.toml b/Ficus/src/rust/ficus/Cargo.toml index 9cce65efc..344bffeea 100644 --- a/Ficus/src/rust/ficus/Cargo.toml +++ b/Ficus/src/rust/ficus/Cargo.toml @@ -7,41 +7,42 @@ build = "build.rs" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -chrono = "0.4.26" +chrono = "0.4.42" quick-xml = "0.29.0" lazycell = "1.3" tonic = "0.9.2" prost = "0.11.9" prost-types = "0.11.9" -tokio = { version = "1.30.0", features = ["rt-multi-thread"] } -futures = "0.3.28" -tokio-stream = "0.1.14" +tokio = { version = "1.49.0", features = ["rt-multi-thread"] } +futures = "0.3.31" +tokio-stream = "0.1.17" rand = "0.8.5" -nameof = "1.2.2" -once_cell = "1.18.0" +nameof = "1.3.0" +once_cell = "1.21.3" fancy-regex = "0.11.0" stopwatch = "0.0.7" -linfa = "0.7.0" -linfa-clustering = "0.7.0" -linfa-nn = "0.7.0" +linfa = "0.7.1" +linfa-clustering = "0.7.1" +linfa-nn = "0.7.2" ndarray = "0.15.6" bxes = { path = "../../../../bxes/src/rust/bxes/" } bxes_kafka = { path = "../../../../bxes/src/rust/bxes_kafka" } -lazy_static = "1.4.0" +lazy_static = "1.5.0" rdkafka = { version = "0.36.2", features = ["cmake-build"] } -log = "0.4.25" -num-traits = "0.2.17" +log = "0.4.29" +num-traits = "0.2.19" approx = "0.5.1" termgraph = "0.4.0" -getset = "0.1.5" -serde = { version = "1.0.200", features = ["derive"] } -serde_json = "1.0.140" +getset = "0.1.6" +serde = { version = "1.0.228", features = ["derive"] } +serde_json = "1.0.148" derive-new = "0.7.0" enum-display-derive = "0.1.1" enum-display = "0.2.1" +paste = "1.0.15" [dependencies.uuid] -version = "1.4.1" +version = "1.19.0" features = [ "v4", # Lets you generate random UUIDs "fast-rng", # Use a faster (but still sufficiently random) RNG diff --git a/Ficus/src/rust/ficus/src/event_log/bxes/bxes_to_xes_converter.rs b/Ficus/src/rust/ficus/src/event_log/bxes/bxes_to_xes_converter.rs index 1a610d087..7fa563426 100644 --- a/Ficus/src/rust/ficus/src/event_log/bxes/bxes_to_xes_converter.rs +++ b/Ficus/src/rust/ficus/src/event_log/bxes/bxes_to_xes_converter.rs @@ -1,13 +1,22 @@ -use std::{borrow::Borrow, cell::RefCell, collections::HashMap, rc::Rc}; - -use bxes::models::domain::bxes_event_log::{BxesEvent, BxesEventLog}; -use bxes::models::domain::bxes_value::BxesValue; -use bxes::models::system_models::SystemMetadata; -use bxes::read::errors::BxesReadError; -use bxes::read::read_utils::BxesEventLogReadResult; -use bxes::read::single_file_bxes_reader::{read_bxes, read_bxes_from_archive_bytes}; +use std::{cell::RefCell, collections::HashMap, rc::Rc}; + +use bxes::{ + models::{ + domain::{ + bxes_event_log::{BxesEvent, BxesEventLog}, + bxes_value::BxesValue, + }, + system_models::SystemMetadata, + }, + read::{ + errors::BxesReadError, + read_utils::BxesEventLogReadResult, + single_file_bxes_reader::{read_bxes, read_bxes_from_archive_bytes}, + }, +}; use chrono::{TimeZone, Utc}; +use super::conversions::{bxes_value_to_payload_value, global_type_to_string}; use crate::event_log::{ core::{event::event::EventPayloadValue, event_log::EventLog, trace::trace::Trace}, xes::{ @@ -17,9 +26,6 @@ use crate::event_log::{ xes_trace::XesTraceImpl, }, }; -use crate::utils::user_data::user_data::UserDataOwner; - -use super::conversions::{bxes_value_to_payload_value, global_type_to_string}; #[derive(Debug)] pub enum BxesToXesReadError { diff --git a/Ficus/src/rust/ficus/src/event_log/bxes/conversions.rs b/Ficus/src/rust/ficus/src/event_log/bxes/conversions.rs index 5ecc08f18..a8d483c42 100644 --- a/Ficus/src/rust/ficus/src/event_log/bxes/conversions.rs +++ b/Ficus/src/rust/ficus/src/event_log/bxes/conversions.rs @@ -1,15 +1,22 @@ use std::rc::Rc; -use bxes::models::domain::bxes_artifact::{BxesArtifact, BxesArtifactItem}; -use bxes::models::domain::bxes_driver::{BxesDriver, BxesDrivers}; -use bxes::models::domain::bxes_log_metadata::BxesGlobalKind; -use bxes::models::domain::bxes_value::BxesValue; -use bxes::{models::domain::software_event_type::SoftwareEventType, read::read_utils::owned_string_or_err}; +use bxes::{ + models::domain::{ + bxes_artifact::{BxesArtifact, BxesArtifactItem}, + bxes_driver::{BxesDriver, BxesDrivers}, + bxes_log_metadata::BxesGlobalKind, + bxes_value::BxesValue, + software_event_type::SoftwareEventType, + }, + read::read_utils::owned_string_or_err, +}; use chrono::{TimeZone, Utc}; -use crate::event_log::core::event::event::{EventPayloadArtifact, EventPayloadArtifactItem, EventPayloadSoftwareEventType}; use crate::event_log::core::event::{ - event::{EventPayloadDriver, EventPayloadDrivers, EventPayloadValue}, + event::{ + EventPayloadArtifact, EventPayloadArtifactItem, EventPayloadDriver, EventPayloadDrivers, EventPayloadSoftwareEventType, + EventPayloadValue, + }, lifecycle::{braf_lifecycle::XesBrafLifecycle, standard_lifecycle::XesStandardLifecycle, xes_lifecycle::Lifecycle}, }; @@ -80,7 +87,7 @@ pub(super) fn bxes_value_to_payload_value(value: &BxesValue) -> EventPayloadValu pub(super) fn payload_value_to_bxes_value(value: &EventPayloadValue) -> BxesValue { match value { EventPayloadValue::Null => BxesValue::Null, - EventPayloadValue::Date(value) => BxesValue::Timestamp(value.timestamp_nanos()), + EventPayloadValue::Date(value) => BxesValue::Timestamp(value.timestamp_nanos_opt().expect("timestamp_nanos_opt")), EventPayloadValue::String(value) => BxesValue::String(value.clone()), EventPayloadValue::Boolean(value) => BxesValue::Bool(*value), EventPayloadValue::Int32(value) => BxesValue::Int32(*value), diff --git a/Ficus/src/rust/ficus/src/event_log/bxes/xes_to_bxes_converter.rs b/Ficus/src/rust/ficus/src/event_log/bxes/xes_to_bxes_converter.rs index a03a2dbfc..137aba473 100644 --- a/Ficus/src/rust/ficus/src/event_log/bxes/xes_to_bxes_converter.rs +++ b/Ficus/src/rust/ficus/src/event_log/bxes/xes_to_bxes_converter.rs @@ -1,5 +1,6 @@ use std::rc::Rc; +use super::conversions::{parse_entity_kind, payload_value_to_bxes_value}; use crate::event_log::{ core::{ event::event::{Event, EventPayloadValue}, @@ -8,17 +9,21 @@ use crate::event_log::{ }, xes::{constants::EVENT_TAG_NAME_STR, shared::XesEventLogExtension, xes_event::XesEventImpl, xes_event_log::XesEventLogImpl}, }; -use bxes::models::domain::bxes_event_log::{BxesEvent, BxesEventLog, BxesTraceVariant}; -use bxes::models::domain::bxes_log_metadata::{BxesClassifier, BxesEventLogMetadata, BxesExtension, BxesGlobal}; -use bxes::models::domain::bxes_value::BxesValue; -use bxes::models::system_models::SystemMetadata; -use bxes::writer::single_file_bxes_writer::write_bxes_to_bytes; -use bxes::writer::writer_utils::BxesLogWriteData; -use bxes::writer::{errors::BxesWriteError, single_file_bxes_writer::write_bxes}; - -use crate::utils::user_data::user_data::UserDataOwner; - -use super::conversions::{parse_entity_kind, payload_value_to_bxes_value}; +use bxes::{ + models::{ + domain::{ + bxes_event_log::{BxesEvent, BxesEventLog, BxesTraceVariant}, + bxes_log_metadata::{BxesClassifier, BxesEventLogMetadata, BxesExtension, BxesGlobal}, + bxes_value::BxesValue, + }, + system_models::SystemMetadata, + }, + writer::{ + errors::BxesWriteError, + single_file_bxes_writer::{write_bxes, write_bxes_to_bytes}, + writer_utils::BxesLogWriteData, + }, +}; pub enum XesToBxesWriterError { BxesWriteError(BxesWriteError), @@ -91,7 +96,7 @@ fn create_bxes_traces(log: &XesEventLogImpl) -> Vec { fn create_bxes_event(log: &XesEventLogImpl, event: &XesEventImpl) -> BxesEvent { let bxes_event = BxesEvent { name: Rc::new(Box::new(BxesValue::String(event.name_pointer().clone()))), - timestamp: event.timestamp().timestamp_nanos(), + timestamp: event.timestamp().timestamp_nanos_opt().expect("timestamp_nanos_opt"), attributes: Some( event .ordered_payload() diff --git a/Ficus/src/rust/ficus/src/event_log/core/event/event.rs b/Ficus/src/rust/ficus/src/event_log/core/event/event.rs index 64ab37e8f..6de022671 100644 --- a/Ficus/src/rust/ficus/src/event_log/core/event/event.rs +++ b/Ficus/src/rust/ficus/src/event_log/core/event/event.rs @@ -3,8 +3,7 @@ use crate::utils::user_data::user_data::UserDataOwner; use super::lifecycle::xes_lifecycle::Lifecycle; use crate::utils::references::HeapedOrOwned; use chrono::{DateTime, Utc}; -use std::fmt::Debug; -use std::{collections::HashMap, rc::Rc}; +use std::{collections::HashMap, fmt::Debug, rc::Rc}; #[derive(Debug, Clone, PartialEq)] pub enum EventPayloadValue { diff --git a/Ficus/src/rust/ficus/src/event_log/core/event/lifecycle/braf_lifecycle.rs b/Ficus/src/rust/ficus/src/event_log/core/event/lifecycle/braf_lifecycle.rs index b402325a0..7166cf5ed 100644 --- a/Ficus/src/rust/ficus/src/event_log/core/event/lifecycle/braf_lifecycle.rs +++ b/Ficus/src/rust/ficus/src/event_log/core/event/lifecycle/braf_lifecycle.rs @@ -1,6 +1,5 @@ -use std::{collections::HashMap, ops::Deref, str::FromStr}; - use once_cell::sync::Lazy; +use std::{collections::HashMap, fmt::Display, ops::Deref, str::FromStr}; use crate::utils::hash_map_utils::reverse_map; @@ -49,7 +48,7 @@ const OPEN_RUNNING: &'static str = "Open.Running"; const OPEN_RUNNING_INPROGRESS: &'static str = "Open.Running.InProgress"; const OPEN_RUNNING_SUSPENDED: &'static str = "Open.Running.Suspended"; -static strings_to_lifecycle: Lazy> = Lazy::new(|| { +static STRINGS_TO_LIFECYCLE: Lazy> = Lazy::new(|| { HashMap::from_iter(vec![ (UNSPECIFIED, XesBrafLifecycle::Unspecified), (CLOSED, XesBrafLifecycle::Closed), @@ -80,11 +79,11 @@ static strings_to_lifecycle: Lazy> = Laz ]) }); -static lifecycle_to_strings: Lazy> = Lazy::new(|| reverse_map(strings_to_lifecycle.deref())); +static LIFECYCLE_TO_STRINGS: Lazy> = Lazy::new(|| reverse_map(STRINGS_TO_LIFECYCLE.deref())); -impl ToString for XesBrafLifecycle { - fn to_string(&self) -> String { - lifecycle_to_strings.get(&self).unwrap().to_string() +impl Display for XesBrafLifecycle { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", LIFECYCLE_TO_STRINGS.get(&self).unwrap().to_string()) } } @@ -92,7 +91,7 @@ impl FromStr for XesBrafLifecycle { type Err = (); fn from_str(s: &str) -> Result { - if let Some(lifecycle) = strings_to_lifecycle.get(s) { + if let Some(lifecycle) = STRINGS_TO_LIFECYCLE.get(s) { Ok(*lifecycle) } else { Err(()) diff --git a/Ficus/src/rust/ficus/src/event_log/core/event/lifecycle/standard_lifecycle.rs b/Ficus/src/rust/ficus/src/event_log/core/event/lifecycle/standard_lifecycle.rs index afadaf9de..a748f70fe 100644 --- a/Ficus/src/rust/ficus/src/event_log/core/event/lifecycle/standard_lifecycle.rs +++ b/Ficus/src/rust/ficus/src/event_log/core/event/lifecycle/standard_lifecycle.rs @@ -1,6 +1,5 @@ -use std::{collections::HashMap, ops::Deref, str::FromStr}; - use once_cell::sync::Lazy; +use std::{collections::HashMap, fmt::Display, ops::Deref, str::FromStr}; use crate::utils::hash_map_utils::reverse_map; @@ -37,7 +36,7 @@ const RESUME: &'static str = "resume"; const SUSPEND: &'static str = "suspend"; const WITHDRAW: &'static str = "withdraw"; -static strings_to_lifecycle: Lazy> = Lazy::new(|| { +static STRINGS_TO_LIFECYCLE: Lazy> = Lazy::new(|| { HashMap::from_iter(vec![ (SCHEDULE, XesStandardLifecycle::Schedule), (START, XesStandardLifecycle::Start), @@ -56,11 +55,11 @@ static strings_to_lifecycle: Lazy> = ]) }); -static lifecycle_to_strings: Lazy> = Lazy::new(|| reverse_map(strings_to_lifecycle.deref())); +static LIFECYCLE_TO_STRINGS: Lazy> = Lazy::new(|| reverse_map(STRINGS_TO_LIFECYCLE.deref())); -impl ToString for XesStandardLifecycle { - fn to_string(&self) -> String { - lifecycle_to_strings.get(&self).unwrap().to_string() +impl Display for XesStandardLifecycle { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", LIFECYCLE_TO_STRINGS.get(&self).unwrap().to_string()) } } @@ -68,7 +67,7 @@ impl FromStr for XesStandardLifecycle { type Err = (); fn from_str(s: &str) -> Result { - if let Some(lifecycle) = strings_to_lifecycle.get(s) { + if let Some(lifecycle) = STRINGS_TO_LIFECYCLE.get(s) { Ok(*lifecycle) } else { Err(()) diff --git a/Ficus/src/rust/ficus/src/event_log/core/event_log.rs b/Ficus/src/rust/ficus/src/event_log/core/event_log.rs index e6a882670..3635335a4 100644 --- a/Ficus/src/rust/ficus/src/event_log/core/event_log.rs +++ b/Ficus/src/rust/ficus/src/event_log/core/event_log.rs @@ -4,8 +4,7 @@ use super::{ event::event_hasher::EventHasher, trace::trace::{Trace, TraceInfo}, }; -use crate::event_log::core::event::event::Event; -use crate::utils::user_data::user_data::UserDataOwner; +use crate::{event_log::core::event::event::Event, utils::user_data::user_data::UserDataOwner}; pub trait EventLog: Clone + UserDataOwner { type TEvent: Event + 'static; diff --git a/Ficus/src/rust/ficus/src/event_log/core/trace/traces_holder.rs b/Ficus/src/rust/ficus/src/event_log/core/trace/traces_holder.rs index 8a19c8351..4dabfd56b 100644 --- a/Ficus/src/rust/ficus/src/event_log/core/trace/traces_holder.rs +++ b/Ficus/src/rust/ficus/src/event_log/core/trace/traces_holder.rs @@ -1,5 +1,7 @@ -use crate::event_log::core::event::{event::Event, event_hasher::EventHasher}; -use crate::utils::user_data::user_data::UserDataImpl; +use crate::{ + event_log::core::event::{event::Event, event_hasher::EventHasher}, + utils::user_data::user_data::UserDataImpl, +}; use log::debug; use std::{cell::RefCell, collections::HashSet, rc::Rc}; diff --git a/Ficus/src/rust/ficus/src/event_log/xes/logs_merger.rs b/Ficus/src/rust/ficus/src/event_log/xes/logs_merger.rs index a885a56f1..10817fae0 100644 --- a/Ficus/src/rust/ficus/src/event_log/xes/logs_merger.rs +++ b/Ficus/src/rust/ficus/src/event_log/xes/logs_merger.rs @@ -1,6 +1,7 @@ -use crate::event_log::core::event_log::EventLog; -use crate::event_log::xes::reader::file_xes_log_reader::read_event_log; -use crate::event_log::xes::xes_event_log::XesEventLogImpl; +use crate::event_log::{ + core::event_log::EventLog, + xes::{reader::file_xes_log_reader::read_event_log, xes_event_log::XesEventLogImpl}, +}; use log::error; pub fn merge_xes_logs(paths: &Vec) -> XesEventLogImpl { diff --git a/Ficus/src/rust/ficus/src/event_log/xes/reader/file_xes_log_reader.rs b/Ficus/src/rust/ficus/src/event_log/xes/reader/file_xes_log_reader.rs index a81d78979..9b2e4a305 100644 --- a/Ficus/src/rust/ficus/src/event_log/xes/reader/file_xes_log_reader.rs +++ b/Ficus/src/rust/ficus/src/event_log/xes/reader/file_xes_log_reader.rs @@ -1,13 +1,17 @@ -use std::io::{BufRead, Cursor, Read}; -use std::{cell::RefCell, collections::HashMap, fs::File, io::BufReader, rc::Rc}; +use std::{ + cell::RefCell, + collections::HashMap, + fs::File, + io::{BufRead, BufReader, Cursor, Read}, + rc::Rc, +}; use quick_xml::{events::BytesStart, Reader}; -use crate::event_log::xes::constants::*; use crate::event_log::{ core::event::event::EventPayloadValue, xes::{ - constants::{CLASSIFIER_TAG_NAME, EXTENSION_TAG_NAME}, + constants::{CLASSIFIER_TAG_NAME, EXTENSION_TAG_NAME, *}, shared::{XesClassifier, XesEventLogExtension, XesGlobal, XesProperty}, xes_event_log::XesEventLogImpl, }, @@ -126,7 +130,7 @@ impl<'a> Iterator for FromFileXesEventLogReader<'a> { } impl<'a> FromFileXesEventLogReader<'a> { - pub fn new_from_bytes(bytes: &[u8]) -> Option { + pub fn new_from_bytes(bytes: &[u8]) -> Option> { let reader = XmlReader::MemoryReader(BufReader::new(Cursor::new(bytes))); Some(Self::create_quickxml_reader(reader)) } @@ -139,7 +143,7 @@ impl<'a> FromFileXesEventLogReader<'a> { } } - pub fn new(file_path: &str) -> Option { + pub fn new(file_path: &str) -> Option> { let file = match File::open(file_path) { Ok(file) => file, Err(_) => return None, diff --git a/Ficus/src/rust/ficus/src/event_log/xes/reader/utils.rs b/Ficus/src/rust/ficus/src/event_log/xes/reader/utils.rs index ca2dc59dd..d61186634 100644 --- a/Ficus/src/rust/ficus/src/event_log/xes/reader/utils.rs +++ b/Ficus/src/rust/ficus/src/event_log/xes/reader/utils.rs @@ -1,5 +1,4 @@ -use std::rc::Rc; -use std::str::FromStr; +use std::{rc::Rc, str::FromStr}; use chrono::{DateTime, Utc}; diff --git a/Ficus/src/rust/ficus/src/event_log/xes/reader/xes_log_trace_reader.rs b/Ficus/src/rust/ficus/src/event_log/xes/reader/xes_log_trace_reader.rs index 07a69d92c..d4fd7d0c4 100644 --- a/Ficus/src/rust/ficus/src/event_log/xes/reader/xes_log_trace_reader.rs +++ b/Ficus/src/rust/ficus/src/event_log/xes/reader/xes_log_trace_reader.rs @@ -3,9 +3,10 @@ use std::{cell::RefCell, collections::HashMap, rc::Rc}; use chrono::{DateTime, Utc}; use quick_xml::Reader; -use crate::event_log::xes::constants::*; -use crate::event_log::xes::reader::file_xes_log_reader::XmlReader; -use crate::event_log::{core::event::event::EventPayloadValue, xes::xes_event::XesEventImpl}; +use crate::event_log::{ + core::event::event::EventPayloadValue, + xes::{constants::*, reader::file_xes_log_reader::XmlReader, xes_event::XesEventImpl}, +}; use super::utils; diff --git a/Ficus/src/rust/ficus/src/event_log/xes/simple.rs b/Ficus/src/rust/ficus/src/event_log/xes/simple.rs index 126c6c87d..5858dfe9b 100644 --- a/Ficus/src/rust/ficus/src/event_log/xes/simple.rs +++ b/Ficus/src/rust/ficus/src/event_log/xes/simple.rs @@ -1,12 +1,9 @@ -use crate::event_log::core::event::event::Event; -use crate::event_log::core::event_log::EventLog; -use crate::event_log::core::trace::trace::Trace; -use crate::event_log::xes::xes_event::XesEventImpl; -use crate::event_log::xes::xes_event_log::XesEventLogImpl; -use crate::event_log::xes::xes_trace::XesTraceImpl; +use crate::event_log::{ + core::{event::event::Event, event_log::EventLog, trace::trace::Trace}, + xes::{xes_event::XesEventImpl, xes_event_log::XesEventLogImpl, xes_trace::XesTraceImpl}, +}; use chrono::Utc; -use std::cell::RefCell; -use std::rc::Rc; +use std::{cell::RefCell, rc::Rc}; pub fn create_simple_event_log(raw_log: &Vec>) -> XesEventLogImpl { let mut log = XesEventLogImpl::empty(); diff --git a/Ficus/src/rust/ficus/src/event_log/xes/writer/xes_event_log_writer.rs b/Ficus/src/rust/ficus/src/event_log/xes/writer/xes_event_log_writer.rs index a67cbd7b5..402a1d700 100644 --- a/Ficus/src/rust/ficus/src/event_log/xes/writer/xes_event_log_writer.rs +++ b/Ficus/src/rust/ficus/src/event_log/xes/writer/xes_event_log_writer.rs @@ -1,16 +1,17 @@ use quick_xml::Writer; -use std::fs::File; -use std::{cell::RefCell, io::Cursor}; - -use crate::event_log::{ - core::{ - event::event::{Event, EventPayloadValue}, - event_log::EventLog, - trace::trace::Trace, +use std::{cell::RefCell, fs::File, io::Cursor}; + +use crate::{ + event_log::{ + core::{ + event::event::{Event, EventPayloadValue}, + event_log::EventLog, + trace::trace::Trace, + }, + xes::{constants::*, xes_event_log::XesEventLogImpl}, }, - xes::{constants::*, xes_event_log::XesEventLogImpl}, + utils::xml_utils::{write_empty, StartEndElementCookie, XmlWriteError}, }; -use crate::utils::xml_utils::{write_empty, StartEndElementCookie, XmlWriteError}; pub fn write_xes_log_to_bytes(log: &XesEventLogImpl) -> Result, XmlWriteError> { match serialize_event_log(log) { diff --git a/Ficus/src/rust/ficus/src/event_log/xes/xes_event.rs b/Ficus/src/rust/ficus/src/event_log/xes/xes_event.rs index 1c8df3bec..6f6ad6719 100644 --- a/Ficus/src/rust/ficus/src/event_log/xes/xes_event.rs +++ b/Ficus/src/rust/ficus/src/event_log/xes/xes_event.rs @@ -1,14 +1,19 @@ use chrono::{DateTime, Utc}; -use std::fmt::{Debug, Formatter}; -use std::{collections::HashMap, rc::Rc}; +use std::{ + collections::HashMap, + fmt::{Debug, Formatter}, + rc::Rc, +}; -use crate::utils::user_data::user_data::UserDataOwner; use crate::{ event_log::core::event::{ event::{Event, EventPayloadValue}, event_base::EventBase, }, - utils::{user_data::user_data::UserDataImpl, vec_utils}, + utils::{ + user_data::user_data::{UserDataImpl, UserDataOwner}, + vec_utils, + }, }; pub struct XesEventImpl { diff --git a/Ficus/src/rust/ficus/src/event_log/xes/xes_event_log.rs b/Ficus/src/rust/ficus/src/event_log/xes/xes_event_log.rs index aab18fcab..af655f8bb 100644 --- a/Ficus/src/rust/ficus/src/event_log/xes/xes_event_log.rs +++ b/Ficus/src/rust/ficus/src/event_log/xes/xes_event_log.rs @@ -5,14 +5,17 @@ use super::{ xes_trace::XesTraceImpl, }; -use crate::event_log::core::{ - event::{event::EventPayloadValue, event_hasher::EventHasher, events_holder::EventSequenceInfo}, - event_log::EventLog, - trace::traces_holder::EventLogBase, +use crate::{ + event_log::core::{ + event::{event::EventPayloadValue, event_hasher::EventHasher, events_holder::EventSequenceInfo}, + event_log::EventLog, + trace::traces_holder::EventLogBase, + }, + utils::{ + user_data::user_data::{UserDataImpl, UserDataOwner}, + vec_utils, + }, }; -use crate::utils::user_data::user_data::UserDataImpl; -use crate::utils::user_data::user_data::UserDataOwner; -use crate::utils::vec_utils; use std::{cell::RefCell, collections::HashMap, rc::Rc}; pub struct XesEventLogImpl { diff --git a/Ficus/src/rust/ficus/src/event_log/xes/xes_trace.rs b/Ficus/src/rust/ficus/src/event_log/xes/xes_trace.rs index 3cc6db34a..c5e6278c3 100644 --- a/Ficus/src/rust/ficus/src/event_log/xes/xes_trace.rs +++ b/Ficus/src/rust/ficus/src/event_log/xes/xes_trace.rs @@ -1,11 +1,12 @@ use super::xes_event::XesEventImpl; -use crate::event_log::core::event::event::EventPayloadValue; use crate::event_log::core::{ - event::events_holder::{EventSequenceInfo, EventsHolder, EventsPositions}, + event::{ + event::EventPayloadValue, + events_holder::{EventSequenceInfo, EventsHolder, EventsPositions}, + }, trace::trace::Trace, }; -use std::collections::HashMap; -use std::{cell::RefCell, rc::Rc}; +use std::{cell::RefCell, collections::HashMap, rc::Rc}; pub struct XesTraceImpl { events_holder: EventsHolder, diff --git a/Ficus/src/rust/ficus/src/features/analysis/directly_follows_graph.rs b/Ficus/src/rust/ficus/src/features/analysis/directly_follows_graph.rs index 0cc10fbf2..de35cc8de 100644 --- a/Ficus/src/rust/ficus/src/features/analysis/directly_follows_graph.rs +++ b/Ficus/src/rust/ficus/src/features/analysis/directly_follows_graph.rs @@ -1,10 +1,14 @@ -use crate::event_log::core::event::event::Event; -use crate::event_log::core::event_log::EventLog; -use crate::event_log::core::trace::trace::Trace; -use crate::event_log::xes::xes_event_log::XesEventLogImpl; -use crate::features::analysis::log_info::event_log_info::EventLogInfo; -use crate::utils::graph::graph::{DefaultGraph, Graph, NodesConnectionData}; -use crate::utils::references::HeapedOrOwned; +use crate::{ + event_log::{ + core::{event::event::Event, event_log::EventLog, trace::trace::Trace}, + xes::xes_event_log::XesEventLogImpl, + }, + features::analysis::log_info::event_log_info::EventLogInfo, + utils::{ + graph::graph::{DefaultGraph, Graph, NodesConnectionData}, + references::HeapedOrOwned, + }, +}; use log::warn; use std::collections::HashMap; diff --git a/Ficus/src/rust/ficus/src/features/analysis/entropy/dfg_entropy.rs b/Ficus/src/rust/ficus/src/features/analysis/entropy/dfg_entropy.rs index 925dee5f9..1738cd168 100644 --- a/Ficus/src/rust/ficus/src/features/analysis/entropy/dfg_entropy.rs +++ b/Ficus/src/rust/ficus/src/features/analysis/entropy/dfg_entropy.rs @@ -1,11 +1,14 @@ use std::collections::{HashMap, HashSet}; -use crate::features::analysis::log_info::event_log_info::EventLogInfo; -use crate::features::analysis::log_info::event_log_info::OfflineEventLogInfo; -use crate::features::analysis::log_info::log_info_creation_dto::EventLogInfoCreationDto; use crate::{ event_log::core::event_log::EventLog, - features::analysis::constants::{FAKE_EVENT_END_NAME, FAKE_EVENT_START_NAME}, + features::analysis::{ + constants::{FAKE_EVENT_END_NAME, FAKE_EVENT_START_NAME}, + log_info::{ + event_log_info::{EventLogInfo, OfflineEventLogInfo}, + log_info_creation_dto::EventLogInfoCreationDto, + }, + }, }; pub fn calculate_laplace_dfg_entropy(log: &TLog, ignored_events: Option<&HashSet>) -> HashMap diff --git a/Ficus/src/rust/ficus/src/features/analysis/entropy/shared.rs b/Ficus/src/rust/ficus/src/features/analysis/entropy/shared.rs index 8fecc792e..3c4f49543 100644 --- a/Ficus/src/rust/ficus/src/features/analysis/entropy/shared.rs +++ b/Ficus/src/rust/ficus/src/features/analysis/entropy/shared.rs @@ -1,12 +1,15 @@ use std::collections::{HashMap, HashSet}; -use crate::event_log::core::{ - event_log::EventLog, - trace::trace::{Trace, TraceInfo}, +use crate::{ + event_log::core::{ + event_log::EventLog, + trace::trace::{Trace, TraceInfo}, + }, + features::analysis::log_info::{ + event_log_info::{EventLogInfo, OfflineEventLogInfo}, + log_info_creation_dto::EventLogInfoCreationDto, + }, }; -use crate::features::analysis::log_info::event_log_info::EventLogInfo; -use crate::features::analysis::log_info::event_log_info::OfflineEventLogInfo; -use crate::features::analysis::log_info::log_info_creation_dto::EventLogInfoCreationDto; pub fn calculate_max_vector_length(log: &TLog, ignored_events: Option<&HashSet>) -> usize where diff --git a/Ficus/src/rust/ficus/src/features/analysis/log_info/event_log_info.rs b/Ficus/src/rust/ficus/src/features/analysis/log_info/event_log_info.rs index 4a74eb94f..b9cdfc653 100644 --- a/Ficus/src/rust/ficus/src/features/analysis/log_info/event_log_info.rs +++ b/Ficus/src/rust/ficus/src/features/analysis/log_info/event_log_info.rs @@ -1,14 +1,23 @@ -use crate::event_log::core::event_log::EventLog; -use crate::event_log::core::trace::trace::Trace; -use crate::features::analysis::constants::{FAKE_EVENT_END_NAME, FAKE_EVENT_START_NAME}; -use crate::features::analysis::log_info::dfg_info::{DfgInfo, OfflineDfgInfo}; -use crate::features::analysis::log_info::log_info_creation_dto::EventLogInfoCreationDto; -use crate::features::discovery::timeline::utils::extract_thread_id; -use crate::{event_log::core::event::event::Event, utils::hash_map_utils::increase_in_map}; -use std::cell::RefCell; -use std::collections::{HashMap, HashSet}; -use std::ops::Deref; -use std::rc::Rc; +use crate::{ + event_log::core::{event::event::Event, event_log::EventLog, trace::trace::Trace}, + features::{ + analysis::{ + constants::{FAKE_EVENT_END_NAME, FAKE_EVENT_START_NAME}, + log_info::{ + dfg_info::{DfgInfo, OfflineDfgInfo}, + log_info_creation_dto::EventLogInfoCreationDto, + }, + }, + discovery::timeline::utils::extract_thread_id, + }, + utils::hash_map_utils::increase_in_map, +}; +use std::{ + cell::RefCell, + collections::{HashMap, HashSet}, + ops::Deref, + rc::Rc, +}; pub trait EventLogCounts { fn traces_count(&self) -> usize; @@ -20,15 +29,6 @@ struct EventLogCountsImpl { events_count: usize, } -impl EventLogCountsImpl { - pub fn new(traces_count: usize, events_count: usize) -> Self { - Self { - traces_count, - events_count, - } - } -} - impl EventLogCounts for EventLogCountsImpl { fn traces_count(&self) -> usize { self.traces_count diff --git a/Ficus/src/rust/ficus/src/features/analysis/patterns/activity_instances.rs b/Ficus/src/rust/ficus/src/features/analysis/patterns/activity_instances.rs index fea523124..f65db70f4 100644 --- a/Ficus/src/rust/ficus/src/features/analysis/patterns/activity_instances.rs +++ b/Ficus/src/rust/ficus/src/features/analysis/patterns/activity_instances.rs @@ -1,22 +1,24 @@ use super::repeat_sets::{ActivityNode, SubArrayWithTraceIndex}; -use crate::event_log::core::event::event::EventPayloadValue; -use crate::features::analysis::patterns::pattern_info::UNDERLYING_PATTERN_KIND_KEY; -use crate::utils::context_key::DefaultContextKey; -use crate::utils::user_data::user_data::UserDataOwner; use crate::{ - event_log::core::{event::event::Event, event_log::EventLog, trace::trace::Trace}, + context_key, + event_log::{ + core::{ + event::event::{Event, EventPayloadValue}, + event_log::EventLog, + trace::trace::Trace, + }, + xes::{xes_event::XesEventImpl, xes_event_log::XesEventLogImpl, xes_trace::XesTraceImpl}, + }, + features::analysis::patterns::pattern_info::UNDERLYING_PATTERN_KIND_KEY, pipelines::aliases::TracesActivities, - utils::user_data::{keys::DefaultKey, user_data::UserData}, + utils::user_data::user_data::{UserData, UserDataOwner}, }; use derive_new::new; use fancy_regex::Regex; use getset::{Getters, MutGetters}; use lazy_static::lazy_static; -use once_cell::unsync::Lazy; -use std::any::{Any, TypeId}; -use std::borrow::ToOwned; -use std::sync::Mutex; use std::{ + borrow::ToOwned, cell::RefCell, collections::{HashMap, HashSet, VecDeque}, ops::DerefMut, @@ -447,60 +449,27 @@ impl UnderlyingEventsInfo { } } -pub struct ActivityInstancesKeys { - underlying_events_keys: Mutex>>, -} - -impl ActivityInstancesKeys { - pub fn new() -> Self { - Self { - underlying_events_keys: Mutex::new(HashMap::new()), - } - } - - pub fn underlying_events_key(&mut self) -> DefaultKey> { - let type_id = TypeId::of::(); - let mut map = self.underlying_events_keys.lock(); - let map = map.as_mut().ok().unwrap(); - - if let Some(key) = map.get(&type_id) { - key.downcast_ref::>>().unwrap().clone() - } else { - let key = DefaultKey::>::new("UNDERLYING_EVENTS".to_owned()); - map.insert(type_id, Box::new(key) as Box); - map - .get(&type_id) - .unwrap() - .downcast_ref::>>() - .unwrap() - .clone() - } - } -} +const HIERARCHY_LEVEL: &'static str = "HIERARCHY_LEVEL"; +const UNDERLYING_EVENTS: &'static str = "UNDERLYING_EVENTS"; -static mut KEYS: Mutex> = Mutex::new(Lazy::new(|| ActivityInstancesKeys::new())); +context_key! { HIERARCHY_LEVEL, usize } +context_key! { UNDERLYING_EVENTS, UnderlyingEventsInfo } -lazy_static! { - pub static ref HIERARCHY_LEVEL: DefaultContextKey = DefaultContextKey::new("HIERARCHY_LEVEL"); -} - -pub fn create_new_log_from_activities_instances( - log: &TLog, +pub fn create_new_log_from_activities_instances( + log: &XesEventLogImpl, instances: &Vec>, - strategy: &UndefActivityHandlingStrategy, + strategy: &UndefActivityHandlingStrategy, event_from_activity_factory: &TEventFactory, -) -> TLog +) -> XesEventLogImpl where - TLog: EventLog, - TLog::TEvent: 'static, - TEventFactory: Fn(&ActivityInTraceInfo, &[Rc>]) -> Rc>, + TEventFactory: Fn(&ActivityInTraceInfo, &[Rc>]) -> Rc>, { - let level = log.user_data().get(HIERARCHY_LEVEL.key()).unwrap_or(&0usize); - let mut new_log = TLog::empty(); + let level = log.user_data().get(HIERARCHY_LEVEL_KEY.key()).unwrap_or(&0usize); + let mut new_log = XesEventLogImpl::empty(); for (instances, trace) in instances.iter().zip(log.traces()) { let trace = trace.borrow(); - let new_trace_ptr = Rc::new(RefCell::new(TLog::TTrace::empty())); + let new_trace_ptr = Rc::new(RefCell::new(XesTraceImpl::empty())); let undef_activity_func = |start_index: usize, end_index: usize| match strategy { UndefActivityHandlingStrategy::DontInsert => (), @@ -531,7 +500,7 @@ where let user_data = event.user_data_mut(); for event in &underlying_events { - execute_with_underlying_events::(event, &mut |event| { + execute_with_underlying_events(event, &mut |event| { let payload_value = EventPayloadValue::String(activity.node.borrow().id().clone()); let key = format!("hierarchy_level_{}", level); event.add_or_update_payload(key, payload_value); @@ -540,24 +509,22 @@ where user_data.put_concrete(UNDERLYING_PATTERN_KIND_KEY.key(), *activity.node.borrow().pattern_kind()); - unsafe { - let base_pattern = if let Some(repeat_set) = activity.node.borrow().repeat_set() { - let trace = log.traces().get(repeat_set.trace_index).unwrap(); - let sub_array = repeat_set.sub_array; - Some( - trace.borrow().events()[sub_array.start_index..sub_array.start_index + sub_array.length] - .iter() - .map(|e| e.clone()) - .collect(), - ) - } else { - None - }; + let base_pattern = if let Some(repeat_set) = activity.node.borrow().repeat_set() { + let trace = log.traces().get(repeat_set.trace_index).unwrap(); + let sub_array = repeat_set.sub_array; + Some( + trace.borrow().events()[sub_array.start_index..sub_array.start_index + sub_array.length] + .iter() + .map(|e| e.clone()) + .collect(), + ) + } else { + None + }; - let info = UnderlyingEventsInfo::new(base_pattern, underlying_events); + let info = UnderlyingEventsInfo::new(base_pattern, underlying_events); - user_data.put_concrete(&KEYS.lock().unwrap().underlying_events_key::(), info); - } + user_data.put_concrete(UNDERLYING_EVENTS_KEY.key(), info); }; process_activities_in_trace(trace.events().len(), &instances, undef_activity_func, activity_func); @@ -565,7 +532,7 @@ where new_log.push(new_trace_ptr) } - new_log.user_data_mut().put_concrete(HIERARCHY_LEVEL.key(), level + 1); + new_log.user_data_mut().put_concrete(HIERARCHY_LEVEL_KEY.key(), level + 1); new_log } @@ -628,31 +595,34 @@ where TracesActivities(&'a TLog, &'a Vec>, usize), } -pub fn create_logs_for_activities(activities_source: &ActivitiesLogSource) -> HashMap>> -where - TLog: EventLog, -{ +pub fn create_logs_for_activities( + activities_source: &ActivitiesLogSource, +) -> HashMap>> { match activities_source { ActivitiesLogSource::Log(log) => create_activities_logs_from_log(log), ActivitiesLogSource::TracesActivities(log, activities, level) => create_log_from_traces_activities(log, activities, *level), } } -fn create_activities_logs_from_log(log: &TLog) -> HashMap>> { - let mut activities_to_logs: HashMap>> = HashMap::new(); - let key = unsafe { KEYS.lock().unwrap().underlying_events_key::() }; +fn create_activities_logs_from_log(log: &XesEventLogImpl) -> HashMap>> { + let mut activities_to_logs: HashMap>> = HashMap::new(); for trace in log.traces() { for event in trace.borrow().events() { - if event.borrow_mut().user_data_mut().concrete_mut(&key).is_some() { + if event + .borrow_mut() + .user_data_mut() + .concrete_mut(&UNDERLYING_EVENTS_KEY.key()) + .is_some() + { let name = event.borrow().name().to_owned(); - let mut new_trace = TLog::TTrace::empty(); - substitute_underlying_events::(event, &mut new_trace); + let mut new_trace = XesTraceImpl::empty(); + substitute_underlying_events(event, &mut new_trace); if let Some(existing_log) = activities_to_logs.get_mut(&name) { existing_log.borrow_mut().push(Rc::new(RefCell::new(new_trace))); } else { - let mut new_log = TLog::empty(); + let mut new_log = XesEventLogImpl::empty(); new_log.push(Rc::new(RefCell::new(new_trace))); activities_to_logs.insert(name, Rc::new(RefCell::new(new_log))); } @@ -752,10 +722,7 @@ where name } -pub fn count_underlying_events(log: &TLog) -> usize -where - TLog: EventLog, -{ +pub fn count_underlying_events(log: &XesEventLogImpl) -> usize { let mut count = 0usize; for trace in log.traces() { let mut trace_count = 0usize; @@ -769,13 +736,8 @@ where count } -fn count_underlying_events_for_event(event: &mut TEvent) -> usize -where - TEvent: Event + 'static, -{ - let key = unsafe { KEYS.lock().unwrap().underlying_events_key::() }; - - if let Some(underlying_events) = event.user_data_mut().concrete_mut(&key) { +fn count_underlying_events_for_event(event: &mut XesEventImpl) -> usize { + if let Some(underlying_events) = event.user_data_mut().concrete_mut(&UNDERLYING_EVENTS_KEY.key()) { let mut result = 0usize; for underlying_event in underlying_events.underlying_events() { result += count_underlying_events_for_event(underlying_event.borrow_mut().deref_mut()) @@ -811,74 +773,56 @@ where new_log } -pub fn execute_with_underlying_events(event: &Rc>, action: &mut impl FnMut(&mut TLog::TEvent)) -where - TLog: EventLog, -{ - let key = unsafe { KEYS.lock().unwrap().underlying_events_key::() }; - +pub fn execute_with_underlying_events(event: &Rc>, action: &mut impl FnMut(&mut XesEventImpl)) { let mut event = event.borrow_mut(); - if let Some(underlying_events) = event.user_data_mut().concrete_mut(&key) { + if let Some(underlying_events) = event.user_data_mut().concrete_mut(UNDERLYING_EVENTS_KEY.key()) { for underlying_event in underlying_events.underlying_events() { - execute_with_underlying_events::(underlying_event, action); + execute_with_underlying_events(underlying_event, action); } } else { action(&mut event); } } -pub fn substitute_underlying_events(event: &Rc>, trace: &mut TLog::TTrace) -where - TLog: EventLog, -{ - let key = unsafe { KEYS.lock().unwrap().underlying_events_key::() }; - - if let Some(underlying_events) = event.borrow_mut().user_data_mut().concrete(&key) { +pub fn substitute_underlying_events(event: &Rc>, trace: &mut XesTraceImpl) { + if let Some(underlying_events) = event.borrow_mut().user_data_mut().concrete(&UNDERLYING_EVENTS_KEY.key()) { for underlying_event in underlying_events.underlying_events() { - substitute_underlying_events::(underlying_event, trace); + substitute_underlying_events(underlying_event, trace); } } else { trace.push(event.clone()); } } -pub fn create_vector_of_underlying_events(event: &Rc>) -> Vec>> { +pub fn create_vector_of_underlying_events(event: &Rc>) -> Vec>> { let mut result = vec![]; - create_vector_of_underlying_events_intenral::(event, &mut result); + create_vector_of_underlying_events_intenral(event, &mut result); result } -pub fn try_get_base_pattern(event: &Rc>) -> Option>>> { - let key = unsafe { KEYS.lock().unwrap().underlying_events_key::() }; - if let Some(info) = event.borrow().user_data().concrete(&key) { +pub fn try_get_base_pattern(event: &Rc>) -> Option>>> { + if let Some(info) = event.borrow().user_data().concrete(&UNDERLYING_EVENTS_KEY.key()) { info.base_pattern().cloned() } else { None } } -fn create_vector_of_underlying_events_intenral( - event: &Rc>, - result: &mut Vec>>, -) { - let key = unsafe { KEYS.lock().unwrap().underlying_events_key::() }; - - if let Some(underlying_events) = event.borrow_mut().user_data_mut().concrete(&key) { +fn create_vector_of_underlying_events_intenral(event: &Rc>, result: &mut Vec>>) { + if let Some(underlying_events) = event.borrow_mut().user_data_mut().concrete(&UNDERLYING_EVENTS_KEY.key()) { for underlying_event in underlying_events.underlying_events() { - create_vector_of_underlying_events_intenral::(underlying_event, result); + create_vector_of_underlying_events_intenral(underlying_event, result); } } else { result.push(event.clone()); } } -pub fn create_vector_of_immediate_underlying_events(event: &Rc>) -> Vec>> { +pub fn create_vector_of_immediate_underlying_events(event: &Rc>) -> Vec>> { let mut events = vec![]; - let key = unsafe { KEYS.lock().unwrap().underlying_events_key::() }; - - if let Some(underlying_events) = event.borrow_mut().user_data_mut().concrete(&key) { + if let Some(underlying_events) = event.borrow_mut().user_data_mut().concrete(&UNDERLYING_EVENTS_KEY.key()) { for underlying_event in underlying_events.underlying_events() { events.push(underlying_event.clone()); } diff --git a/Ficus/src/rust/ficus/src/features/analysis/patterns/contexts.rs b/Ficus/src/rust/ficus/src/features/analysis/patterns/contexts.rs index 502eb5e30..07044478e 100644 --- a/Ficus/src/rust/ficus/src/features/analysis/patterns/contexts.rs +++ b/Ficus/src/rust/ficus/src/features/analysis/patterns/contexts.rs @@ -1,8 +1,12 @@ -use std::rc::Rc; -use std::{cell::RefCell, str::FromStr}; +use std::{cell::RefCell, rc::Rc, str::FromStr}; -use crate::event_log::core::{event_log::EventLog, trace::trace::Trace}; -use crate::features::analysis::patterns::activity_instances::{ActivityInTraceFilterKind, ActivityNarrowingKind}; +use crate::{ + event_log::{ + core::{event_log::EventLog, trace::trace::Trace}, + xes::{xes_event::XesEventImpl, xes_event_log::XesEventLogImpl}, + }, + features::analysis::patterns::activity_instances::{ActivityInTraceFilterKind, ActivityNarrowingKind}, +}; use super::{ activity_instances::{ActivityInTraceInfo, UndefActivityHandlingStrategy}, @@ -76,13 +80,12 @@ where } } -pub struct ActivitiesDiscoveryContext +pub struct ActivitiesDiscoveryContext where - TLog: EventLog, - TClassExtractor: Fn(&TLog::TEvent) -> u64, + TClassExtractor: Fn(&XesEventImpl) -> u64, TNameCreator: Fn(&SubArrayWithTraceIndex) -> String, { - pub patterns_context: PatternsDiscoveryContext, + pub patterns_context: PatternsDiscoveryContext, pub activity_level: usize, pub name_creator: TNameCreator, pub min_events_in_activity: usize, @@ -91,14 +94,13 @@ where pub extract_activities_strict: bool, } -impl ActivitiesDiscoveryContext +impl ActivitiesDiscoveryContext where - TLog: EventLog, - TClassExtractor: Fn(&TLog::TEvent) -> u64, + TClassExtractor: Fn(&XesEventImpl) -> u64, TNameCreator: Fn(&SubArrayWithTraceIndex) -> String, { pub fn new( - patterns_context: PatternsDiscoveryContext, + patterns_context: PatternsDiscoveryContext, activity_level: usize, min_events_in_activity: usize, narrow_kind: ActivityNarrowingKind, @@ -118,28 +120,26 @@ where } } -pub struct ActivitiesInstancesDiscoveryContext +pub struct ActivitiesInstancesDiscoveryContext where - TLog: EventLog, - TClassExtractor: Fn(&TLog::TEvent) -> u64, + TClassExtractor: Fn(&XesEventImpl) -> u64, TNameCreator: Fn(&SubArrayWithTraceIndex) -> String, - TEvtFactory: Fn(&ActivityInTraceInfo, &[Rc>]) -> Rc>, + TEvtFactory: Fn(&ActivityInTraceInfo, &[Rc>]) -> Rc>, { - pub activities_context: ActivitiesDiscoveryContext, - pub undef_events_handling_strategy: UndefActivityHandlingStrategy, + pub activities_context: ActivitiesDiscoveryContext, + pub undef_events_handling_strategy: UndefActivityHandlingStrategy, pub high_level_event_factory: TEvtFactory, } -impl ActivitiesInstancesDiscoveryContext +impl ActivitiesInstancesDiscoveryContext where - TLog: EventLog, - TClassExtractor: Fn(&TLog::TEvent) -> u64, + TClassExtractor: Fn(&XesEventImpl) -> u64, TNameCreator: Fn(&SubArrayWithTraceIndex) -> String, - TEvtFactory: Fn(&ActivityInTraceInfo, &[Rc>]) -> Rc>, + TEvtFactory: Fn(&ActivityInTraceInfo, &[Rc>]) -> Rc>, { pub fn new( - activities_context: ActivitiesDiscoveryContext, - strategy: UndefActivityHandlingStrategy, + activities_context: ActivitiesDiscoveryContext, + strategy: UndefActivityHandlingStrategy, high_level_event_factory: TEvtFactory, ) -> Self { Self { diff --git a/Ficus/src/rust/ficus/src/features/analysis/patterns/entry_points.rs b/Ficus/src/rust/ficus/src/features/analysis/patterns/entry_points.rs index 9929011d9..1854e1e1e 100644 --- a/Ficus/src/rust/ficus/src/features/analysis/patterns/entry_points.rs +++ b/Ficus/src/rust/ficus/src/features/analysis/patterns/entry_points.rs @@ -7,9 +7,16 @@ use super::{ repeats::{find_maximal_repeats, find_near_super_maximal_repeats, find_super_maximal_repeats}, tandem_arrays::{find_maximal_tandem_arrays, find_primitive_tandem_arrays, SubArrayInTraceInfo}, }; -use crate::event_log::core::event_log::EventLog; -use crate::features::analysis::patterns::activity_instances::{extract_activities_instances_strict, ActivitiesLogSource}; -use crate::features::analysis::patterns::pattern_info::UnderlyingPatternKind; +use crate::{ + event_log::{ + core::event_log::EventLog, + xes::{xes_event::XesEventImpl, xes_event_log::XesEventLogImpl}, + }, + features::analysis::patterns::{ + activity_instances::{extract_activities_instances_strict, ActivitiesLogSource}, + pattern_info::UnderlyingPatternKind, + }, +}; #[derive(Clone, Copy)] pub enum PatternsKind { @@ -45,12 +52,11 @@ where build_repeat_sets(context.get_processed_log(), &patterns) } -pub fn build_repeat_set_tree( - activities_context: &ActivitiesDiscoveryContext, +pub fn build_repeat_set_tree( + activities_context: &ActivitiesDiscoveryContext, ) -> Vec>> where - TLog: EventLog, - TClassExtractor: Fn(&TLog::TEvent) -> u64, + TClassExtractor: Fn(&XesEventImpl) -> u64, TNameCreator: Fn(&SubArrayWithTraceIndex) -> String, { let repeats = find_repeats(&activities_context.patterns_context); @@ -63,12 +69,11 @@ where ) } -pub fn discover_activities_instances( - activities_context: &ActivitiesDiscoveryContext, +pub fn discover_activities_instances( + activities_context: &ActivitiesDiscoveryContext, ) -> Vec> where - TLog: EventLog, - TClassExtractor: Fn(&TLog::TEvent) -> u64, + TClassExtractor: Fn(&XesEventImpl) -> u64, TNameCreator: Fn(&SubArrayWithTraceIndex) -> String, { let mut repeat_set_tree = build_repeat_set_tree(activities_context); @@ -85,15 +90,13 @@ where } } -pub fn discover_activities_and_create_new_log( - context: &ActivitiesInstancesDiscoveryContext, -) -> TLog +pub fn discover_activities_and_create_new_log( + context: &ActivitiesInstancesDiscoveryContext, +) -> XesEventLogImpl where - TLog: EventLog, - TLog::TEvent: 'static, - TClassExtractor: Fn(&TLog::TEvent) -> u64, + TClassExtractor: Fn(&XesEventImpl) -> u64, TNameCreator: Fn(&SubArrayWithTraceIndex) -> String, - TEvtFactory: Fn(&ActivityInTraceInfo, &[Rc>]) -> Rc>, + TEvtFactory: Fn(&ActivityInTraceInfo, &[Rc>]) -> Rc>, { let activity_instances = discover_activities_instances(&context.activities_context); @@ -105,14 +108,12 @@ where ) } -pub fn create_logs_for_activities( - context: &ActivitiesDiscoveryContext, +pub fn create_logs_for_activities( + context: &ActivitiesDiscoveryContext, activity_level: usize, -) -> HashMap>> +) -> HashMap>> where - TLog: EventLog, - TLog::TEvent: 'static, - TClassExtractor: Fn(&TLog::TEvent) -> u64, + TClassExtractor: Fn(&XesEventImpl) -> u64, TNameCreator: Fn(&SubArrayWithTraceIndex) -> String, { let activity_instances = discover_activities_instances(&context); diff --git a/Ficus/src/rust/ficus/src/features/analysis/patterns/pattern_info.rs b/Ficus/src/rust/ficus/src/features/analysis/patterns/pattern_info.rs index e2e7cfdeb..1506f828f 100644 --- a/Ficus/src/rust/ficus/src/features/analysis/patterns/pattern_info.rs +++ b/Ficus/src/rust/ficus/src/features/analysis/patterns/pattern_info.rs @@ -1,14 +1,13 @@ -use crate::event_log::xes::xes_event::XesEventImpl; -use crate::features::analysis::patterns::entry_points::PatternsKind; -use crate::utils::context_key::DefaultContextKey; -use crate::utils::graph::graph::DefaultGraph; +use crate::{ + context_key, event_log::xes::xes_event::XesEventImpl, features::analysis::patterns::entry_points::PatternsKind, + utils::graph::graph::DefaultGraph, +}; use lazy_static::lazy_static; -use std::cell::RefCell; -use std::rc::Rc; +use std::{cell::RefCell, rc::Rc}; -lazy_static! { - pub static ref UNDERLYING_PATTERN_KIND_KEY: DefaultContextKey = DefaultContextKey::new("UNDERLYING_PATTERN_KIND"); -} +const UNDERLYING_PATTERN_KIND: &'static str = "UNDERLYING_PATTERN_KIND"; + +context_key! { UNDERLYING_PATTERN_KIND, UnderlyingPatternKind } #[derive(Debug, Clone, Copy)] pub enum UnderlyingPatternKind { diff --git a/Ficus/src/rust/ficus/src/features/analysis/patterns/repeat_sets.rs b/Ficus/src/rust/ficus/src/features/analysis/patterns/repeat_sets.rs index 1725a72d1..5c3b1a592 100644 --- a/Ficus/src/rust/ficus/src/features/analysis/patterns/repeat_sets.rs +++ b/Ficus/src/rust/ficus/src/features/analysis/patterns/repeat_sets.rs @@ -1,11 +1,10 @@ -use crate::features::analysis::patterns::pattern_info::UnderlyingPatternKind; -use crate::utils::hash_utils::calculate_poly_hash_for_collection; +use crate::{features::analysis::patterns::pattern_info::UnderlyingPatternKind, utils::hash_utils::calculate_poly_hash_for_collection}; use getset::Getters; -use std::sync::atomic::{AtomicU64, Ordering}; use std::{ cell::RefCell, collections::{HashMap, HashSet}, rc::Rc, + sync::atomic::{AtomicU64, Ordering}, }; use super::tandem_arrays::SubArrayInTraceInfo; diff --git a/Ficus/src/rust/ficus/src/features/analysis/patterns/strict_loops.rs b/Ficus/src/rust/ficus/src/features/analysis/patterns/strict_loops.rs index 5fecb6e17..017b0545f 100644 --- a/Ficus/src/rust/ficus/src/features/analysis/patterns/strict_loops.rs +++ b/Ficus/src/rust/ficus/src/features/analysis/patterns/strict_loops.rs @@ -1,16 +1,17 @@ -use crate::event_log::core::event::event::Event; -use crate::event_log::core::event_log::EventLog; -use crate::event_log::core::trace::trace::Trace; -use crate::event_log::xes::xes_event_log::XesEventLogImpl; -use crate::event_log::xes::xes_trace::XesTraceImpl; -use crate::features::analysis::patterns::activity_instances::ActivityInTraceInfo; -use crate::features::analysis::patterns::pattern_info::UnderlyingPatternKind; -use crate::features::analysis::patterns::repeat_sets::{ActivityNode, SubArrayWithTraceIndex}; -use crate::features::analysis::patterns::tandem_arrays::{try_extract_tandem_array, TandemArrayInfo}; -use crate::utils::display_name::get_display_name; -use std::cell::RefCell; -use std::collections::HashSet; -use std::rc::Rc; +use crate::{ + event_log::{ + core::{event_log::EventLog, trace::trace::Trace}, + xes::{xes_event_log::XesEventLogImpl, xes_trace::XesTraceImpl}, + }, + features::analysis::patterns::{ + activity_instances::ActivityInTraceInfo, + pattern_info::UnderlyingPatternKind, + repeat_sets::{ActivityNode, SubArrayWithTraceIndex}, + tandem_arrays::{try_extract_tandem_array, TandemArrayInfo}, + }, + utils::display_name::get_display_name, +}; +use std::{cell::RefCell, collections::HashSet, rc::Rc}; pub fn find_loops_strict(log: &XesEventLogImpl, hashed_log: &Vec>, max_array_length: usize) -> Vec> { find_tandem_arrays_strict(&hashed_log, max_array_length) diff --git a/Ficus/src/rust/ficus/src/features/cases/cases_discovery.rs b/Ficus/src/rust/ficus/src/features/cases/cases_discovery.rs index d09b26d94..dc48a1d55 100644 --- a/Ficus/src/rust/ficus/src/features/cases/cases_discovery.rs +++ b/Ficus/src/rust/ficus/src/features/cases/cases_discovery.rs @@ -1,8 +1,10 @@ -use crate::event_log::core::event::event::Event; -use crate::event_log::core::event_log::EventLog; -use crate::event_log::core::trace::trace::Trace; -use crate::event_log::xes::xes_event_log::XesEventLogImpl; -use crate::features::cases::cases_discovery_state::CasesDiscoveryState; +use crate::{ + event_log::{ + core::{event::event::Event, event_log::EventLog, trace::trace::Trace}, + xes::xes_event_log::XesEventLogImpl, + }, + features::cases::cases_discovery_state::CasesDiscoveryState, +}; use fancy_regex::Regex; pub fn discover_cases(log: &XesEventLogImpl, start_regex_str: &str, end_regex_str: &str, inline_nested: bool) -> XesEventLogImpl { diff --git a/Ficus/src/rust/ficus/src/features/cases/cases_discovery_state.rs b/Ficus/src/rust/ficus/src/features/cases/cases_discovery_state.rs index 829478b3e..39ed79954 100644 --- a/Ficus/src/rust/ficus/src/features/cases/cases_discovery_state.rs +++ b/Ficus/src/rust/ficus/src/features/cases/cases_discovery_state.rs @@ -1,11 +1,8 @@ -use crate::event_log::core::event_log::EventLog; -use crate::event_log::core::trace::trace::Trace; -use crate::event_log::xes::xes_event::XesEventImpl; -use crate::event_log::xes::xes_event_log::XesEventLogImpl; -use crate::event_log::xes::xes_trace::XesTraceImpl; -use std::cell::RefCell; -use std::collections::VecDeque; -use std::rc::Rc; +use crate::event_log::{ + core::{event_log::EventLog, trace::trace::Trace}, + xes::{xes_event::XesEventImpl, xes_event_log::XesEventLogImpl, xes_trace::XesTraceImpl}, +}; +use std::{cell::RefCell, collections::VecDeque, rc::Rc}; pub struct CasesDiscoveryState { log: XesEventLogImpl, diff --git a/Ficus/src/rust/ficus/src/features/clustering/activities/activities_common.rs b/Ficus/src/rust/ficus/src/features/clustering/activities/activities_common.rs index c34a08a55..d61fae643 100644 --- a/Ficus/src/rust/ficus/src/features/clustering/activities/activities_common.rs +++ b/Ficus/src/rust/ficus/src/features/clustering/activities/activities_common.rs @@ -8,11 +8,15 @@ use std::{ use linfa::DatasetBase; use ndarray::Array2; +use super::activities_params::{ActivitiesVisualizationParams, ActivityRepresentationSource}; use crate::{ - event_log::core::{ - event::{event::Event, event_hasher::RegexEventHasher}, - event_log::EventLog, - trace::trace::Trace, + event_log::{ + core::{ + event::{event::Event, event_hasher::RegexEventHasher}, + event_log::EventLog, + trace::trace::Trace, + }, + xes::xes_event::XesEventImpl, }, features::{ analysis::patterns::{ @@ -27,13 +31,9 @@ use crate::{ pipelines::aliases::TracesActivities, }; -use super::activities_params::{ActivitiesVisualizationParams, ActivityRepresentationSource}; - pub(super) type ActivityNodeWithCoords = Vec<(Rc>, HashMap)>; -pub fn create_dataset( - params: &ActivitiesVisualizationParams, -) -> Result<(MyDataset, ActivityNodeWithCoords, Vec), ClusteringError> { +pub fn create_dataset(params: &ActivitiesVisualizationParams) -> Result<(MyDataset, ActivityNodeWithCoords, Vec), ClusteringError> { match params.activities_repr_source { ActivityRepresentationSource::EventClasses => create_dataset_from_activities_classes(params), ActivityRepresentationSource::SubTraces => create_dataset_from_activities_traces(params), @@ -41,8 +41,8 @@ pub fn create_dataset( } } -pub(super) fn create_dataset_from_activities_traces_underlying_events( - params: &ActivitiesVisualizationParams, +pub(super) fn create_dataset_from_activities_traces_underlying_events( + params: &ActivitiesVisualizationParams, ) -> Result<(MyDataset, ActivityNodeWithCoords, Vec), ClusteringError> { create_dataset_internal( params.traces_activities, @@ -50,26 +50,25 @@ pub(super) fn create_dataset_from_activities_traces_underlying_events(event) { + for underlying_event in create_vector_of_underlying_events(event) { sub_trace_events.push(underlying_event); } } - update_event_classes::(sub_trace_events.as_slice(), regex_hasher, all_event_classes, map) + update_event_classes(sub_trace_events.as_slice(), regex_hasher, all_event_classes, map) }, )) }, ) } -pub(super) fn create_dataset_from_activities_traces( - params: &ActivitiesVisualizationParams, +pub(super) fn create_dataset_from_activities_traces( + params: &ActivitiesVisualizationParams, ) -> Result<(MyDataset, ActivityNodeWithCoords, Vec), ClusteringError> { create_dataset_internal( params.traces_activities, @@ -77,17 +76,16 @@ pub(super) fn create_dataset_from_activities_traces( |traces_activities, regex_hasher, all_event_classes| { Ok(create_activities_repr_from_subtraces( traces_activities, - regex_hasher, all_event_classes, params, - |events, map, all_event_classes| update_event_classes::(events, regex_hasher, all_event_classes, map), + |events, map, all_event_classes| update_event_classes(events, regex_hasher, all_event_classes, map), )) }, ) } -fn update_event_classes( - events: &[Rc::TEvent>>], +fn update_event_classes( + events: &[Rc>], regex_hasher: Option<&RegexEventHasher>, all_event_classes: &mut HashSet, map: &mut HashMap, @@ -104,12 +102,11 @@ fn update_event_classes( } } -fn create_activities_repr_from_subtraces( +fn create_activities_repr_from_subtraces( traces_activities: &TracesActivities, - regex_hasher: Option<&RegexEventHasher>, all_event_classes: &mut HashSet, - params: &ActivitiesVisualizationParams, - event_classes_updater: impl Fn(&[Rc>], &mut HashMap, &mut HashSet) -> (), + params: &ActivitiesVisualizationParams, + event_classes_updater: impl Fn(&[Rc>], &mut HashMap, &mut HashSet) -> (), ) -> HashMap>, HashMap)> { let mut processed = HashMap::new(); for trace_activities in traces_activities.iter() { @@ -204,8 +201,8 @@ fn create_dataset_internal( )) } -pub(super) fn create_dataset_from_activities_classes( - params: &ActivitiesVisualizationParams, +pub(super) fn create_dataset_from_activities_classes( + params: &ActivitiesVisualizationParams, ) -> Result<(MyDataset, ActivityNodeWithCoords, Vec), ClusteringError> { create_dataset_internal( params.traces_activities, diff --git a/Ficus/src/rust/ficus/src/features/clustering/activities/activities_params.rs b/Ficus/src/rust/ficus/src/features/clustering/activities/activities_params.rs index 97c210ea9..19f1c9fad 100644 --- a/Ficus/src/rust/ficus/src/features/clustering/activities/activities_params.rs +++ b/Ficus/src/rust/ficus/src/features/clustering/activities/activities_params.rs @@ -1,9 +1,7 @@ -use std::str::FromStr; - use crate::{ - event_log::core::event_log::EventLog, features::clustering::common::CommonVisualizationParams, pipelines::aliases::TracesActivities, - utils::distance::distance::FicusDistance, + features::clustering::common::CommonVisualizationParams, pipelines::aliases::TracesActivities, utils::distance::distance::FicusDistance, }; +use std::str::FromStr; #[derive(PartialEq, Eq, Clone, Copy)] pub enum ActivityRepresentationSource { @@ -25,30 +23,21 @@ impl FromStr for ActivityRepresentationSource { } } -pub struct ActivitiesVisualizationParams<'a, TLog> -where - TLog: EventLog, -{ - pub common_vis_params: CommonVisualizationParams<'a, TLog>, +pub struct ActivitiesVisualizationParams<'a> { + pub common_vis_params: CommonVisualizationParams<'a>, pub traces_activities: &'a mut TracesActivities, pub activity_level: usize, pub activities_repr_source: ActivityRepresentationSource, } -pub struct ActivitiesClusteringParams<'a, TLog> -where - TLog: EventLog, -{ - pub(super) vis_params: ActivitiesVisualizationParams<'a, TLog>, +pub struct ActivitiesClusteringParams<'a> { + pub(super) vis_params: ActivitiesVisualizationParams<'a>, pub(super) tolerance: f64, pub(super) distance: FicusDistance, } -impl<'a, TLog> ActivitiesClusteringParams<'a, TLog> -where - TLog: EventLog, -{ - pub fn new(vis_params: ActivitiesVisualizationParams<'a, TLog>, tolerance: f64, distance: FicusDistance) -> Option { +impl<'a> ActivitiesClusteringParams<'a> { + pub fn new(vis_params: ActivitiesVisualizationParams<'a>, tolerance: f64, distance: FicusDistance) -> Option { if distance == FicusDistance::Levenshtein { None } else { diff --git a/Ficus/src/rust/ficus/src/features/clustering/activities/dbscan.rs b/Ficus/src/rust/ficus/src/features/clustering/activities/dbscan.rs index b0902b0eb..b17633bcd 100644 --- a/Ficus/src/rust/ficus/src/features/clustering/activities/dbscan.rs +++ b/Ficus/src/rust/ficus/src/features/clustering/activities/dbscan.rs @@ -3,18 +3,16 @@ use linfa_clustering::Dbscan; use linfa_nn::KdTree; use super::{activities_common::create_dataset, activities_params::ActivitiesClusteringParams, merging::merge_activities}; -use crate::features::clustering::common::adjust_dbscan_labels; use crate::{ - event_log::core::event_log::EventLog, features::clustering::{ - common::{create_colors_vector, transform_to_ficus_dataset}, + common::{adjust_dbscan_labels, create_colors_vector, transform_to_ficus_dataset}, error::ClusteringResult, }, utils::{dataset::dataset::LabeledDataset, distance::distance::DistanceWrapper}, }; -pub fn clusterize_activities_dbscan( - params: &mut ActivitiesClusteringParams, +pub fn clusterize_activities_dbscan( + params: &mut ActivitiesClusteringParams, min_points: usize, put_noise_events_in_one_cluster: bool, ) -> ClusteringResult { diff --git a/Ficus/src/rust/ficus/src/features/clustering/activities/k_means.rs b/Ficus/src/rust/ficus/src/features/clustering/activities/k_means.rs index 0bcc7e39b..475b78aca 100644 --- a/Ficus/src/rust/ficus/src/features/clustering/activities/k_means.rs +++ b/Ficus/src/rust/ficus/src/features/clustering/activities/k_means.rs @@ -7,7 +7,6 @@ use linfa::{ use linfa_clustering::KMeans; use crate::{ - event_log::core::event_log::EventLog, features::{ analysis::patterns::repeat_sets::ActivityNode, clustering::{ @@ -24,8 +23,8 @@ use crate::{ use super::{activities_common::create_dataset, activities_params::ActivitiesClusteringParams, merging::merge_activities}; -pub fn clusterize_activities_k_means( - params: &mut ActivitiesClusteringParams, +pub fn clusterize_activities_k_means( + params: &mut ActivitiesClusteringParams, clusters_count: usize, iterations_count: usize, ) -> ClusteringResult { @@ -83,10 +82,7 @@ fn create_k_means_model( .expect("KMeans fitted") } -pub fn clusterize_activities_k_means_grid_search( - params: &mut ActivitiesClusteringParams, - iterations_count: usize, -) -> ClusteringResult { +pub fn clusterize_activities_k_means_grid_search(params: &mut ActivitiesClusteringParams, iterations_count: usize) -> ClusteringResult { let (dataset, processed, classes_names) = create_dataset(¶ms.vis_params)?; let mut best_metric = -1f64; diff --git a/Ficus/src/rust/ficus/src/features/clustering/common.rs b/Ficus/src/rust/ficus/src/features/clustering/common.rs index 9f0c80cd9..3cc870390 100644 --- a/Ficus/src/rust/ficus/src/features/clustering/common.rs +++ b/Ficus/src/rust/ficus/src/features/clustering/common.rs @@ -2,7 +2,7 @@ use linfa::DatasetBase; use ndarray::{Array1, ArrayBase, Dim, OwnedRepr}; use crate::{ - event_log::core::event_log::EventLog, + event_log::xes::xes_event_log::XesEventLogImpl, utils::{ colors::{Color, ColorsHolder}, dataset::dataset::FicusDataset, @@ -12,11 +12,8 @@ use crate::{ pub(super) type MyDataset = DatasetBase, Dim<[usize; 2]>>, Array1<()>>; pub(super) type ClusteredDataset = DatasetBase, Dim<[usize; 2]>>, ArrayBase, Dim<[usize; 1]>>>; -pub struct CommonVisualizationParams<'a, TLog> -where - TLog: EventLog, -{ - pub log: &'a TLog, +pub struct CommonVisualizationParams<'a> { + pub log: &'a XesEventLogImpl, pub colors_holder: &'a mut ColorsHolder, pub class_extractor: Option, } diff --git a/Ficus/src/rust/ficus/src/features/clustering/traces/common.rs b/Ficus/src/rust/ficus/src/features/clustering/traces/common.rs index 624f13853..6f91b12b2 100644 --- a/Ficus/src/rust/ficus/src/features/clustering/traces/common.rs +++ b/Ficus/src/rust/ficus/src/features/clustering/traces/common.rs @@ -1,31 +1,45 @@ -use crate::event_log::core::event::event::Event; -use crate::event_log::core::event::event_hasher::RegexEventHasher; -use crate::event_log::core::event_log::EventLog; -use crate::event_log::core::trace::trace::Trace; -use crate::features::analysis::patterns::activity_instances::{ - create_vector_of_immediate_underlying_events, create_vector_of_underlying_events, +use crate::{ + event_log::{ + core::{ + event::{event::Event, event_hasher::RegexEventHasher}, + event_log::EventLog, + trace::trace::Trace, + }, + xes::{xes_event::XesEventImpl, xes_event_log::XesEventLogImpl, xes_trace::XesTraceImpl}, + }, + features::{ + analysis::patterns::activity_instances::{create_vector_of_immediate_underlying_events, create_vector_of_underlying_events}, + clustering::{ + common::{create_colors_vector, scale_raw_dataset_min_max, transform_to_ficus_dataset, MyDataset}, + error::ClusteringError, + traces::traces_params::{FeatureCountKind, TracesClusteringParams, TracesRepresentationSource}, + }, + }, + utils::{ + dataset::dataset::LabeledDataset, + distance::distance::{DistanceWrapper, FicusDistance}, + silhouette::silhouette_score, + }, }; -use crate::features::clustering::common::{create_colors_vector, scale_raw_dataset_min_max, transform_to_ficus_dataset, MyDataset}; -use crate::features::clustering::error::ClusteringError; -use crate::features::clustering::traces::traces_params::{FeatureCountKind, TracesClusteringParams, TracesRepresentationSource}; -use crate::utils::dataset::dataset::LabeledDataset; -use crate::utils::distance::distance::{DistanceWrapper, FicusDistance}; -use crate::utils::silhouette::silhouette_score; use getset::Getters; use linfa::DatasetBase; -use linfa_nn::distance::Distance; -use linfa_nn::CommonNearestNeighbour; -use linfa_nn::CommonNearestNeighbour::{KdTree, LinearSearch}; +use linfa_nn::{ + distance::Distance, + CommonNearestNeighbour, + CommonNearestNeighbour::{KdTree, LinearSearch}, +}; use log::warn; -use ndarray::{Array1, Array2}; -use std::cell::RefCell; -use std::collections::{HashMap, HashSet}; -use std::rc::Rc; - -pub fn do_clusterize_log_by_traces( - params: &mut TracesClusteringParams, - clustering_func: impl Fn(&mut TracesClusteringParams, CommonNearestNeighbour, &MyDataset) -> Result, ClusteringError>, -) -> Result<(Vec, LabeledDataset), ClusteringError> { +use ndarray::Array2; +use std::{ + cell::RefCell, + collections::{HashMap, HashSet}, + rc::Rc, +}; + +pub fn do_clusterize_log_by_traces( + params: &mut TracesClusteringParams, + clustering_func: impl Fn(&mut TracesClusteringParams, CommonNearestNeighbour, &MyDataset) -> Result, ClusteringError>, +) -> Result<(Vec, LabeledDataset), ClusteringError> { let class_extractor = params.vis_params.class_extractor.as_ref(); let traces_dataset = create_traces_dataset( params.vis_params.log, @@ -46,13 +60,13 @@ pub fn do_clusterize_log_by_traces( let ficus_dataset = transform_to_ficus_dataset(&dataset, objects, features); - let mut new_logs: HashMap = HashMap::new(); + let mut new_logs: HashMap = HashMap::new(); for (trace, label) in params.vis_params.log.traces().iter().zip(&labels) { let trace_copy = trace.borrow().clone(); if let Some(cluster_log) = new_logs.get_mut(label) { cluster_log.push(Rc::new(RefCell::new(trace_copy))); } else { - let mut cluster_log = TLog::empty(); + let mut cluster_log = XesEventLogImpl::empty(); cluster_log.push(Rc::new(RefCell::new(trace_copy))); new_logs.insert(label.to_owned(), cluster_log); @@ -65,8 +79,8 @@ pub fn do_clusterize_log_by_traces( Ok((new_logs, LabeledDataset::new(ficus_dataset, labels, colors))) } -fn create_traces_dataset( - log: &TLog, +fn create_traces_dataset( + log: &XesEventLogImpl, distance: &FicusDistance, class_extractor: Option<&String>, feature_count_kind: FeatureCountKind, @@ -82,27 +96,24 @@ fn create_traces_dataset( } } -fn create_traces_dataset_default( - log: &TLog, +fn create_traces_dataset_default( + log: &XesEventLogImpl, class_extractor: Option<&String>, feature_count_kind: FeatureCountKind, trace_repr_source: &TracesRepresentationSource, ) -> Result<(MyDataset, Vec, Vec), ClusteringError> { create_traces_dataset_default_internal(log, class_extractor, feature_count_kind, |trace| { - create_trace_representation::(trace, trace_repr_source) + create_trace_representation(trace, trace_repr_source) }) } -fn create_trace_representation( - trace: &TLog::TTrace, - trace_repr_source: &TracesRepresentationSource, -) -> Vec>> { +fn create_trace_representation(trace: &XesTraceImpl, trace_repr_source: &TracesRepresentationSource) -> Vec>> { match trace_repr_source { TracesRepresentationSource::Events => trace.events().clone(), TracesRepresentationSource::UnderlyingEvents => { let mut events = vec![]; for event in trace.events() { - for event in create_vector_of_immediate_underlying_events::(event) { + for event in create_vector_of_immediate_underlying_events(event) { events.push(event); } } @@ -112,7 +123,7 @@ fn create_trace_representation( TracesRepresentationSource::DeepestUnderlyingEvents => { let mut events = vec![]; for event in trace.events() { - for underlying_event in create_vector_of_underlying_events::(event) { + for underlying_event in create_vector_of_underlying_events(event) { events.push(underlying_event); } } @@ -204,14 +215,12 @@ fn create_traces_dataset_default_internal( )) } -fn create_traces_dataset_levenshtein( - log: &TLog, +fn create_traces_dataset_levenshtein( + log: &XesEventLogImpl, class_extractor: Option<&String>, trace_repr_source: &TracesRepresentationSource, ) -> Result<(MyDataset, Vec, Vec), ClusteringError> { - create_traces_dataset_levenshtein_internal(log, class_extractor, |trace| { - create_trace_representation::(trace, trace_repr_source) - }) + create_traces_dataset_levenshtein_internal(log, class_extractor, |trace| create_trace_representation(trace, trace_repr_source)) } fn create_traces_dataset_levenshtein_internal( diff --git a/Ficus/src/rust/ficus/src/features/clustering/traces/dbscan.rs b/Ficus/src/rust/ficus/src/features/clustering/traces/dbscan.rs index 043b42f4c..a0abf2813 100644 --- a/Ficus/src/rust/ficus/src/features/clustering/traces/dbscan.rs +++ b/Ficus/src/rust/ficus/src/features/clustering/traces/dbscan.rs @@ -1,20 +1,22 @@ use super::traces_params::TracesClusteringParams; -use crate::features::clustering::common::adjust_dbscan_labels; -use crate::features::clustering::traces::common::{calculate_distance, do_clusterize_log_by_traces, BestSilhouetteLabels}; use crate::{ - event_log::core::event_log::EventLog, - features::clustering::error::ClusteringError, + event_log::xes::xes_event_log::XesEventLogImpl, + features::clustering::{ + common::adjust_dbscan_labels, + error::ClusteringError, + traces::common::{calculate_distance, do_clusterize_log_by_traces, BestSilhouetteLabels}, + }, utils::{dataset::dataset::LabeledDataset, distance::distance::DistanceWrapper}, }; use linfa::traits::Transformer; use linfa_clustering::Dbscan; -pub fn clusterize_log_by_traces_dbscan( - params: &mut TracesClusteringParams, +pub fn clusterize_log_by_traces_dbscan( + params: &mut TracesClusteringParams, tolerance: f64, min_points: usize, put_noise_events_in_one_cluster: bool, -) -> Result<(Vec, LabeledDataset), ClusteringError> { +) -> Result<(Vec, LabeledDataset), ClusteringError> { do_clusterize_log_by_traces(params, |params, nn_search_algorithm, dataset| { let clusters = Dbscan::params_with(min_points, DistanceWrapper::new(params.distance), nn_search_algorithm) .tolerance(tolerance) @@ -27,12 +29,12 @@ pub fn clusterize_log_by_traces_dbscan( }) } -pub fn clusterize_log_by_traces_dbscan_grid_search( - params: &mut TracesClusteringParams, +pub fn clusterize_log_by_traces_dbscan_grid_search( + params: &mut TracesClusteringParams, min_points_vec: &Vec, tolerances: &Vec, put_noise_events_in_one_cluster: bool, -) -> Result<(Vec, LabeledDataset), ClusteringError> { +) -> Result<(Vec, LabeledDataset), ClusteringError> { do_clusterize_log_by_traces(params, |params, nn_algo, dataset| { let mut best_labels = BestSilhouetteLabels::new(); diff --git a/Ficus/src/rust/ficus/src/features/clustering/traces/k_means.rs b/Ficus/src/rust/ficus/src/features/clustering/traces/k_means.rs index 412e5b95e..645c19bab 100644 --- a/Ficus/src/rust/ficus/src/features/clustering/traces/k_means.rs +++ b/Ficus/src/rust/ficus/src/features/clustering/traces/k_means.rs @@ -1,17 +1,22 @@ -use crate::event_log::core::event_log::EventLog; -use crate::features::clustering::error::ClusteringError; -use crate::features::clustering::traces::common::{calculate_distance, do_clusterize_log_by_traces, BestSilhouetteLabels}; -use crate::features::clustering::traces::traces_params::TracesClusteringParams; -use crate::utils::dataset::dataset::LabeledDataset; -use crate::utils::distance::distance::DistanceWrapper; +use crate::{ + event_log::xes::xes_event_log::XesEventLogImpl, + features::clustering::{ + error::ClusteringError, + traces::{ + common::{calculate_distance, do_clusterize_log_by_traces, BestSilhouetteLabels}, + traces_params::TracesClusteringParams, + }, + }, + utils::{dataset::dataset::LabeledDataset, distance::distance::DistanceWrapper}, +}; use linfa::prelude::{Fit, Predict}; use linfa_clustering::KMeans; -pub fn clusterize_log_by_traces_kmeans_grid_search( - params: &mut TracesClusteringParams, +pub fn clusterize_log_by_traces_kmeans_grid_search( + params: &mut TracesClusteringParams, max_iterations_count: u64, tolerance: f64, -) -> Result<(Vec, LabeledDataset), ClusteringError> { +) -> Result<(Vec, LabeledDataset), ClusteringError> { do_clusterize_log_by_traces(params, |params, _, dataset| { let mut best_labels = BestSilhouetteLabels::new(); diff --git a/Ficus/src/rust/ficus/src/features/clustering/traces/traces_params.rs b/Ficus/src/rust/ficus/src/features/clustering/traces/traces_params.rs index 4d30d9a07..ef65bf4c2 100644 --- a/Ficus/src/rust/ficus/src/features/clustering/traces/traces_params.rs +++ b/Ficus/src/rust/ficus/src/features/clustering/traces/traces_params.rs @@ -1,14 +1,9 @@ use std::str::FromStr; -use crate::{ - event_log::core::event_log::EventLog, features::clustering::common::CommonVisualizationParams, utils::distance::distance::FicusDistance, -}; +use crate::{features::clustering::common::CommonVisualizationParams, utils::distance::distance::FicusDistance}; -pub struct TracesClusteringParams<'a, TLog> -where - TLog: EventLog, -{ - pub vis_params: CommonVisualizationParams<'a, TLog>, +pub struct TracesClusteringParams<'a> { + pub vis_params: CommonVisualizationParams<'a>, pub distance: FicusDistance, pub repr_source: TracesRepresentationSource, pub feature_count_kind: FeatureCountKind, diff --git a/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha.rs b/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha.rs index 72d02897e..b3058a75d 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha.rs @@ -1,20 +1,28 @@ -use crate::event_log::core::event::event::Event; -use crate::event_log::core::event_log::EventLog; -use crate::event_log::core::trace::trace::Trace; -use crate::features::analysis::log_info::event_log_info::EventLogInfo; -use crate::features::discovery::alpha::alpha_set::AlphaSet; -use crate::features::discovery::alpha::providers::alpha_plus_provider::AlphaPlusRelationsProvider; -use crate::features::discovery::alpha::providers::alpha_provider::AlphaRelationsProvider; -use crate::features::discovery::alpha::utils::maximize; -use crate::features::discovery::petri_net::marking::{Marking, SingleMarking}; -use crate::features::discovery::petri_net::petri_net::{DefaultPetriNet, PetriNet}; -use crate::features::discovery::petri_net::place::Place; -use crate::features::discovery::petri_net::transition::Transition; -use crate::utils::user_data::keys::DefaultKey; -use crate::utils::user_data::user_data::UserData; +use crate::{ + event_log::core::{event::event::Event, event_log::EventLog, trace::trace::Trace}, + features::{ + analysis::log_info::event_log_info::EventLogInfo, + discovery::{ + alpha::{ + alpha_set::AlphaSet, + providers::{alpha_plus_provider::AlphaPlusRelationsProvider, alpha_provider::AlphaRelationsProvider}, + utils::maximize, + }, + petri_net::{ + marking::{Marking, SingleMarking}, + petri_net::{DefaultPetriNet, PetriNet}, + place::Place, + transition::Transition, + }, + }, + }, + utils::user_data::{keys::DefaultKey, user_data::UserData}, +}; use once_cell::sync::Lazy; -use std::collections::{HashMap, HashSet}; -use std::string::ToString; +use std::{ + collections::{HashMap, HashSet}, + string::ToString, +}; pub static ALPHA_SET: Lazy> = Lazy::new(|| DefaultKey::new("alpha_set".to_string())); diff --git a/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha_plus_plus_nfc/alpha_plus_plus_nfc.rs b/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha_plus_plus_nfc/alpha_plus_plus_nfc.rs index 5b1208ff1..0fc07f638 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha_plus_plus_nfc/alpha_plus_plus_nfc.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha_plus_plus_nfc/alpha_plus_plus_nfc.rs @@ -1,20 +1,23 @@ -use crate::event_log::core::event_log::EventLog; -use crate::features::analysis::log_info::event_log_info::{EventLogInfo, OfflineEventLogInfo}; -use crate::features::analysis::log_info::log_info_creation_dto::EventLogInfoCreationDto; -use crate::features::discovery::alpha::alpha::{ - discover_petri_net_alpha, discover_petri_net_alpha_plus, find_transitions_one_length_loop, ALPHA_SET, +use crate::{ + event_log::core::event_log::EventLog, + features::{ + analysis::log_info::{ + event_log_info::{EventLogInfo, OfflineEventLogInfo}, + log_info_creation_dto::EventLogInfoCreationDto, + }, + discovery::{ + alpha::{ + alpha::{discover_petri_net_alpha, discover_petri_net_alpha_plus, find_transitions_one_length_loop, ALPHA_SET}, + alpha_plus_plus_nfc::{alpha_plus_plus_nfc_triple::AlphaPlusPlusNfcTriple, extended_alpha_set::ExtendedAlphaSet, w3_pair::W3Pair}, + providers::alpha_plus_nfc_provider::AlphaPlusNfcRelationsProvider, + utils::maximize, + }, + petri_net::{petri_net::DefaultPetriNet, place::Place, transition::Transition}, + relations::triangle_relation::{OfflineTriangleRelation, TriangleRelation}, + }, + }, + utils::{sets::two_sets::TwoSets, user_data::user_data::UserData}, }; -use crate::features::discovery::alpha::alpha_plus_plus_nfc::alpha_plus_plus_nfc_triple::AlphaPlusPlusNfcTriple; -use crate::features::discovery::alpha::alpha_plus_plus_nfc::extended_alpha_set::ExtendedAlphaSet; -use crate::features::discovery::alpha::alpha_plus_plus_nfc::w3_pair::W3Pair; -use crate::features::discovery::alpha::providers::alpha_plus_nfc_provider::AlphaPlusNfcRelationsProvider; -use crate::features::discovery::alpha::utils::maximize; -use crate::features::discovery::petri_net::petri_net::DefaultPetriNet; -use crate::features::discovery::petri_net::place::Place; -use crate::features::discovery::petri_net::transition::Transition; -use crate::features::discovery::relations::triangle_relation::{OfflineTriangleRelation, TriangleRelation}; -use crate::utils::sets::two_sets::TwoSets; -use crate::utils::user_data::user_data::UserData; use std::collections::{HashMap, HashSet, VecDeque}; pub fn discover_petri_net_alpha_plus_plus_nfc(log: &TLog) -> DefaultPetriNet { diff --git a/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha_plus_plus_nfc/alpha_plus_plus_nfc_triple.rs b/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha_plus_plus_nfc/alpha_plus_plus_nfc_triple.rs index fbfe08642..01570e745 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha_plus_plus_nfc/alpha_plus_plus_nfc_triple.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha_plus_plus_nfc/alpha_plus_plus_nfc_triple.rs @@ -1,11 +1,15 @@ -use crate::event_log::core::event_log::EventLog; -use crate::features::discovery::alpha::providers::alpha_plus_nfc_provider::AlphaPlusNfcRelationsProvider; -use crate::features::discovery::alpha::providers::alpha_plus_provider::AlphaPlusRelationsProvider; -use crate::features::discovery::alpha::providers::alpha_provider::AlphaRelationsProvider; -use crate::utils::hash_utils::compare_based_on_hashes; -use crate::utils::sets::two_sets::TwoSets; -use std::collections::BTreeSet; -use std::hash::{Hash, Hasher}; +use crate::{ + event_log::core::event_log::EventLog, + features::discovery::alpha::providers::{ + alpha_plus_nfc_provider::AlphaPlusNfcRelationsProvider, alpha_plus_provider::AlphaPlusRelationsProvider, + alpha_provider::AlphaRelationsProvider, + }, + utils::{hash_utils::compare_based_on_hashes, sets::two_sets::TwoSets}, +}; +use std::{ + collections::BTreeSet, + hash::{Hash, Hasher}, +}; pub(crate) struct AlphaPlusPlusNfcTriple<'a> { a_classes: BTreeSet<&'a String>, @@ -92,10 +96,6 @@ impl<'a> AlphaPlusPlusNfcTriple<'a> { pub fn b_classes(&self) -> &BTreeSet<&'a String> { &self.b_classes } - - pub fn c_classes(&self) -> &BTreeSet<&'a String> { - &self.c_classes - } } impl<'a> Hash for AlphaPlusPlusNfcTriple<'a> { diff --git a/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha_plus_plus_nfc/extended_alpha_set.rs b/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha_plus_plus_nfc/extended_alpha_set.rs index 3967c16f2..f193f6468 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha_plus_plus_nfc/extended_alpha_set.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha_plus_plus_nfc/extended_alpha_set.rs @@ -1,11 +1,15 @@ -use crate::event_log::core::event_log::EventLog; -use crate::features::discovery::alpha::alpha_set::AlphaSet; -use crate::features::discovery::alpha::providers::alpha_plus_nfc_provider::AlphaPlusNfcRelationsProvider; -use crate::features::discovery::alpha::providers::alpha_provider::AlphaRelationsProvider; -use crate::utils::hash_utils::compare_based_on_hashes; -use crate::utils::sets::two_sets::TwoSets; -use std::collections::{BTreeSet, HashSet}; -use std::hash::{Hash, Hasher}; +use crate::{ + event_log::core::event_log::EventLog, + features::discovery::alpha::{ + alpha_set::AlphaSet, + providers::{alpha_plus_nfc_provider::AlphaPlusNfcRelationsProvider, alpha_provider::AlphaRelationsProvider}, + }, + utils::{hash_utils::compare_based_on_hashes, sets::two_sets::TwoSets}, +}; +use std::{ + collections::{BTreeSet, HashSet}, + hash::{Hash, Hasher}, +}; pub(crate) struct ExtendedAlphaSet<'a> { alpha_set: AlphaSet, @@ -149,14 +153,6 @@ impl<'a> ExtendedAlphaSet<'a> { true } - pub fn subset(&self, other: &Self) -> bool { - if !self.alpha_set.is_full_subset(&other.alpha_set) { - false - } else { - self.left_extension.is_subset(&other.left_extension) && self.right_extension.is_subset(&other.right_extension) - } - } - pub fn merge(&self, other: &Self) -> Self { Self { alpha_set: self.alpha_set.extend(&other.alpha_set), diff --git a/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha_plus_plus_nfc/w3_pair.rs b/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha_plus_plus_nfc/w3_pair.rs index d0b251127..4990bf992 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha_plus_plus_nfc/w3_pair.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha_plus_plus_nfc/w3_pair.rs @@ -1,10 +1,12 @@ -use crate::event_log::core::event_log::EventLog; -use crate::features::discovery::alpha::providers::alpha_plus_nfc_provider::AlphaPlusNfcRelationsProvider; -use crate::features::discovery::alpha::providers::alpha_provider::AlphaRelationsProvider; -use crate::utils::hash_utils::compare_based_on_hashes; -use crate::utils::sets::two_sets::TwoSets; -use std::collections::HashSet; -use std::hash::{Hash, Hasher}; +use crate::{ + event_log::core::event_log::EventLog, + features::discovery::alpha::providers::{alpha_plus_nfc_provider::AlphaPlusNfcRelationsProvider, alpha_provider::AlphaRelationsProvider}, + utils::{hash_utils::compare_based_on_hashes, sets::two_sets::TwoSets}, +}; +use std::{ + collections::HashSet, + hash::{Hash, Hasher}, +}; pub(crate) struct W3Pair<'a> { two_sets: TwoSets<&'a String>, diff --git a/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha_set.rs b/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha_set.rs index ab7e82256..d766c3a8f 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha_set.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha_set.rs @@ -1,6 +1,7 @@ -use crate::features::discovery::alpha::providers::alpha_provider::AlphaRelationsProvider; -use crate::utils::hash_utils::compare_based_on_hashes; -use crate::utils::sets::two_sets::TwoSets; +use crate::{ + features::discovery::alpha::providers::alpha_provider::AlphaRelationsProvider, + utils::{hash_utils::compare_based_on_hashes, sets::two_sets::TwoSets}, +}; use std::hash::{Hash, Hasher}; #[derive(Debug)] diff --git a/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha_sharp.rs b/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha_sharp.rs index 0572a8a19..adbe40306 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha_sharp.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/alpha/alpha_sharp.rs @@ -1,15 +1,26 @@ -use crate::event_log::core::event_log::EventLog; -use crate::features::analysis::log_info::event_log_info::{EventLogInfo, OfflineEventLogInfo}; -use crate::features::analysis::log_info::log_info_creation_dto::EventLogInfoCreationDto; -use crate::features::discovery::alpha::alpha::find_transitions_one_length_loop; -use crate::features::discovery::alpha::providers::alpha_provider::AlphaRelationsProvider; -use crate::features::discovery::alpha::providers::alpha_sharp_provider::AlphaSharpRelationsProvider; -use crate::features::discovery::alpha::utils::maximize; -use crate::features::discovery::relations::triangle_relation::TriangleRelation; -use crate::utils::hash_utils::compare_based_on_hashes; +use crate::{ + event_log::core::event_log::EventLog, + features::{ + analysis::log_info::{ + event_log_info::{EventLogInfo, OfflineEventLogInfo}, + log_info_creation_dto::EventLogInfoCreationDto, + }, + discovery::{ + alpha::{ + alpha::find_transitions_one_length_loop, + providers::{alpha_provider::AlphaRelationsProvider, alpha_sharp_provider::AlphaSharpRelationsProvider}, + utils::maximize, + }, + relations::triangle_relation::TriangleRelation, + }, + }, + utils::hash_utils::compare_based_on_hashes, +}; use log::debug; -use std::collections::{BTreeSet, HashSet}; -use std::hash::{Hash, Hasher}; +use std::{ + collections::{BTreeSet, HashSet}, + hash::{Hash, Hasher}, +}; type AlphaSharpSet<'a> = BTreeSet<(BTreeSet<&'a String>, BTreeSet<&'a String>)>; @@ -20,14 +31,6 @@ struct AlphaSharpTuple<'a> { } impl<'a> AlphaSharpTuple<'a> { - pub fn empty(provider: &'a AlphaSharpRelationsProvider<'a>) -> Self { - Self { - provider, - p_in: AlphaSharpSet::new(), - p_out: AlphaSharpSet::new(), - } - } - pub fn try_create_new( p_in: (&'a String, &'a String), p_out: (&'a String, &'a String), @@ -196,20 +199,22 @@ impl<'a> ToString for AlphaSharpTuple<'a> { impl<'a> Clone for AlphaSharpTuple<'a> { fn clone(&self) -> Self { + let construct_set = |set: &AlphaSharpSet<'a>| -> AlphaSharpSet<'a> { + set + .iter() + .map(|t| { + ( + BTreeSet::from_iter(t.0.iter().map(|r| *r)), + BTreeSet::from_iter(t.0.iter().map(|r| *r)), + ) + }) + .collect() + }; + Self { provider: self.provider, - p_in: BTreeSet::from_iter(self.p_in.iter().map(|t| { - ( - BTreeSet::from_iter(t.0.iter().map(|r| r.clone())), - BTreeSet::from_iter(t.0.iter().map(|r| r.clone())), - ) - })), - p_out: BTreeSet::from_iter(self.p_out.iter().map(|t| { - ( - BTreeSet::from_iter(t.0.iter().map(|r| r.clone())), - BTreeSet::from_iter(t.0.iter().map(|r| r.clone())), - ) - })), + p_in: construct_set(&self.p_in), + p_out: construct_set(&self.p_out), } } } diff --git a/Ficus/src/rust/ficus/src/features/discovery/alpha/providers/alpha_plus_nfc_provider.rs b/Ficus/src/rust/ficus/src/features/discovery/alpha/providers/alpha_plus_nfc_provider.rs index 30b961ac3..74597a16e 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/alpha/providers/alpha_plus_nfc_provider.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/alpha/providers/alpha_plus_nfc_provider.rs @@ -1,12 +1,18 @@ use super::relations_cache::RelationsCaches; -use crate::event_log::core::event::event::Event; -use crate::event_log::core::event_log::EventLog; -use crate::event_log::core::trace::trace::Trace; -use crate::features::analysis::log_info::event_log_info::EventLogInfo; -use crate::features::discovery::alpha::providers::alpha_plus_provider::{AlphaPlusRelationsProvider, AlphaPlusRelationsProviderImpl}; -use crate::features::discovery::alpha::providers::alpha_provider::AlphaRelationsProvider; -use crate::features::discovery::petri_net::petri_net::DefaultPetriNet; -use crate::features::discovery::relations::triangle_relation::TriangleRelation; +use crate::{ + event_log::core::{event::event::Event, event_log::EventLog, trace::trace::Trace}, + features::{ + analysis::log_info::event_log_info::EventLogInfo, + discovery::{ + alpha::providers::{ + alpha_plus_provider::{AlphaPlusRelationsProvider, AlphaPlusRelationsProviderImpl}, + alpha_provider::AlphaRelationsProvider, + }, + petri_net::petri_net::DefaultPetriNet, + relations::triangle_relation::TriangleRelation, + }, + }, +}; use std::collections::HashSet; enum PrePostSet { diff --git a/Ficus/src/rust/ficus/src/features/discovery/alpha/providers/alpha_plus_provider.rs b/Ficus/src/rust/ficus/src/features/discovery/alpha/providers/alpha_plus_provider.rs index b45ea1d76..edf2ae1c8 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/alpha/providers/alpha_plus_provider.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/alpha/providers/alpha_plus_provider.rs @@ -1,6 +1,7 @@ -use crate::features::analysis::log_info::event_log_info::EventLogInfo; -use crate::features::discovery::alpha::providers::alpha_provider::AlphaRelationsProvider; -use crate::features::discovery::relations::triangle_relation::TriangleRelation; +use crate::features::{ + analysis::log_info::event_log_info::EventLogInfo, + discovery::{alpha::providers::alpha_provider::AlphaRelationsProvider, relations::triangle_relation::TriangleRelation}, +}; use std::collections::HashSet; pub trait AlphaPlusRelationsProvider: AlphaRelationsProvider { diff --git a/Ficus/src/rust/ficus/src/features/discovery/alpha/providers/alpha_sharp_provider.rs b/Ficus/src/rust/ficus/src/features/discovery/alpha/providers/alpha_sharp_provider.rs index c58cd9bf1..341bb1804 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/alpha/providers/alpha_sharp_provider.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/alpha/providers/alpha_sharp_provider.rs @@ -1,7 +1,13 @@ -use crate::features::analysis::log_info::event_log_info::{EventLogInfo, OfflineEventLogInfo}; -use crate::features::discovery::alpha::providers::alpha_plus_provider::{AlphaPlusRelationsProvider, AlphaPlusRelationsProviderImpl}; -use crate::features::discovery::alpha::providers::alpha_provider::AlphaRelationsProvider; -use crate::features::discovery::relations::triangle_relation::TriangleRelation; +use crate::features::{ + analysis::log_info::event_log_info::{EventLogInfo, OfflineEventLogInfo}, + discovery::{ + alpha::providers::{ + alpha_plus_provider::{AlphaPlusRelationsProvider, AlphaPlusRelationsProviderImpl}, + alpha_provider::AlphaRelationsProvider, + }, + relations::triangle_relation::TriangleRelation, + }, +}; use std::collections::HashSet; pub struct AlphaSharpRelationsProvider<'a> { diff --git a/Ficus/src/rust/ficus/src/features/discovery/alpha/utils.rs b/Ficus/src/rust/ficus/src/features/discovery/alpha/utils.rs index 4af31ecc3..1018f18d1 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/alpha/utils.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/alpha/utils.rs @@ -1,5 +1,4 @@ -use std::collections::HashSet; -use std::hash::Hash; +use std::{collections::HashSet, hash::Hash}; pub fn maximize( elements: HashSet, diff --git a/Ficus/src/rust/ficus/src/features/discovery/fuzzy/fuzzy_metrics_provider.rs b/Ficus/src/rust/ficus/src/features/discovery/fuzzy/fuzzy_metrics_provider.rs index 5a21bbb8d..994be7485 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/fuzzy/fuzzy_metrics_provider.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/fuzzy/fuzzy_metrics_provider.rs @@ -1,8 +1,10 @@ use super::fuzzy_miner::FuzzyGraph; -use crate::features::analysis::log_info::event_log_info::{EventLogInfo, OfflineEventLogInfo}; use crate::{ event_log::core::{event::event::Event, event_log::EventLog, trace::trace::Trace}, - features::discovery::alpha::providers::relations_cache::RelationsCaches, + features::{ + analysis::log_info::event_log_info::{EventLogInfo, OfflineEventLogInfo}, + discovery::alpha::providers::relations_cache::RelationsCaches, + }, }; const PROXIMITY_CORRELATION: &'static str = "ProximityCorrelation"; diff --git a/Ficus/src/rust/ficus/src/features/discovery/fuzzy/fuzzy_miner.rs b/Ficus/src/rust/ficus/src/features/discovery/fuzzy/fuzzy_miner.rs index 16ae77f3e..9b0ef5d2e 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/fuzzy/fuzzy_miner.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/fuzzy/fuzzy_miner.rs @@ -1,12 +1,17 @@ use super::fuzzy_metrics_provider::FuzzyMetricsProvider; -use crate::event_log::core::event_log::EventLog; -use crate::features::analysis::log_info::event_log_info::OfflineEventLogInfo; -use crate::features::analysis::log_info::log_info_creation_dto::EventLogInfoCreationDto; -use crate::utils::graph::graph::{Graph, NodesConnectionData}; -use crate::utils::sets::one_set::OneSet; -use std::cell::RefCell; -use std::collections::{HashMap, HashSet}; -use std::rc::Rc; +use crate::{ + event_log::core::event_log::EventLog, + features::analysis::log_info::{event_log_info::OfflineEventLogInfo, log_info_creation_dto::EventLogInfoCreationDto}, + utils::{ + graph::graph::{Graph, NodesConnectionData}, + sets::one_set::OneSet, + }, +}; +use std::{ + cell::RefCell, + collections::{HashMap, HashSet}, + rc::Rc, +}; pub type FuzzyGraph = Graph; diff --git a/Ficus/src/rust/ficus/src/features/discovery/heuristic/heuristic_miner.rs b/Ficus/src/rust/ficus/src/features/discovery/heuristic/heuristic_miner.rs index 8892f914c..e76f016cd 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/heuristic/heuristic_miner.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/heuristic/heuristic_miner.rs @@ -1,12 +1,15 @@ -use crate::features::analysis::log_info::event_log_info::EventLogInfo; -use crate::features::discovery::alpha::providers::alpha_provider::DefaultAlphaRelationsProvider; -use crate::features::discovery::alpha::utils::maximize; -use crate::features::discovery::heuristic::relations_provider::{AndOrXorRelation, HeuristicMinerRelationsProvider}; -use crate::features::discovery::petri_net::petri_net::DefaultPetriNet; -use crate::features::discovery::petri_net::place::Place; -use crate::features::discovery::petri_net::transition::Transition; -use crate::features::discovery::relations::triangle_relation::TriangleRelation; -use crate::utils::sets::one_set::OneSet; +use crate::{ + features::{ + analysis::log_info::event_log_info::EventLogInfo, + discovery::{ + alpha::{providers::alpha_provider::DefaultAlphaRelationsProvider, utils::maximize}, + heuristic::relations_provider::{AndOrXorRelation, HeuristicMinerRelationsProvider}, + petri_net::{petri_net::DefaultPetriNet, place::Place, transition::Transition}, + relations::triangle_relation::TriangleRelation, + }, + }, + utils::sets::one_set::OneSet, +}; use std::collections::{HashMap, HashSet}; pub fn discover_petri_net_heuristic( diff --git a/Ficus/src/rust/ficus/src/features/discovery/heuristic/relations_provider.rs b/Ficus/src/rust/ficus/src/features/discovery/heuristic/relations_provider.rs index 1ecf4fb21..45e3517f2 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/heuristic/relations_provider.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/heuristic/relations_provider.rs @@ -1,7 +1,10 @@ -use crate::event_log::core::event_log::EventLog; -use crate::features::analysis::log_info::event_log_info::EventLogInfo; -use crate::features::discovery::alpha::providers::alpha_provider::{AlphaRelationsProvider, DefaultAlphaRelationsProvider}; -use crate::features::discovery::relations::triangle_relation::TriangleRelation; +use crate::features::{ + analysis::log_info::event_log_info::EventLogInfo, + discovery::{ + alpha::providers::alpha_provider::{AlphaRelationsProvider, DefaultAlphaRelationsProvider}, + relations::triangle_relation::TriangleRelation, + }, +}; use std::collections::HashMap; type DependencyRelations = HashMap>; diff --git a/Ficus/src/rust/ficus/src/features/discovery/multithreaded_dfg/dfg.rs b/Ficus/src/rust/ficus/src/features/discovery/multithreaded_dfg/dfg.rs index c42b0b11f..ebbd52488 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/multithreaded_dfg/dfg.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/multithreaded_dfg/dfg.rs @@ -1,27 +1,29 @@ -use crate::event_log::core::event::event::Event; -use crate::event_log::core::event_log::EventLog; -use crate::event_log::core::trace::trace::Trace; -use crate::event_log::xes::xes_event::XesEventImpl; -use crate::event_log::xes::xes_event_log::XesEventLogImpl; -use crate::event_log::xes::xes_trace::XesTraceImpl; -use crate::features::discovery::timeline::events_groups::EventGroup; -use crate::features::discovery::timeline::software_data::extraction_config::SoftwareDataExtractionConfig; -use crate::features::discovery::timeline::utils::extract_thread_id; -use crate::utils::context_key::DefaultContextKey; -use crate::utils::graph::graph::{DefaultGraph, NodesConnectionData}; -use crate::utils::references::HeapedOrOwned; -use crate::utils::user_data::user_data::UserData; +use crate::{ + context_key, + event_log::{ + core::{event::event::Event, event_log::EventLog, trace::trace::Trace}, + xes::{xes_event::XesEventImpl, xes_event_log::XesEventLogImpl, xes_trace::XesTraceImpl}, + }, + features::discovery::timeline::{ + events_groups::EventGroup, software_data::extraction_config::SoftwareDataExtractionConfig, utils::extract_thread_id, + }, + utils::{ + graph::graph::{DefaultGraph, NodesConnectionData}, + references::HeapedOrOwned, + user_data::user_data::UserData, + }, +}; use fancy_regex::Regex; use lazy_static::lazy_static; -use std::cell::RefCell; -use std::collections::{HashMap, HashSet}; -use std::rc::Rc; +use std::{ + cell::RefCell, + collections::{HashMap, HashSet}, + rc::Rc, +}; const MULTITHREADED_FRAGMENT: &'static str = "MULTITHREADED_FRAGMENT"; -lazy_static! { - pub static ref MULTITHREAD_FRAGMENT_KEY: DefaultContextKey = DefaultContextKey::new(MULTITHREADED_FRAGMENT); -} +context_key! { MULTITHREADED_FRAGMENT, XesEventLogImpl } pub enum MultithreadedTracePartsCreationStrategy { Regexes(Vec), @@ -101,7 +103,7 @@ pub fn enumerate_multithreaded_events_groups( group .user_data_mut() - .put_concrete(MULTITHREAD_FRAGMENT_KEY.key(), multithreaded_fragment_log); + .put_concrete(MULTITHREADED_FRAGMENT_KEY.key(), multithreaded_fragment_log); trace_groups.push(group); } diff --git a/Ficus/src/rust/ficus/src/features/discovery/ocel/graph_annotation.rs b/Ficus/src/rust/ficus/src/features/discovery/ocel/graph_annotation.rs index b9f4690e5..18431a1d0 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/ocel/graph_annotation.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/ocel/graph_annotation.rs @@ -1,14 +1,15 @@ -use crate::features::discovery::root_sequence::context_keys::EDGE_SOFTWARE_DATA_KEY; -use crate::features::discovery::timeline::software_data::models::OcelObjectAction; -use crate::utils::graph::graph::DefaultGraph; -use crate::utils::references::HeapedOrOwned; -use crate::utils::user_data::user_data::UserData; +use crate::{ + features::discovery::{root_sequence::context_keys::EDGE_SOFTWARE_DATA_KEY, timeline::software_data::models::OcelObjectAction}, + utils::{graph::graph::DefaultGraph, references::HeapedOrOwned, user_data::user_data::UserData}, +}; use derive_new::new; use enum_display::EnumDisplay; use getset::Getters; use lazy_static::lazy_static; -use std::collections::{HashMap, HashSet, VecDeque}; -use std::rc::Rc; +use std::{ + collections::{HashMap, HashSet, VecDeque}, + rc::Rc, +}; #[derive(new, Getters)] pub struct OcelAnnotation { @@ -111,7 +112,7 @@ pub struct OcelObjectRelations { #[get = "pub"] from_element_id: u64, #[get = "pub"] - related_objects_ids: Vec> + related_objects_ids: Vec>, } lazy_static! { @@ -213,7 +214,7 @@ pub fn create_ocel_annotation_for_dag(graph: &DefaultGraph) -> Result = - DefaultContextKey::new("PERFORMANCE_ANNOTATION_INFO"); -} +const PERFORMANCE_ANNOTATION_INFO: &'static str = "PERFORMANCE_ANNOTATION_INFO"; +context_key! { PERFORMANCE_ANNOTATION_INFO, PerformanceAnnotationInfo } pub type PerformanceMap = HashMap<(HeapedOrOwned, HeapedOrOwned), (f64, usize)>; diff --git a/Ficus/src/rust/ficus/src/features/discovery/petri_net/petri_net.rs b/Ficus/src/rust/ficus/src/features/discovery/petri_net/petri_net.rs index 88a17c25c..bc3e859a0 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/petri_net/petri_net.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/petri_net/petri_net.rs @@ -1,6 +1,4 @@ -use crate::features::discovery::petri_net::marking::Marking; -use crate::features::discovery::petri_net::place::Place; -use crate::features::discovery::petri_net::transition::Transition; +use crate::features::discovery::petri_net::{marking::Marking, place::Place, transition::Transition}; use std::collections::HashMap; use super::arc::Arc; diff --git a/Ficus/src/rust/ficus/src/features/discovery/petri_net/place.rs b/Ficus/src/rust/ficus/src/features/discovery/petri_net/place.rs index 212955d53..d68548f5d 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/petri_net/place.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/petri_net/place.rs @@ -1,5 +1,4 @@ -use crate::features::discovery::petri_net::ids::next_id; -use crate::utils::user_data::user_data::UserDataImpl; +use crate::{features::discovery::petri_net::ids::next_id, utils::user_data::user_data::UserDataImpl}; const EMPTY_PLACE_NAME: &'static str = "EmptyPlace"; diff --git a/Ficus/src/rust/ficus/src/features/discovery/petri_net/pnml_serialization.rs b/Ficus/src/rust/ficus/src/features/discovery/petri_net/pnml_serialization.rs index 1d219c714..317a45102 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/petri_net/pnml_serialization.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/petri_net/pnml_serialization.rs @@ -1,13 +1,12 @@ -use crate::features::discovery::petri_net::arc::Arc; -use crate::features::discovery::petri_net::petri_net::PetriNet; -use crate::features::discovery::petri_net::place::Place; -use crate::features::discovery::petri_net::transition::Transition; -use crate::utils::xml_utils::{StartEndElementCookie, XmlWriteError}; -use quick_xml::events::{BytesText, Event}; -use quick_xml::Writer; -use std::cell::RefCell; -use std::fs; -use std::io::Cursor; +use crate::{ + features::discovery::petri_net::{arc::Arc, petri_net::PetriNet, place::Place, transition::Transition}, + utils::xml_utils::{StartEndElementCookie, XmlWriteError}, +}; +use quick_xml::{ + events::{BytesText, Event}, + Writer, +}; +use std::{cell::RefCell, fs, io::Cursor}; const PNML_TAG_NAME: &'static str = "pnml"; const TRANSITION_TAG_NAME: &'static str = "transition"; @@ -161,7 +160,7 @@ where TTransitionData: ToString, { let incoming_arcs = patch_arcs_list(transition.incoming_arcs(), use_names_as_ids, |arc| { - create_arc_name::( + create_arc_name( create_place_id(net.place(&arc.place_id()), use_names_as_ids), create_transition_id(transition, use_names_as_ids), ) @@ -217,7 +216,7 @@ where TTransitionData: ToString, { let outgoing_arcs = patch_arcs_list(transition.outgoing_arcs(), use_names_as_ids, |arc| { - create_arc_name::( + create_arc_name( create_transition_id(transition, use_names_as_ids), create_place_id(net.place(&arc.place_id()), use_names_as_ids), ) @@ -258,6 +257,6 @@ where } } -fn create_arc_name(from_name: String, to_name: String) -> String { +fn create_arc_name(from_name: String, to_name: String) -> String { format!("[{{{}}}--{{{}}}]", from_name, to_name) } diff --git a/Ficus/src/rust/ficus/src/features/discovery/petri_net/transition.rs b/Ficus/src/rust/ficus/src/features/discovery/petri_net/transition.rs index 3237d1d18..dd4b29634 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/petri_net/transition.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/petri_net/transition.rs @@ -1,5 +1,4 @@ -use crate::features::discovery::petri_net::arc::Arc; -use crate::features::discovery::petri_net::ids::next_id; +use crate::features::discovery::petri_net::{arc::Arc, ids::next_id}; use std::hash::{Hash, Hasher}; #[derive(Debug)] diff --git a/Ficus/src/rust/ficus/src/features/discovery/relations/triangle_relation.rs b/Ficus/src/rust/ficus/src/features/discovery/relations/triangle_relation.rs index 0748fab98..ce8ac09de 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/relations/triangle_relation.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/relations/triangle_relation.rs @@ -1,6 +1,4 @@ -use crate::event_log::core::event::event::Event; -use crate::event_log::core::event_log::EventLog; -use crate::event_log::core::trace::trace::Trace; +use crate::event_log::core::{event::event::Event, event_log::EventLog, trace::trace::Trace}; use std::collections::HashMap; pub trait TriangleRelation { diff --git a/Ficus/src/rust/ficus/src/features/discovery/root_sequence/adjustments.rs b/Ficus/src/rust/ficus/src/features/discovery/root_sequence/adjustments.rs index b0da157b5..e8659d2e3 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/root_sequence/adjustments.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/root_sequence/adjustments.rs @@ -1,19 +1,27 @@ -use crate::features::discovery::petri_net::annotations::{PerformanceAnnotationInfo, PerformanceMap, PERFORMANCE_ANNOTATION_INFO_KEY}; -use crate::features::discovery::root_sequence::context::DiscoveryContext; -use crate::features::discovery::root_sequence::context_keys::{ - NODE_CORRESPONDING_TRACE_DATA_KEY, NODE_INNER_GRAPH_KEY, NODE_SOFTWARE_DATA_KEY, NODE_START_END_ACTIVITIES_TIMES_KEY, - NODE_START_END_ACTIVITY_TIME_KEY, +use crate::{ + features::discovery::{ + petri_net::annotations::{PerformanceAnnotationInfo, PerformanceMap, PERFORMANCE_ANNOTATION_INFO_KEY}, + root_sequence::{ + context::DiscoveryContext, + context_keys::{ + NODE_CORRESPONDING_TRACE_DATA_KEY, NODE_INNER_GRAPH_KEY, NODE_SOFTWARE_DATA_KEY, NODE_START_END_ACTIVITIES_TIMES_KEY, + NODE_START_END_ACTIVITY_TIME_KEY, + }, + discovery::{replay_sequence_with_history, EVENT_UNIQUE_ID_KEY}, + models::{ActivityStartEndTimeData, DiscoverRootSequenceGraphError, EventWithUniqueId, NodeAdditionalDataContainer}, + }, + }, + utils::{ + context_key::DefaultContextKey, + graph::graph::{DefaultGraph, NodesConnectionData}, + references::HeapedOrOwned, + user_data::user_data::UserData, + }, }; -use crate::features::discovery::root_sequence::discovery::{replay_sequence_with_history, EVENT_UNIQUE_ID_KEY}; -use crate::features::discovery::root_sequence::models::{ - ActivityStartEndTimeData, DiscoverRootSequenceGraphError, EventWithUniqueId, NodeAdditionalDataContainer, +use std::{ + collections::{HashMap, HashSet}, + fmt::Debug, }; -use crate::utils::context_key::DefaultContextKey; -use crate::utils::graph::graph::{DefaultGraph, NodesConnectionData}; -use crate::utils::references::HeapedOrOwned; -use crate::utils::user_data::user_data::UserData; -use std::collections::{HashMap, HashSet}; -use std::fmt::Debug; pub fn merge_sequences_of_nodes(graph: &mut DefaultGraph, performance_map: Option) { for current_sequence in discover_sequences_to_merge(graph) { diff --git a/Ficus/src/rust/ficus/src/features/discovery/root_sequence/context.rs b/Ficus/src/rust/ficus/src/features/discovery/root_sequence/context.rs index c9a8975c6..2b76c29f5 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/root_sequence/context.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/root_sequence/context.rs @@ -1,6 +1,7 @@ -use crate::features::discovery::root_sequence::models::RootSequenceKind; -use crate::utils::references::HeapedOrOwned; -use crate::utils::user_data::user_data::UserDataImpl; +use crate::{ + features::discovery::root_sequence::models::RootSequenceKind, + utils::{references::HeapedOrOwned, user_data::user_data::UserDataImpl}, +}; type NameExtractor<'a, T> = &'a dyn Fn(&T) -> HeapedOrOwned; type ArtificialStartEnd<'a, T> = &'a dyn Fn() -> (T, T); diff --git a/Ficus/src/rust/ficus/src/features/discovery/root_sequence/context_keys.rs b/Ficus/src/rust/ficus/src/features/discovery/root_sequence/context_keys.rs index 916d11065..7c5c4d2d3 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/root_sequence/context_keys.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/root_sequence/context_keys.rs @@ -1,11 +1,15 @@ -use crate::event_log::xes::xes_event_log::XesEventLogImpl; -use crate::features::analysis::patterns::pattern_info::{UnderlyingPatternGraphInfo, UnderlyingPatternInfo}; -use crate::features::discovery::root_sequence::models::{ - ActivityStartEndTimeData, CorrespondingTraceData, EdgeTraceExecutionInfo, NodeAdditionalDataContainer, +use crate::{ + context_key, + event_log::xes::xes_event_log::XesEventLogImpl, + features::{ + analysis::patterns::pattern_info::{UnderlyingPatternGraphInfo, UnderlyingPatternInfo}, + discovery::{ + root_sequence::models::{ActivityStartEndTimeData, CorrespondingTraceData, EdgeTraceExecutionInfo, NodeAdditionalDataContainer}, + timeline::software_data::models::SoftwareData, + }, + }, + utils::graph::graph::DefaultGraph, }; -use crate::features::discovery::timeline::software_data::models::SoftwareData; -use crate::utils::context_key::DefaultContextKey; -use crate::utils::graph::graph::DefaultGraph; use lazy_static::lazy_static; pub const NODE_SOFTWARE_DATA: &'static str = "node_software_data"; @@ -17,32 +21,19 @@ pub const NODE_UNDERLYING_PATTERNS_INFOS: &'static str = "node_underlying_patter pub const NODE_UNDERLYING_PATTERNS_GRAPHS_INFO: &'static str = "node_underlying_patterns_graphs_infos"; pub const NODE_MULTITHREADED_FRAGMENT_LOG: &'static str = "node_multithreaded_fragment_log"; -lazy_static! { - pub static ref NODE_SOFTWARE_DATA_KEY: DefaultContextKey>> = - DefaultContextKey::new(NODE_SOFTWARE_DATA); - pub static ref NODE_CORRESPONDING_TRACE_DATA_KEY: DefaultContextKey>> = - DefaultContextKey::new(NODE_CORRESPONDING_TRACE_DATA); - pub static ref NODE_INNER_GRAPH_KEY: DefaultContextKey = DefaultContextKey::new(NODE_SOFTWARE_DATA); - pub static ref NODE_START_END_ACTIVITY_TIME_KEY: DefaultContextKey> = - DefaultContextKey::new(NODE_START_END_ACTIVITY_TIME); - pub static ref NODE_START_END_ACTIVITIES_TIMES_KEY: DefaultContextKey>> = - DefaultContextKey::new(NODE_START_END_ACTIVITIES_TIMES); - pub static ref NODE_UNDERLYING_PATTERNS_INFOS_KEY: DefaultContextKey>> = - DefaultContextKey::new(NODE_UNDERLYING_PATTERNS_INFOS); - pub static ref NODE_UNDERLYING_PATTERNS_GRAPHS_INFOS_KEY: DefaultContextKey>> = - DefaultContextKey::new(NODE_UNDERLYING_PATTERNS_GRAPHS_INFO); - pub static ref NODE_MULTITHREADED_FRAGMENT_LOG_KEY: DefaultContextKey>> = - DefaultContextKey::new(NODE_MULTITHREADED_FRAGMENT_LOG); -} +context_key! { NODE_SOFTWARE_DATA, Vec> } +context_key! { NODE_CORRESPONDING_TRACE_DATA, Vec> } +context_key! { NODE_INNER_GRAPH, DefaultGraph } +context_key! { NODE_START_END_ACTIVITY_TIME, NodeAdditionalDataContainer } +context_key! { NODE_START_END_ACTIVITIES_TIMES, Vec> } +context_key! { NODE_UNDERLYING_PATTERNS_INFOS, Vec> } +context_key! { NODE_UNDERLYING_PATTERNS_GRAPHS_INFO, Vec> } +context_key! { NODE_MULTITHREADED_FRAGMENT_LOG, Vec> } pub const EDGE_SOFTWARE_DATA: &'static str = "edge_software_data"; pub const EDGE_START_END_ACTIVITIES_TIMES: &'static str = "edge_start_end_activities_times"; pub const EDGE_TRACE_EXECUTION_INFO: &'static str = "edge_trace_execution_info"; -lazy_static! { - pub static ref EDGE_SOFTWARE_DATA_KEY: DefaultContextKey> = DefaultContextKey::new(EDGE_SOFTWARE_DATA); - pub static ref EDGE_START_END_ACTIVITIES_TIMES_KEY: DefaultContextKey> = - DefaultContextKey::new(EDGE_START_END_ACTIVITIES_TIMES); - pub static ref EDGE_TRACE_EXECUTION_INFO_KEY: DefaultContextKey> = - DefaultContextKey::new(EDGE_TRACE_EXECUTION_INFO); -} +context_key! { EDGE_SOFTWARE_DATA, Vec } +context_key! { EDGE_START_END_ACTIVITIES_TIMES, Vec } +context_key! { EDGE_TRACE_EXECUTION_INFO, Vec } diff --git a/Ficus/src/rust/ficus/src/features/discovery/root_sequence/discovery.rs b/Ficus/src/rust/ficus/src/features/discovery/root_sequence/discovery.rs index 27e64bc75..6d59502b7 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/root_sequence/discovery.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/root_sequence/discovery.rs @@ -1,24 +1,33 @@ -use crate::features::discovery::petri_net::annotations::PerformanceMap; -use crate::features::discovery::root_sequence::adjustments::{ - adjust_connections, adjust_edges_data, adjust_weights, find_next_node, merge_sequences_of_nodes, +use crate::{ + context_key, + features::discovery::{ + petri_net::annotations::PerformanceMap, + root_sequence::{ + adjustments::{adjust_connections, adjust_edges_data, adjust_weights, find_next_node, merge_sequences_of_nodes}, + context::DiscoveryContext, + models::{DiscoverRootSequenceGraphError, EventWithUniqueId, RootSequenceKind}, + root_sequence::discover_root_sequence, + }, + }, + utils::{ + graph::{ + graph::{DefaultGraph, GraphKind, NodesConnectionData}, + graph_node::GraphNode, + graphs_merging::{END_NODE_ID_KEY, START_NODE_ID_KEY}, + }, + lcs::find_longest_common_subsequence, + references::HeapedOrOwned, + user_data::user_data::UserData, + }, }; -use crate::features::discovery::root_sequence::context::DiscoveryContext; -use crate::features::discovery::root_sequence::models::{DiscoverRootSequenceGraphError, EventWithUniqueId, RootSequenceKind}; -use crate::features::discovery::root_sequence::root_sequence::discover_root_sequence; -use crate::utils::context_key::DefaultContextKey; -use crate::utils::graph::graph::{DefaultGraph, GraphKind, NodesConnectionData}; -use crate::utils::graph::graph_node::GraphNode; -use crate::utils::graph::graphs_merging::{END_NODE_ID_KEY, START_NODE_ID_KEY}; -use crate::utils::lcs::find_longest_common_subsequence; -use crate::utils::references::HeapedOrOwned; -use crate::utils::user_data::user_data::UserData; use lazy_static::lazy_static; -use std::collections::{HashMap, VecDeque}; -use std::fmt::Debug; +use std::{ + collections::{HashMap, VecDeque}, + fmt::Debug, +}; -lazy_static! { - pub(super) static ref EVENT_UNIQUE_ID_KEY: DefaultContextKey> = DefaultContextKey::new("EVENT_UNIQUE_ID"); -} +const EVENT_UNIQUE_ID: &'static str = "EVENT_UNIQUE_ID"; +context_key! { EVENT_UNIQUE_ID, Vec } #[derive(Debug)] pub struct RootSequenceGraphDiscoveryResult { diff --git a/Ficus/src/rust/ficus/src/features/discovery/root_sequence/discovery_xes.rs b/Ficus/src/rust/ficus/src/features/discovery/root_sequence/discovery_xes.rs index 5f163b00c..288a0c0c9 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/root_sequence/discovery_xes.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/root_sequence/discovery_xes.rs @@ -1,32 +1,39 @@ -use crate::event_log::core::event::event::Event; -use crate::event_log::core::event_log::EventLog; -use crate::event_log::core::trace::trace::Trace; -use crate::event_log::xes::xes_event::XesEventImpl; -use crate::event_log::xes::xes_event_log::XesEventLogImpl; -use crate::event_log::xes::xes_trace::XesTraceImpl; -use crate::features::analysis::patterns::activity_instances::{create_vector_of_underlying_events, try_get_base_pattern}; -use crate::features::analysis::patterns::pattern_info::{UnderlyingPatternGraphInfo, UnderlyingPatternInfo, UNDERLYING_PATTERN_KIND_KEY}; -use crate::features::discovery::petri_net::annotations::create_performance_map; -use crate::features::discovery::root_sequence::context::DiscoveryContext; -use crate::features::discovery::root_sequence::context_keys::{ - EDGE_SOFTWARE_DATA_KEY, EDGE_START_END_ACTIVITIES_TIMES_KEY, EDGE_TRACE_EXECUTION_INFO_KEY, NODE_CORRESPONDING_TRACE_DATA_KEY, - NODE_MULTITHREADED_FRAGMENT_LOG_KEY, NODE_SOFTWARE_DATA_KEY, NODE_START_END_ACTIVITIES_TIMES_KEY, - NODE_UNDERLYING_PATTERNS_GRAPHS_INFOS_KEY, NODE_UNDERLYING_PATTERNS_INFOS_KEY, +use crate::{ + event_log::{ + core::{event::event::Event, event_log::EventLog, trace::trace::Trace}, + xes::{xes_event::XesEventImpl, xes_event_log::XesEventLogImpl, xes_trace::XesTraceImpl}, + }, + features::{ + analysis::patterns::{ + activity_instances::{create_vector_of_underlying_events, try_get_base_pattern}, + pattern_info::{UnderlyingPatternGraphInfo, UnderlyingPatternInfo, UNDERLYING_PATTERN_KIND_KEY}, + }, + discovery::{ + petri_net::annotations::create_performance_map, + root_sequence::{ + context::DiscoveryContext, + context_keys::{ + EDGE_SOFTWARE_DATA_KEY, EDGE_START_END_ACTIVITIES_TIMES_KEY, EDGE_TRACE_EXECUTION_INFO_KEY, NODE_CORRESPONDING_TRACE_DATA_KEY, + NODE_MULTITHREADED_FRAGMENT_LOG_KEY, NODE_SOFTWARE_DATA_KEY, NODE_START_END_ACTIVITIES_TIMES_KEY, + NODE_UNDERLYING_PATTERNS_GRAPHS_INFO_KEY, NODE_UNDERLYING_PATTERNS_INFOS_KEY, + }, + discovery::{create_new_graph_node, discover_root_sequence_graph}, + models::{ + CorrespondingTraceData, DiscoverRootSequenceGraphError, EventCoordinates, EventWithUniqueId, NodeAdditionalDataContainer, + RootSequenceKind, + }, + }, + }, + mutations::mutations::{ARTIFICIAL_END_EVENT_NAME, ARTIFICIAL_START_EVENT_NAME}, + }, + utils::{ + context_key::DefaultContextKey, + display_name::get_display_name, + graph::graph::{DefaultGraph, NodesConnectionData}, + user_data::user_data::{UserData, UserDataImpl, UserDataOwner}, + }, }; -use crate::features::discovery::root_sequence::discovery::{create_new_graph_node, discover_root_sequence_graph}; -use crate::features::discovery::root_sequence::models::{ - CorrespondingTraceData, DiscoverRootSequenceGraphError, EventCoordinates, EventWithUniqueId, NodeAdditionalDataContainer, - RootSequenceKind, -}; -use crate::features::mutations::mutations::{ARTIFICIAL_END_EVENT_NAME, ARTIFICIAL_START_EVENT_NAME}; -use crate::utils::context_key::DefaultContextKey; -use crate::utils::display_name::get_display_name; -use crate::utils::graph::graph::{DefaultGraph, NodesConnectionData}; -use crate::utils::user_data::user_data::{UserData, UserDataImpl, UserDataOwner}; -use std::cell::RefCell; -use std::fmt::Debug; -use std::ops::Deref; -use std::rc::Rc; +use std::{cell::RefCell, fmt::Debug, ops::Deref, rc::Rc}; pub fn discover_root_sequence_graph_from_event_log( log: &XesEventLogImpl, @@ -81,7 +88,7 @@ pub fn discover_root_sequence_graph_from_event_log( } fn transfer_data_from_event_to_edge_user_data(event: &Rc>, user_data: &mut UserDataImpl) { - let underlying_events = create_vector_of_underlying_events::(event); + let underlying_events = create_vector_of_underlying_events(event); let event = if underlying_events.is_empty() { event } else { @@ -126,8 +133,8 @@ fn initialize_patterns_infos(log: &Vec>>>) { for (event_index, event) in trace.iter().enumerate() { let pattern_kind = event.borrow().user_data().concrete(UNDERLYING_PATTERN_KIND_KEY.key()).cloned(); if let Some(pattern_kind) = pattern_kind { - let underlying_events = create_vector_of_underlying_events::(event); - let base_pattern = try_get_base_pattern::(event); + let underlying_events = create_vector_of_underlying_events(event); + let base_pattern = try_get_base_pattern(event); let pattern_info = UnderlyingPatternInfo::new(pattern_kind, underlying_events, base_pattern); @@ -181,7 +188,7 @@ fn discover_graphs_for_patterns(graph: &mut DefaultGraph, context: &DiscoveryCon pattern_graph_infos.push(pattern_graph_info); } - user_data.put_concrete(NODE_UNDERLYING_PATTERNS_GRAPHS_INFOS_KEY.key(), pattern_graph_infos); + user_data.put_concrete(NODE_UNDERLYING_PATTERNS_GRAPHS_INFO_KEY.key(), pattern_graph_infos); } } } diff --git a/Ficus/src/rust/ficus/src/features/discovery/root_sequence/log_prepare.rs b/Ficus/src/rust/ficus/src/features/discovery/root_sequence/log_prepare.rs index 66c09ee3d..613baa51b 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/root_sequence/log_prepare.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/root_sequence/log_prepare.rs @@ -1,15 +1,14 @@ -use crate::event_log::core::event::event::Event; -use crate::event_log::core::event_log::EventLog; -use crate::event_log::core::trace::trace::Trace; -use crate::event_log::xes::xes_event::XesEventImpl; -use crate::event_log::xes::xes_event_log::XesEventLogImpl; -use crate::features::discovery::timeline::abstraction::abstract_event_groups; -use crate::features::discovery::timeline::events_groups::EventGroup; -use crate::features::discovery::timeline::software_data::extraction_config::SoftwareDataExtractionConfig; -use crate::pipelines::errors::pipeline_errors::PipelinePartExecutionError; -use std::cell::RefCell; -use std::collections::HashMap; -use std::rc::Rc; +use crate::{ + event_log::{ + core::{event::event::Event, event_log::EventLog, trace::trace::Trace}, + xes::{xes_event::XesEventImpl, xes_event_log::XesEventLogImpl}, + }, + features::discovery::timeline::{ + abstraction::abstract_event_groups, events_groups::EventGroup, software_data::extraction_config::SoftwareDataExtractionConfig, + }, + pipelines::errors::pipeline_errors::PipelinePartExecutionError, +}; +use std::{cell::RefCell, collections::HashMap, rc::Rc}; pub fn prepare_software_log( log: &XesEventLogImpl, diff --git a/Ficus/src/rust/ficus/src/features/discovery/root_sequence/models.rs b/Ficus/src/rust/ficus/src/features/discovery/root_sequence/models.rs index 46a4dc15e..fd02d2146 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/root_sequence/models.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/root_sequence/models.rs @@ -1,8 +1,10 @@ use derive_new::new; -use getset::{Getters, Setters}; -use std::fmt::{Debug, Display, Formatter, Write}; -use std::str::FromStr; -use std::sync::atomic::{AtomicU64, Ordering}; +use getset::Getters; +use std::{ + fmt::{Debug, Display, Formatter}, + str::FromStr, + sync::atomic::{AtomicU64, Ordering}, +}; #[derive(Debug)] pub enum DiscoverRootSequenceGraphError { diff --git a/Ficus/src/rust/ficus/src/features/discovery/root_sequence/root_sequence.rs b/Ficus/src/rust/ficus/src/features/discovery/root_sequence/root_sequence.rs index 832216c7b..8dcf675d2 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/root_sequence/root_sequence.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/root_sequence/root_sequence.rs @@ -1,6 +1,10 @@ -use crate::features::discovery::root_sequence::models::RootSequenceKind; -use crate::utils::distance::distance::calculate_lcs_distance; -use crate::utils::lcs::{find_longest_common_subsequence, find_longest_common_subsequence_length}; +use crate::{ + features::discovery::root_sequence::models::RootSequenceKind, + utils::{ + distance::distance::calculate_lcs_distance, + lcs::{find_longest_common_subsequence, find_longest_common_subsequence_length}, + }, +}; use std::fmt::Debug; pub fn discover_root_sequence(log: &Vec>, root_sequence_kind: RootSequenceKind) -> Vec { diff --git a/Ficus/src/rust/ficus/src/features/discovery/timeline/abstraction.rs b/Ficus/src/rust/ficus/src/features/discovery/timeline/abstraction.rs index 5b880c026..dfc9dbdb8 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/timeline/abstraction.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/timeline/abstraction.rs @@ -1,40 +1,43 @@ -use crate::event_log::core::event::event::Event; -use crate::event_log::core::event_log::EventLog; -use crate::event_log::core::trace::trace::Trace; -use crate::event_log::xes::xes_event::XesEventImpl; -use crate::event_log::xes::xes_event_log::XesEventLogImpl; -use crate::event_log::xes::xes_trace::XesTraceImpl; -use crate::features::discovery::multithreaded_dfg::dfg::MULTITHREAD_FRAGMENT_KEY; -use crate::features::discovery::root_sequence::context_keys::EDGE_START_END_ACTIVITIES_TIMES_KEY; -use crate::features::discovery::root_sequence::context_keys::EDGE_TRACE_EXECUTION_INFO_KEY; -use crate::features::discovery::root_sequence::context_keys::NODE_SOFTWARE_DATA_KEY; -use crate::features::discovery::root_sequence::context_keys::NODE_START_END_ACTIVITIES_TIMES_KEY; -use crate::features::discovery::root_sequence::context_keys::{EDGE_SOFTWARE_DATA_KEY, NODE_MULTITHREADED_FRAGMENT_LOG_KEY}; -use crate::features::discovery::root_sequence::models::ActivityStartEndTimeData; -use crate::features::discovery::root_sequence::models::EdgeTraceExecutionInfo; -use crate::features::discovery::root_sequence::models::EventCoordinates; -use crate::features::discovery::root_sequence::models::NodeAdditionalDataContainer; -use crate::features::discovery::timeline::events_groups::EventGroup; -use crate::features::discovery::timeline::software_data::extraction_config::SoftwareDataExtractionConfig; -use crate::features::discovery::timeline::software_data::extractors::activities_durations::ActivityDurationExtractor; -use crate::features::discovery::timeline::software_data::extractors::core::{ - EventGroupSoftwareDataExtractor, EventGroupTraceSoftwareDataExtractor, SoftwareDataExtractionError, +use crate::{ + event_log::{ + core::{event::event::Event, event_log::EventLog, trace::trace::Trace}, + xes::{xes_event::XesEventImpl, xes_event_log::XesEventLogImpl, xes_trace::XesTraceImpl}, + }, + features::discovery::{ + multithreaded_dfg::dfg::MULTITHREADED_FRAGMENT_KEY, + root_sequence::{ + context_keys::{ + EDGE_SOFTWARE_DATA_KEY, EDGE_START_END_ACTIVITIES_TIMES_KEY, EDGE_TRACE_EXECUTION_INFO_KEY, NODE_MULTITHREADED_FRAGMENT_LOG_KEY, + NODE_SOFTWARE_DATA_KEY, NODE_START_END_ACTIVITIES_TIMES_KEY, + }, + models::{ActivityStartEndTimeData, EdgeTraceExecutionInfo, EventCoordinates, NodeAdditionalDataContainer}, + }, + timeline::{ + events_groups::EventGroup, + software_data::{ + extraction_config::SoftwareDataExtractionConfig, + extractors::{ + activities_durations::ActivityDurationExtractor, + core::{EventGroupSoftwareDataExtractor, EventGroupTraceSoftwareDataExtractor, SoftwareDataExtractionError}, + event_classes::EventClassesDataExtractor, + ocel::OcelDataExtractor, + pie_charts::PieChartExtractor, + simple_counter::SimpleCounterExtractor, + }, + models::SoftwareData, + }, + utils::get_stamp, + }, + }, + pipelines::errors::pipeline_errors::{PipelinePartExecutionError, RawPartExecutionError}, + utils::{ + display_name::DISPLAY_NAME_KEY, + user_data::user_data::{UserData, UserDataOwner}, + vec_utils::VectorOptionExtensions, + }, }; -use crate::features::discovery::timeline::software_data::extractors::event_classes::EventClassesDataExtractor; -use crate::features::discovery::timeline::software_data::extractors::ocel::OcelDataExtractor; -use crate::features::discovery::timeline::software_data::extractors::pie_charts::PieChartExtractor; -use crate::features::discovery::timeline::software_data::extractors::simple_counter::SimpleCounterExtractor; -use crate::features::discovery::timeline::software_data::models::SoftwareData; -use crate::features::discovery::timeline::utils::get_stamp; -use crate::pipelines::errors::pipeline_errors::PipelinePartExecutionError; -use crate::pipelines::errors::pipeline_errors::RawPartExecutionError; -use crate::utils::display_name::DISPLAY_NAME_KEY; -use crate::utils::user_data::user_data::UserData; -use crate::utils::user_data::user_data::UserDataOwner; -use crate::utils::vec_utils::VectorOptionExtensions; use log::error; -use std::cell::RefCell; -use std::rc::Rc; +use std::{cell::RefCell, rc::Rc}; pub fn abstract_event_groups( event_groups: Vec>, @@ -158,7 +161,7 @@ fn put_node_user_data( .user_data_mut() .put_concrete(NODE_START_END_ACTIVITIES_TIMES_KEY.key(), vec![activity_start_end_time]); - if let Some(multithreaded_log) = event_group.user_data().concrete(MULTITHREAD_FRAGMENT_KEY.key()) { + if let Some(multithreaded_log) = event_group.user_data().concrete(MULTITHREADED_FRAGMENT_KEY.key()) { event.user_data_mut().put_concrete( NODE_MULTITHREADED_FRAGMENT_LOG_KEY.key(), vec![NodeAdditionalDataContainer::new(multithreaded_log.clone(), event_coordinates)], diff --git a/Ficus/src/rust/ficus/src/features/discovery/timeline/discovery.rs b/Ficus/src/rust/ficus/src/features/discovery/timeline/discovery.rs index a0252cc0a..261643e89 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/timeline/discovery.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/timeline/discovery.rs @@ -1,19 +1,25 @@ -use crate::features::discovery::timeline::events_groups::{discover_events_groups, TraceEventsGroup}; -use crate::features::discovery::timeline::utils::{extract_thread_id, get_stamp}; -use crate::pipelines::errors::pipeline_errors::{PipelinePartExecutionError, RawPartExecutionError}; use crate::{ - event_log::core::event_log::EventLog, event_log::core::trace::trace::Trace, event_log::xes::xes_event::XesEventImpl, - event_log::xes::xes_event_log::XesEventLogImpl, + event_log::{ + core::{event_log::EventLog, trace::trace::Trace}, + xes::{xes_event::XesEventImpl, xes_event_log::XesEventLogImpl}, + }, + features::discovery::timeline::{ + events_groups::{discover_events_groups, TraceEventsGroup}, + utils::{extract_thread_id, get_stamp}, + }, + pipelines::errors::pipeline_errors::{PipelinePartExecutionError, RawPartExecutionError}, }; use derive_new::new; use fancy_regex::Regex; use getset::{Getters, MutGetters}; -use std::cell::RefCell; -use std::collections::HashMap; -use std::error::Error; -use std::fmt::{Debug, Display, Formatter}; -use std::ops::Deref; -use std::rc::Rc; +use std::{ + cell::RefCell, + collections::HashMap, + error::Error, + fmt::{Debug, Display, Formatter}, + ops::Deref, + rc::Rc, +}; #[derive(Debug, Clone, Getters, new)] pub struct LogTimelineDiagram { diff --git a/Ficus/src/rust/ficus/src/features/discovery/timeline/events_groups.rs b/Ficus/src/rust/ficus/src/features/discovery/timeline/events_groups.rs index 800f2a556..b31bc3bee 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/timeline/events_groups.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/timeline/events_groups.rs @@ -1,11 +1,11 @@ -use crate::event_log::core::event::event::Event; -use crate::event_log::xes::xes_event::XesEventImpl; -use crate::features::discovery::timeline::discovery::{LogPoint, LogTimelineDiagram, TraceThread, TraceThreadEvent}; -use crate::utils::user_data::user_data::UserDataImpl; +use crate::{ + event_log::{core::event::event::Event, xes::xes_event::XesEventImpl}, + features::discovery::timeline::discovery::{LogPoint, LogTimelineDiagram, TraceThread, TraceThreadEvent}, + utils::user_data::user_data::UserDataImpl, +}; use fancy_regex::Regex; use getset::{Getters, MutGetters, Setters}; -use std::cell::RefCell; -use std::rc::Rc; +use std::{cell::RefCell, rc::Rc}; #[derive(Debug, Clone)] pub struct TraceEventsGroup { diff --git a/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extraction_config.rs b/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extraction_config.rs index 3927a4fea..d17ae820a 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extraction_config.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extraction_config.rs @@ -1,5 +1,7 @@ -use crate::features::mutations::mutations::{ARTIFICIAL_END_EVENT_NAME, ARTIFICIAL_START_EVENT_NAME}; -use crate::utils::references::HeapedOrOwned; +use crate::{ + features::mutations::mutations::{ARTIFICIAL_END_EVENT_NAME, ARTIFICIAL_START_EVENT_NAME}, + utils::references::HeapedOrOwned, +}; use derive_new::new; use fancy_regex::Regex; use getset::{Getters, Setters}; diff --git a/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/activities_durations.rs b/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/activities_durations.rs index 1ab9fb078..e7e0fff7e 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/activities_durations.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/activities_durations.rs @@ -1,26 +1,24 @@ -use crate::event_log::core::event::event::Event; -use crate::event_log::xes::xes_event::XesEventImpl; -use crate::features::discovery::timeline::events_groups::EventGroup; -use crate::features::discovery::timeline::software_data::extraction_config::{ - ActivityDurationExtractionConfig, SoftwareDataExtractionConfig, TimeAttributeConfig, -}; -use crate::features::discovery::timeline::software_data::extractors::core::{ - EventGroupTraceSoftwareDataExtractor, SoftwareDataExtractionError, -}; -use crate::features::discovery::timeline::software_data::extractors::utils::RegexParingResult; -use crate::features::discovery::timeline::software_data::models::{ - ActivityDurationData, DurationKind, GenericEnhancementBase, SoftwareData, +use crate::{ + event_log::{core::event::event::Event, xes::xes_event::XesEventImpl}, + features::discovery::timeline::{ + events_groups::EventGroup, + software_data::{ + extraction_config::{ActivityDurationExtractionConfig, SoftwareDataExtractionConfig, TimeAttributeConfig}, + extractors::{ + core::{EventGroupTraceSoftwareDataExtractor, SoftwareDataExtractionError}, + utils::RegexParingResult, + }, + models::{ActivityDurationData, DurationKind, GenericEnhancementBase, SoftwareData}, + }, + utils::get_stamp, + }, + utils::{references::HeapedOrOwned, vec_utils::VectorOptionExtensions}, }; -use crate::features::discovery::timeline::utils::get_stamp; -use crate::utils::references::HeapedOrOwned; -use crate::utils::vec_utils::VectorOptionExtensions; use derive_new::new; use fancy_regex::Regex; use getset::Getters; use log::error; -use std::cell::RefCell; -use std::collections::HashMap; -use std::rc::Rc; +use std::{cell::RefCell, collections::HashMap, rc::Rc}; #[derive(Clone, Debug, new)] pub struct ActivityDurationExtractor<'a> { @@ -53,7 +51,7 @@ impl<'a> EventGroupTraceSoftwareDataExtractor for ActivityDurationExtractor<'a> } } -fn create_configs(config: &SoftwareDataExtractionConfig) -> Configs { +fn create_configs(config: &SoftwareDataExtractionConfig) -> Configs<'_> { config .activities_duration_configs() .iter() diff --git a/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/core.rs b/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/core.rs index a10d0e59f..8d479ed82 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/core.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/core.rs @@ -1,11 +1,14 @@ -use crate::event_log::xes::xes_event::XesEventImpl; -use crate::features::discovery::timeline::events_groups::EventGroup; -use crate::features::discovery::timeline::software_data::models::SoftwareData; -use std::cell::RefCell; -use std::error::Error; -use std::fmt::{Debug, Display, Formatter}; -use std::rc::Rc; -use std::str::FromStr; +use crate::{ + event_log::xes::xes_event::XesEventImpl, + features::discovery::timeline::{events_groups::EventGroup, software_data::models::SoftwareData}, +}; +use std::{ + cell::RefCell, + error::Error, + fmt::{Debug, Display, Formatter}, + rc::Rc, + str::FromStr, +}; #[derive(Debug, Clone)] pub enum SoftwareDataExtractionError { diff --git a/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/event_classes.rs b/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/event_classes.rs index c7d2df579..55c2bbdfd 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/event_classes.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/event_classes.rs @@ -1,16 +1,18 @@ -use crate::event_log::core::event::event::Event; -use crate::event_log::xes::xes_event::XesEventImpl; -use crate::features::discovery::timeline::discovery::{TraceThread, TraceThreadEvent}; -use crate::features::discovery::timeline::events_groups::EventGroup; -use crate::features::discovery::timeline::software_data::extractors::core::{EventGroupSoftwareDataExtractor, SoftwareDataExtractionError}; -use crate::features::discovery::timeline::software_data::models::SoftwareData; -use crate::features::discovery::timeline::utils::{extract_thread_id, get_stamp}; -use crate::utils::references::HeapedOrOwned; +use crate::{ + event_log::{core::event::event::Event, xes::xes_event::XesEventImpl}, + features::discovery::timeline::{ + discovery::{TraceThread, TraceThreadEvent}, + events_groups::EventGroup, + software_data::{ + extractors::core::{EventGroupSoftwareDataExtractor, SoftwareDataExtractionError}, + models::SoftwareData, + }, + utils::{extract_thread_id, get_stamp}, + }, + utils::references::HeapedOrOwned, +}; use derive_new::new; -use std::cell::RefCell; -use std::collections::HashMap; -use std::ops::Deref; -use std::rc::Rc; +use std::{cell::RefCell, collections::HashMap, ops::Deref, rc::Rc}; #[derive(Debug, Clone, new)] pub struct EventClassesDataExtractor<'a> { diff --git a/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/ocel.rs b/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/ocel.rs index 17fdc1219..10fcb90d4 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/ocel.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/ocel.rs @@ -1,21 +1,22 @@ -use crate::event_log::core::event::event::{Event, EventPayloadValue}; -use crate::event_log::xes::xes_event::XesEventImpl; -use crate::features::discovery::timeline::software_data::extraction_config::{ - ExtractionConfig, OcelAllocateMergeExtractionConfig, OcelConsumeProduceExtractionConfig, OcelObjectExtractionConfigBase, - SoftwareDataExtractionConfig, +use crate::{ + event_log::{ + core::event::event::{Event, EventPayloadValue}, + xes::xes_event::XesEventImpl, + }, + features::discovery::timeline::software_data::{ + extraction_config::{ + ExtractionConfig, OcelAllocateMergeExtractionConfig, OcelConsumeProduceExtractionConfig, OcelObjectExtractionConfigBase, + SoftwareDataExtractionConfig, + }, + extractors::core::{EventGroupSoftwareDataExtractor, SoftwareDataExtractionError}, + models::{ObjectTypeWithData, OcelData, OcelObjectAction, OcelProducedObjectAfterConsume, SoftwareData}, + }, + utils::references::HeapedOrOwned, }; -use crate::features::discovery::timeline::software_data::extractors::core::{EventGroupSoftwareDataExtractor, SoftwareDataExtractionError}; -use crate::features::discovery::timeline::software_data::models::{ - ObjectTypeWithData, OcelData, OcelObjectAction, OcelProducedObjectAfterConsume, SoftwareData, -}; -use crate::utils::references::HeapedOrOwned; use derive_new::new; use fancy_regex::Regex; use log::{debug, warn}; -use std::cell::RefCell; -use std::collections::HashMap; -use std::fmt::Debug; -use std::rc::Rc; +use std::{cell::RefCell, collections::HashMap, fmt::Debug, rc::Rc}; #[derive(Debug, Clone, new)] pub struct OcelDataExtractor<'a> { diff --git a/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/pie_charts.rs b/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/pie_charts.rs index ead8da874..b03016541 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/pie_charts.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/pie_charts.rs @@ -1,17 +1,18 @@ -use crate::event_log::core::event::event::Event; -use crate::event_log::xes::xes_event::XesEventImpl; -use crate::features::discovery::timeline::software_data::extraction_config::{PieChartExtractionConfig, SoftwareDataExtractionConfig}; -use crate::features::discovery::timeline::software_data::extractors::core::{ - parse_or_err, EventGroupSoftwareDataExtractor, SoftwareDataExtractionError, +use crate::{ + event_log::{core::event::event::Event, xes::xes_event::XesEventImpl}, + features::discovery::timeline::software_data::{ + extraction_config::{PieChartExtractionConfig, SoftwareDataExtractionConfig}, + extractors::{ + core::{parse_or_err, EventGroupSoftwareDataExtractor, SoftwareDataExtractionError}, + utils::RegexParingResult, + }, + models::{GenericEnhancementBase, HistogramData, HistogramEntry, SoftwareData}, + }, + utils::references::HeapedOrOwned, }; -use crate::features::discovery::timeline::software_data::extractors::utils::RegexParingResult; -use crate::features::discovery::timeline::software_data::models::{GenericEnhancementBase, HistogramData, HistogramEntry, SoftwareData}; -use crate::utils::references::HeapedOrOwned; use derive_new::new; use fancy_regex::Regex; -use std::cell::RefCell; -use std::collections::HashMap; -use std::rc::Rc; +use std::{cell::RefCell, collections::HashMap, rc::Rc}; #[derive(Clone, Debug, new)] pub struct PieChartExtractor<'a> { diff --git a/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/simple_counter.rs b/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/simple_counter.rs index 88266390b..7f2ce0c07 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/simple_counter.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/simple_counter.rs @@ -1,16 +1,17 @@ -use crate::event_log::core::event::event::Event; -use crate::event_log::xes::xes_event::XesEventImpl; -use crate::features::discovery::timeline::software_data::extraction_config::{SimpleCountExtractionConfig, SoftwareDataExtractionConfig}; -use crate::features::discovery::timeline::software_data::extractors::core::{ - parse_or_err, EventGroupSoftwareDataExtractor, SoftwareDataExtractionError, +use crate::{ + event_log::{core::event::event::Event, xes::xes_event::XesEventImpl}, + features::discovery::timeline::software_data::{ + extraction_config::{SimpleCountExtractionConfig, SoftwareDataExtractionConfig}, + extractors::{ + core::{parse_or_err, EventGroupSoftwareDataExtractor, SoftwareDataExtractionError}, + utils::RegexParingResult, + }, + models::{GenericEnhancementBase, SimpleCounterData, SoftwareData}, + }, }; -use crate::features::discovery::timeline::software_data::extractors::utils::RegexParingResult; -use crate::features::discovery::timeline::software_data::models::{GenericEnhancementBase, SimpleCounterData, SoftwareData}; use derive_new::new; use fancy_regex::Regex; -use std::cell::RefCell; -use std::collections::HashMap; -use std::rc::Rc; +use std::{cell::RefCell, collections::HashMap, rc::Rc}; #[derive(Clone, Debug, new)] pub struct SimpleCounterExtractor<'a> { diff --git a/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/utils.rs b/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/utils.rs index b51f10fdf..1b4243669 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/utils.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/extractors/utils.rs @@ -1,8 +1,11 @@ -use crate::event_log::core::event::event::{Event, EventPayloadValue}; -use crate::event_log::xes::xes_event::XesEventImpl; -use crate::features::discovery::timeline::software_data::extraction_config::NameCreationStrategy; -use crate::features::discovery::timeline::software_data::extractors::core::SoftwareDataExtractionError; -use crate::utils::references::HeapedOrOwned; +use crate::{ + event_log::{ + core::event::event::{Event, EventPayloadValue}, + xes::xes_event::XesEventImpl, + }, + features::discovery::timeline::software_data::{extraction_config::NameCreationStrategy, extractors::core::SoftwareDataExtractionError}, + utils::references::HeapedOrOwned, +}; use fancy_regex::Regex; use std::collections::HashMap; diff --git a/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/models.rs b/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/models.rs index e985fddf6..11bcfcc82 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/models.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/timeline/software_data/models.rs @@ -1,6 +1,7 @@ -use crate::features::discovery::timeline::discovery::TraceThread; -use crate::features::discovery::timeline::software_data::extraction_config::TimeKind; -use crate::utils::references::HeapedOrOwned; +use crate::{ + features::discovery::timeline::{discovery::TraceThread, software_data::extraction_config::TimeKind}, + utils::references::HeapedOrOwned, +}; use derive_new::new; use enum_display::EnumDisplay; use getset::{Getters, MutGetters}; diff --git a/Ficus/src/rust/ficus/src/features/discovery/timeline/utils.rs b/Ficus/src/rust/ficus/src/features/discovery/timeline/utils.rs index 549b2da82..110d44cbe 100644 --- a/Ficus/src/rust/ficus/src/features/discovery/timeline/utils.rs +++ b/Ficus/src/rust/ficus/src/features/discovery/timeline/utils.rs @@ -1,6 +1,10 @@ -use crate::event_log::core::event::event::{Event, EventPayloadValue}; -use crate::event_log::xes::xes_event::XesEventImpl; -use crate::features::discovery::timeline::discovery::LogThreadsDiagramError; +use crate::{ + event_log::{ + core::event::event::{Event, EventPayloadValue}, + xes::xes_event::XesEventImpl, + }, + features::discovery::timeline::discovery::LogThreadsDiagramError, +}; use chrono::{DateTime, Utc}; pub fn extract_thread_id(event: &TEvent, thread_attribute: &str) -> Option { diff --git a/Ficus/src/rust/ficus/src/features/mutations/mutations.rs b/Ficus/src/rust/ficus/src/features/mutations/mutations.rs index 917d428c1..42ad20e0c 100644 --- a/Ficus/src/rust/ficus/src/features/mutations/mutations.rs +++ b/Ficus/src/rust/ficus/src/features/mutations/mutations.rs @@ -1,7 +1,5 @@ -use crate::event_log::core::trace::trace::Trace; -use crate::event_log::core::{event::event::Event, event_log::EventLog}; -use std::cell::RefCell; -use std::rc::Rc; +use crate::event_log::core::{event::event::Event, event_log::EventLog, trace::trace::Trace}; +use std::{cell::RefCell, rc::Rc}; pub fn rename_events(log: &mut TLog, new_name: &str, filter: TFilter) where diff --git a/Ficus/src/rust/ficus/src/features/streaming/counters/core.rs b/Ficus/src/rust/ficus/src/features/streaming/counters/core.rs index 7e6edf05f..70b1665f1 100644 --- a/Ficus/src/rust/ficus/src/features/streaming/counters/core.rs +++ b/Ficus/src/rust/ficus/src/features/streaming/counters/core.rs @@ -1,5 +1,4 @@ -use std::collections::HashMap; -use std::hash::Hash; +use std::{collections::HashMap, hash::Hash}; #[derive(Debug)] pub struct StreamingCounterEntry { diff --git a/Ficus/src/rust/ficus/src/features/streaming/counters/lossy_count.rs b/Ficus/src/rust/ficus/src/features/streaming/counters/lossy_count.rs index d1c4d9043..a032f5f4c 100644 --- a/Ficus/src/rust/ficus/src/features/streaming/counters/lossy_count.rs +++ b/Ficus/src/rust/ficus/src/features/streaming/counters/lossy_count.rs @@ -1,6 +1,5 @@ use crate::features::streaming::counters::core::{StreamingCounter, StreamingCounterEntry, ValueUpdateKind}; -use std::collections::HashMap; -use std::hash::Hash; +use std::{collections::HashMap, hash::Hash}; #[derive(Clone)] struct LossyCountState { diff --git a/Ficus/src/rust/ficus/src/features/streaming/counters/sliding_window.rs b/Ficus/src/rust/ficus/src/features/streaming/counters/sliding_window.rs index c0554f1dd..8011dfaae 100644 --- a/Ficus/src/rust/ficus/src/features/streaming/counters/sliding_window.rs +++ b/Ficus/src/rust/ficus/src/features/streaming/counters/sliding_window.rs @@ -1,10 +1,6 @@ use crate::features::streaming::counters::core::{StreamingCounter, StreamingCounterEntry, ValueUpdateKind}; use chrono::{DateTime, Utc}; -use std::collections::HashMap; -use std::hash::Hash; -use std::ops::Add; -use std::rc::Rc; -use std::time::Duration; +use std::{collections::HashMap, hash::Hash, ops::Add, rc::Rc, time::Duration}; #[derive(Clone)] struct SlidingWindowEntry { diff --git a/Ficus/src/rust/ficus/src/grpc/backend_service.rs b/Ficus/src/rust/ficus/src/grpc/backend_service.rs index e6b2a11a1..e99003db0 100644 --- a/Ficus/src/rust/ficus/src/grpc/backend_service.rs +++ b/Ficus/src/rust/ficus/src/grpc/backend_service.rs @@ -1,18 +1,19 @@ -use super::events::events_handler::{PipelineEvent, PipelineEventsHandler, PipelineFinalResult}; -use super::events::grpc_events_handler::GrpcPipelineEventsHandler; -use crate::ficus_proto::{ - GrpcContextKey, GrpcContextKeyValue, GrpcFicusBackendInfo, GrpcGetAllContextValuesResult, GrpcPipelinePartDescriptor, - GrpcProxyPipelineExecutionRequest, +use super::events::{ + events_handler::{PipelineEvent, PipelineEventsHandler, PipelineFinalResult}, + grpc_events_handler::GrpcPipelineEventsHandler, }; -use crate::grpc::context_values_service::ContextValueService; -use crate::grpc::converters::convert_to_grpc_context_value; -use crate::grpc::pipeline_executor::ServicePipelineExecutionContext; -use crate::pipelines::keys::context_keys::find_context_key; -use crate::utils::context_key::{ContextKey, DefaultContextKey}; use crate::{ - ficus_proto::{grpc_backend_service_server::GrpcBackendService, GrpcGetContextValueRequest, GrpcGuid, GrpcPipelinePartExecutionResult}, - pipelines::pipeline_parts::PipelineParts, - utils::user_data::user_data::UserData, + ficus_proto::{ + grpc_backend_service_server::GrpcBackendService, GrpcContextKey, GrpcContextKeyValue, GrpcFicusBackendInfo, + GrpcGetAllContextValuesResult, GrpcGetContextValueRequest, GrpcGuid, GrpcPipelinePartDescriptor, GrpcPipelinePartExecutionResult, + GrpcProxyPipelineExecutionRequest, + }, + grpc::{ + context_values_service::ContextValueService, converters::convert_to_grpc_context_value, + pipeline_executor::ServicePipelineExecutionContext, + }, + pipelines::{keys::context_keys::find_context_key, pipeline_parts::PipelineParts}, + utils::{context_key::DefaultContextKey, user_data::user_data::UserData}, }; use futures::Stream; use std::{ diff --git a/Ficus/src/rust/ficus/src/grpc/context_values_service.rs b/Ficus/src/rust/ficus/src/grpc/context_values_service.rs index 930f408d7..fe151f2c8 100644 --- a/Ficus/src/rust/ficus/src/grpc/context_values_service.rs +++ b/Ficus/src/rust/ficus/src/grpc/context_values_service.rs @@ -1,16 +1,19 @@ -use crate::ficus_proto::grpc_context_values_service_server::GrpcContextValuesService; -use crate::ficus_proto::{ - GrpcContextKey, GrpcContextKeyValue, GrpcContextValue, GrpcContextValuePart, GrpcDropContextValuesRequest, GrpcGuid, +use crate::{ + ficus_proto::{ + grpc_context_values_service_server::GrpcContextValuesService, GrpcContextKey, GrpcContextKeyValue, GrpcContextValuePart, + GrpcDropContextValuesRequest, GrpcGuid, + }, + grpc::converters::context_value_from_bytes, }; -use crate::grpc::converters::context_value_from_bytes; use prost::Message; -use std::collections::HashMap; -use std::pin::Pin; -use std::sync::{Arc, Mutex}; +use std::{ + collections::HashMap, + pin::Pin, + sync::{Arc, Mutex}, +}; use tokio::sync::mpsc; use tokio_stream::wrappers::ReceiverStream; -use tonic::codegen::futures_core::Stream; -use tonic::{Code, Request, Response, Status, Streaming}; +use tonic::{codegen::futures_core::Stream, Code, Request, Response, Status, Streaming}; use uuid::Uuid; pub struct ContextValueService { diff --git a/Ficus/src/rust/ficus/src/grpc/converters.rs b/Ficus/src/rust/ficus/src/grpc/converters.rs index 22f7da2b9..563b0712a 100644 --- a/Ficus/src/rust/ficus/src/grpc/converters.rs +++ b/Ficus/src/rust/ficus/src/grpc/converters.rs @@ -1,99 +1,112 @@ -use crate::event_log::core::event::event::{Event, EventPayloadValue}; -use crate::event_log::core::event_log::EventLog; -use crate::event_log::core::trace::trace::Trace; -use crate::event_log::xes::xes_event::XesEventImpl; -use crate::event_log::xes::xes_event_log::XesEventLogImpl; -use crate::event_log::xes::xes_trace::XesTraceImpl; -use crate::features::analysis::log_info::event_log_info::{EventLogInfo, OfflineEventLogInfo}; -use crate::features::analysis::patterns::activity_instances::{ActivityInTraceFilterKind, ActivityNarrowingKind}; -use crate::features::analysis::patterns::pattern_info::{UnderlyingPatternGraphInfo, UnderlyingPatternKind}; -use crate::features::clustering::activities::activities_params::ActivityRepresentationSource; -use crate::features::clustering::traces::traces_params::TracesRepresentationSource; -use crate::features::discovery::ocel::graph_annotation::{NodeObjectsState, OcelAnnotation, OcelObjectRelations, ProcessNodesStates}; -use crate::features::discovery::petri_net::annotations::TimeAnnotationKind; -use crate::features::discovery::petri_net::arc::Arc; -use crate::features::discovery::petri_net::marking::{Marking, SingleMarking}; -use crate::features::discovery::petri_net::petri_net::DefaultPetriNet; -use crate::features::discovery::petri_net::place::Place; -use crate::features::discovery::petri_net::transition::Transition; -use crate::features::discovery::root_sequence::context_keys::{ - EDGE_SOFTWARE_DATA_KEY, EDGE_START_END_ACTIVITIES_TIMES_KEY, EDGE_TRACE_EXECUTION_INFO_KEY, NODE_CORRESPONDING_TRACE_DATA_KEY, - NODE_INNER_GRAPH_KEY, NODE_MULTITHREADED_FRAGMENT_LOG_KEY, NODE_SOFTWARE_DATA_KEY, NODE_START_END_ACTIVITIES_TIMES_KEY, - NODE_START_END_ACTIVITY_TIME_KEY, NODE_UNDERLYING_PATTERNS_GRAPHS_INFOS_KEY, -}; -use crate::features::discovery::root_sequence::models::{ - ActivityStartEndTimeData, CorrespondingTraceData, EdgeTraceExecutionInfo, EventCoordinates, NodeAdditionalDataContainer, RootSequenceKind, -}; -use crate::features::discovery::timeline::discovery::{LogPoint, LogTimelineDiagram, TraceThread}; -use crate::features::discovery::timeline::software_data::models::{ - ActivityDurationData, DurationKind, GenericEnhancementBase, HistogramData, OcelData, OcelObjectAction, SimpleCounterData, SoftwareData, -}; -use crate::ficus_proto::grpc_annotation::Annotation::{CountAnnotation, FrequencyAnnotation, TimeAnnotation}; -use crate::ficus_proto::grpc_context_value::ContextValue::Annotation; -use crate::ficus_proto::grpc_node_additional_data::Data; -use crate::ficus_proto::{ - grpc_event_attribute, grpc_graph_edge_additional_data, grpc_ocel_data, GrpcActivityDurationData, GrpcActivityStartEndData, - GrpcAllocationInfo, GrpcAnnotation, GrpcBytes, GrpcColorsEventLogMapping, GrpcCountAnnotation, GrpcDataset, GrpcDurationKind, - GrpcEdgeExecutionInfo, GrpcEntityCountAnnotation, GrpcEntityFrequencyAnnotation, GrpcEntityTimeAnnotation, GrpcEvent, GrpcEventAttribute, - GrpcEventCoordinates, GrpcFrequenciesAnnotation, GrpcGeneralHistogramData, GrpcGenericEnhancementBase, GrpcGraph, GrpcGraphEdge, - GrpcGraphEdgeAdditionalData, GrpcGraphKind, GrpcGraphNode, GrpcGuid, GrpcHistogramEntry, GrpcLabeledDataset, GrpcLogPoint, - GrpcLogTimelineDiagram, GrpcMatrix, GrpcMatrixRow, GrpcMethodInliningInfo, GrpcMethodNameParts, GrpcModelElementOcelAnnotation, - GrpcMultithreadedFragment, GrpcNodeAdditionalData, GrpcNodeCorrespondingTraceData, GrpcOcelAllocateMerge, GrpcOcelConsumeProduce, - GrpcOcelData, GrpcOcelModelAnnotation, GrpcOcelObjectTypeData, GrpcOcelObjectTypeState, GrpcOcelProducedObject, GrpcOcelState, - GrpcOcelStateObjectRelation, GrpcPetriNet, GrpcPetriNetArc, GrpcPetriNetMarking, GrpcPetriNetPlace, GrpcPetriNetSinglePlaceMarking, - GrpcPetriNetTransition, GrpcSimpleCounterData, GrpcSimpleEventLog, GrpcSimpleTrace, GrpcSoftwareData, GrpcThread, GrpcThreadEvent, - GrpcTimePerformanceAnnotation, GrpcTimeSpan, GrpcTimelineDiagramFragment, GrpcTimelineTraceEventsGroup, GrpcTraceTimelineDiagram, - GrpcUnderlyingPatternInfo, GrpcUnderlyingPatternKind, -}; -use crate::grpc::pipeline_executor::ServicePipelineExecutionContext; -use crate::pipelines::activities_parts::{ActivitiesLogsSourceDto, UndefActivityHandlingStrategyDto}; -use crate::pipelines::keys::context_keys::{ - BYTES_KEY, COLORS_EVENT_LOG_KEY, EVENT_LOG_INFO_KEY, EVENT_LOG_KEY, GRAPH_KEY, GRAPH_TIME_ANNOTATION_KEY, HASHES_EVENT_LOG_KEY, - LABELED_LOG_TRACES_DATASET_KEY, LABELED_TRACES_ACTIVITIES_DATASET_KEY, LOG_THREADS_DIAGRAM_KEY, LOG_TRACES_DATASET_KEY, - NAMES_EVENT_LOG_KEY, OCEL_ANNOTATION_KEY, PATH_KEY, PATTERNS_KEY, PETRI_NET_COUNT_ANNOTATION_KEY, PETRI_NET_FREQUENCY_ANNOTATION_KEY, - PETRI_NET_KEY, PETRI_NET_TRACE_FREQUENCY_ANNOTATION_KEY, REPEAT_SETS_KEY, SOFTWARE_DATA_EXTRACTION_CONFIG_KEY, - TRACES_ACTIVITIES_DATASET_KEY, -}; -use crate::pipelines::multithreading::FeatureCountKindDto; -use crate::pipelines::patterns_parts::PatternsKindDto; -use crate::utils::colors::ColorsEventLog; -use crate::utils::context_key::ContextKey; -use crate::utils::dataset::dataset::{FicusDataset, LabeledDataset}; -use crate::utils::distance::distance::FicusDistance; -use crate::utils::graph::graph::{DefaultGraph, Graph, GraphKind}; -use crate::utils::graph::graph_edge::GraphEdge; -use crate::utils::graph::graph_node::GraphNode; -use crate::utils::log_serialization_format::LogSerializationFormat; -use crate::utils::references::HeapedOrOwned; -use crate::utils::user_data::user_data::UserDataImpl; use crate::{ - features::analysis::patterns::{ - activity_instances::AdjustingMode, contexts::PatternsDiscoveryStrategy, repeat_sets::SubArrayWithTraceIndex, - tandem_arrays::SubArrayInTraceInfo, + event_log::{ + core::{ + event::event::{Event, EventPayloadValue}, + event_log::EventLog, + trace::trace::Trace, + }, + xes::{xes_event::XesEventImpl, xes_event_log::XesEventLogImpl, xes_trace::XesTraceImpl}, + }, + features::{ + analysis::{ + log_info::event_log_info::{EventLogInfo, OfflineEventLogInfo}, + patterns::{ + activity_instances::{ActivityInTraceFilterKind, ActivityNarrowingKind, AdjustingMode}, + contexts::PatternsDiscoveryStrategy, + pattern_info::{UnderlyingPatternGraphInfo, UnderlyingPatternKind}, + repeat_sets::SubArrayWithTraceIndex, + tandem_arrays::SubArrayInTraceInfo, + }, + }, + clustering::{activities::activities_params::ActivityRepresentationSource, traces::traces_params::TracesRepresentationSource}, + discovery::{ + ocel::graph_annotation::{NodeObjectsState, OcelAnnotation, OcelObjectRelations}, + petri_net::{ + annotations::TimeAnnotationKind, + arc::Arc, + marking::{Marking, SingleMarking}, + petri_net::DefaultPetriNet, + place::Place, + transition::Transition, + }, + root_sequence::{ + context_keys::{ + EDGE_SOFTWARE_DATA_KEY, EDGE_START_END_ACTIVITIES_TIMES_KEY, EDGE_TRACE_EXECUTION_INFO_KEY, NODE_CORRESPONDING_TRACE_DATA_KEY, + NODE_INNER_GRAPH_KEY, NODE_MULTITHREADED_FRAGMENT_LOG_KEY, NODE_SOFTWARE_DATA_KEY, NODE_START_END_ACTIVITIES_TIMES_KEY, + NODE_START_END_ACTIVITY_TIME_KEY, NODE_UNDERLYING_PATTERNS_GRAPHS_INFO_KEY, + }, + models::{ + ActivityStartEndTimeData, CorrespondingTraceData, EdgeTraceExecutionInfo, EventCoordinates, NodeAdditionalDataContainer, + RootSequenceKind, + }, + }, + timeline::{ + discovery::{LogPoint, LogTimelineDiagram, TraceThread}, + software_data::models::{ + ActivityDurationData, DurationKind, GenericEnhancementBase, HistogramData, OcelData, OcelObjectAction, SimpleCounterData, + SoftwareData, + }, + }, + }, }, ficus_proto::{ - grpc_context_value::ContextValue, GrpcColor, GrpcColoredRectangle, GrpcColorsEventLog, GrpcColorsTrace, GrpcContextValue, - GrpcEventLogInfo, GrpcEventLogTraceSubArraysContextValue, GrpcHashesEventLog, GrpcHashesEventLogContextValue, GrpcHashesLogTrace, - GrpcNamesEventLog, GrpcNamesEventLogContextValue, GrpcNamesTrace, GrpcSubArrayWithTraceIndex, GrpcSubArraysWithTraceIndexContextValue, - GrpcTraceSubArray, GrpcTraceSubArrays, + grpc_annotation::Annotation::{CountAnnotation, FrequencyAnnotation, TimeAnnotation}, + grpc_context_value::{ContextValue, ContextValue::Annotation}, + grpc_event_attribute, grpc_graph_edge_additional_data, + grpc_node_additional_data::Data, + grpc_ocel_data, GrpcActivityDurationData, GrpcActivityStartEndData, GrpcAnnotation, GrpcBytes, GrpcColor, GrpcColoredRectangle, + GrpcColorsEventLog, GrpcColorsEventLogMapping, GrpcColorsTrace, GrpcContextValue, GrpcCountAnnotation, GrpcDataset, GrpcDurationKind, + GrpcEdgeExecutionInfo, GrpcEntityCountAnnotation, GrpcEntityFrequencyAnnotation, GrpcEntityTimeAnnotation, GrpcEvent, + GrpcEventAttribute, GrpcEventCoordinates, GrpcEventLogInfo, GrpcEventLogTraceSubArraysContextValue, GrpcFrequenciesAnnotation, + GrpcGeneralHistogramData, GrpcGenericEnhancementBase, GrpcGraph, GrpcGraphEdge, GrpcGraphEdgeAdditionalData, GrpcGraphKind, + GrpcGraphNode, GrpcGuid, GrpcHashesEventLog, GrpcHashesEventLogContextValue, GrpcHashesLogTrace, GrpcHistogramEntry, + GrpcLabeledDataset, GrpcLogPoint, GrpcLogTimelineDiagram, GrpcMatrix, GrpcMatrixRow, GrpcModelElementOcelAnnotation, + GrpcMultithreadedFragment, GrpcNamesEventLog, GrpcNamesEventLogContextValue, GrpcNamesTrace, GrpcNodeAdditionalData, + GrpcNodeCorrespondingTraceData, GrpcOcelAllocateMerge, GrpcOcelConsumeProduce, GrpcOcelData, GrpcOcelModelAnnotation, + GrpcOcelObjectTypeData, GrpcOcelObjectTypeState, GrpcOcelProducedObject, GrpcOcelState, GrpcOcelStateObjectRelation, GrpcPetriNet, + GrpcPetriNetArc, GrpcPetriNetMarking, GrpcPetriNetPlace, GrpcPetriNetSinglePlaceMarking, GrpcPetriNetTransition, GrpcSimpleCounterData, + GrpcSimpleEventLog, GrpcSimpleTrace, GrpcSoftwareData, GrpcSubArrayWithTraceIndex, GrpcSubArraysWithTraceIndexContextValue, GrpcThread, + GrpcThreadEvent, GrpcTimePerformanceAnnotation, GrpcTimeSpan, GrpcTimelineDiagramFragment, GrpcTimelineTraceEventsGroup, + GrpcTraceSubArray, GrpcTraceSubArrays, GrpcTraceTimelineDiagram, GrpcUnderlyingPatternInfo, GrpcUnderlyingPatternKind, + }, + grpc::pipeline_executor::ServicePipelineExecutionContext, + pipelines::{ + activities_parts::{ActivitiesLogsSourceDto, UndefActivityHandlingStrategyDto}, + keys::context_keys::{ + BYTES_KEY, COLORS_EVENT_LOG_KEY, EVENT_LOG_INFO_KEY, EVENT_LOG_KEY, GRAPH_KEY, GRAPH_TIME_ANNOTATION_KEY, HASHES_EVENT_LOG_KEY, + LABELED_LOG_TRACES_DATASET_KEY, LABELED_TRACES_ACTIVITIES_DATASET_KEY, LOG_THREADS_DIAGRAM_KEY, LOG_TRACES_DATASET_KEY, + NAMES_EVENT_LOG_KEY, OCEL_ANNOTATION_KEY, PATH_KEY, PATTERNS_KEY, PETRI_NET_COUNT_ANNOTATION_KEY, PETRI_NET_FREQUENCY_ANNOTATION_KEY, + PETRI_NET_KEY, PETRI_NET_TRACE_FREQUENCY_ANNOTATION_KEY, REPEAT_SETS_KEY, SOFTWARE_DATA_EXTRACTION_CONFIG_KEY, + TRACES_ACTIVITIES_DATASET_KEY, + }, + multithreading::FeatureCountKindDto, + patterns_parts::PatternsKindDto, + pipelines::Pipeline, }, - pipelines::pipelines::Pipeline, utils::{ - colors::{Color, ColoredRectangle}, - user_data::{keys::Key, user_data::UserData}, + colors::{Color, ColoredRectangle, ColorsEventLog}, + context_key::ContextKey, + dataset::dataset::{FicusDataset, LabeledDataset}, + distance::distance::FicusDistance, + graph::{ + graph::{DefaultGraph, Graph, GraphKind}, + graph_edge::GraphEdge, + graph_node::GraphNode, + }, + log_serialization_format::LogSerializationFormat, + references::HeapedOrOwned, + user_data::{ + keys::Key, + user_data::{UserData, UserDataImpl}, + }, }, - vecs, }; use chrono::{DateTime, Utc}; use log::error; use nameof::name_of_type; use prost::{DecodeError, Message}; use prost_types::Timestamp; -use std::cell::RefCell; -use std::collections::HashMap; -use std::fmt::Display; -use std::rc::Rc; -use std::{any::Any, str::FromStr}; +use std::{any::Any, cell::RefCell, collections::HashMap, fmt::Display, rc::Rc, str::FromStr}; use uuid::Uuid; pub(super) fn context_value_from_bytes(bytes: &[u8]) -> Result { @@ -221,7 +234,7 @@ fn convert_grpc_event_attribute_to_xes_event_payload_value(attribute_value: &grp grpc_event_attribute::Value::Bool(v) => EventPayloadValue::Boolean(*v), grpc_event_attribute::Value::Double(v) => EventPayloadValue::Float64(*v), grpc_event_attribute::Value::Guid(v) => EventPayloadValue::Guid(Uuid::parse_str(v.guid.as_str()).unwrap()), - grpc_event_attribute::Value::Null(v) => EventPayloadValue::Null, + grpc_event_attribute::Value::Null(..) => EventPayloadValue::Null, grpc_event_attribute::Value::Stamp(v) => EventPayloadValue::Date(convert_timestamp_to_datetime(v)), grpc_event_attribute::Value::Uint(v) => EventPayloadValue::Uint64(*v), } @@ -774,7 +787,7 @@ fn convert_to_grpc_graph_node_additional_data(user_data: &UserDataImpl) -> Vec Option) -> Timestamp { - prost_types::Timestamp::from_str(stamp.to_rfc3339().as_str()).unwrap() + Timestamp::from_str(stamp.to_rfc3339().as_str()).unwrap() } fn convert_to_event_coordinates(event_coordinates: &EventCoordinates) -> GrpcEventCoordinates { diff --git a/Ficus/src/rust/ficus/src/grpc/events/events_handler.rs b/Ficus/src/rust/ficus/src/grpc/events/events_handler.rs index 0cbd4d1ad..d28c459c3 100644 --- a/Ficus/src/rust/ficus/src/grpc/events/events_handler.rs +++ b/Ficus/src/rust/ficus/src/grpc/events/events_handler.rs @@ -18,7 +18,7 @@ impl EmptyPipelineEventsHandler { } impl PipelineEventsHandler for EmptyPipelineEventsHandler { - fn handle(&self, event: &PipelineEvent) {} + fn handle(&self, _: &PipelineEvent) {} fn is_alive(&self) -> bool { false diff --git a/Ficus/src/rust/ficus/src/grpc/events/grpc_events_handler.rs b/Ficus/src/rust/ficus/src/grpc/events/grpc_events_handler.rs index c72b9f74b..a75b01931 100644 --- a/Ficus/src/rust/ficus/src/grpc/events/grpc_events_handler.rs +++ b/Ficus/src/rust/ficus/src/grpc/events/grpc_events_handler.rs @@ -1,7 +1,6 @@ use std::sync::Arc; use super::events_handler::{GetContextValuesEvent, PipelineEvent, PipelineEventsHandler, PipelineFinalResult}; -use crate::grpc::events::utils::{create_grpc_context_values, send_grpc_message}; use crate::{ ficus_proto::{ grpc_pipeline_final_result::ExecutionResult, GrpcGuid, GrpcPipelineFinalResult, GrpcPipelinePartExecutionResult, @@ -9,6 +8,7 @@ use crate::{ }, grpc::{ backend_service::{GrpcResult, GrpcSender}, + events::utils::{create_grpc_context_values, send_grpc_message}, logs_handler::ConsoleLogMessageHandler, }, pipelines::context::LogMessageHandler, diff --git a/Ficus/src/rust/ficus/src/grpc/events/kafka_events_handler.rs b/Ficus/src/rust/ficus/src/grpc/events/kafka_events_handler.rs index 66aac63a2..1426930c6 100644 --- a/Ficus/src/rust/ficus/src/grpc/events/kafka_events_handler.rs +++ b/Ficus/src/rust/ficus/src/grpc/events/kafka_events_handler.rs @@ -1,15 +1,18 @@ use super::events_handler::{GetContextValuesEvent, PipelineEvent, PipelineEventsHandler, PipelineFinalResult, ProcessCaseMetadata}; -use crate::ficus_proto::{ - GrpcCaseName, GrpcGuid, GrpcKafkaConnectionMetadata, GrpcKafkaUpdate, GrpcPipelinePartInfo, GrpcProcessCaseMetadata, GrpcStringKeyValue, +use crate::{ + ficus_proto::{ + GrpcCaseName, GrpcGuid, GrpcKafkaConnectionMetadata, GrpcKafkaUpdate, GrpcPipelinePartInfo, GrpcProcessCaseMetadata, GrpcStringKeyValue, + }, + grpc::{events::utils::create_grpc_context_values, logs_handler::ConsoleLogMessageHandler}, + pipelines::context::LogMessageHandler, }; -use crate::grpc::events::utils::create_grpc_context_values; -use crate::grpc::logs_handler::ConsoleLogMessageHandler; -use crate::pipelines::context::LogMessageHandler; use prost::Message; -use rdkafka::error::KafkaError; -use rdkafka::producer::{BaseProducer, BaseRecord}; -use rdkafka::util::Timeout; -use rdkafka::ClientConfig; +use rdkafka::{ + error::KafkaError, + producer::{BaseProducer, BaseRecord}, + util::Timeout, + ClientConfig, +}; use uuid::Uuid; pub struct PipelineEventsProducer { diff --git a/Ficus/src/rust/ficus/src/grpc/events/utils.rs b/Ficus/src/rust/ficus/src/grpc/events/utils.rs index 94f671a91..95e24e1af 100644 --- a/Ficus/src/rust/ficus/src/grpc/events/utils.rs +++ b/Ficus/src/rust/ficus/src/grpc/events/utils.rs @@ -1,8 +1,9 @@ -use crate::ficus_proto::GrpcContextValueWithKeyName; -use crate::grpc::converters::convert_to_grpc_context_value; -use crate::grpc::logs_handler::ConsoleLogMessageHandler; -use crate::pipelines::context::LogMessageHandler; -use crate::utils::context_key::ContextKey; +use crate::{ + ficus_proto::GrpcContextValueWithKeyName, + grpc::{converters::convert_to_grpc_context_value, logs_handler::ConsoleLogMessageHandler}, + pipelines::context::LogMessageHandler, + utils::context_key::ContextKey, +}; use std::any::Any; use tokio::sync::mpsc::Sender; use tonic::Status; diff --git a/Ficus/src/rust/ficus/src/grpc/get_context_pipeline.rs b/Ficus/src/rust/ficus/src/grpc/get_context_pipeline.rs index 54b2baa12..b20d84e5d 100644 --- a/Ficus/src/rust/ficus/src/grpc/get_context_pipeline.rs +++ b/Ficus/src/rust/ficus/src/grpc/get_context_pipeline.rs @@ -1,22 +1,21 @@ -use std::any::Any; -use std::sync::Arc; +use std::{any::Any, sync::Arc}; use uuid::Uuid; use super::events::events_handler::{CaseName, GetContextValuesEvent, PipelineEvent, PipelineEventsHandler, ProcessCaseMetadata}; -use crate::pipelines::context::PipelineInfrastructure; -use crate::pipelines::errors::pipeline_errors::RawPartExecutionError; -use crate::pipelines::keys::context_keys::{ - find_context_key, CASE_NAME, EXECUTION_ID_KEY, PIPELINE_ID, PIPELINE_NAME, PROCESS_NAME, SUBSCRIPTION_ID, SUBSCRIPTION_NAME, - UNSTRUCTURED_METADATA, -}; -use crate::utils::context_key::{ContextKey, DefaultContextKey}; use crate::{ pipelines::{ - context::PipelineContext, - errors::pipeline_errors::{MissingContextError, PipelinePartExecutionError}, + context::{PipelineContext, PipelineInfrastructure}, + errors::pipeline_errors::{MissingContextError, PipelinePartExecutionError, RawPartExecutionError}, + keys::context_keys::{ + find_context_key, CASE_NAME_KEY, EXECUTION_ID_KEY, PIPELINE_ID_KEY, PIPELINE_NAME_KEY, PROCESS_NAME_KEY, SUBSCRIPTION_ID_KEY, + SUBSCRIPTION_NAME_KEY, UNSTRUCTURED_METADATA_KEY, + }, pipelines::{DefaultPipelinePart, PipelinePart}, }, - utils::user_data::user_data::UserData, + utils::{ + context_key::{ContextKey, DefaultContextKey}, + user_data::user_data::UserData, + }, }; #[rustfmt::skip] @@ -81,16 +80,16 @@ impl GetContextValuePipelinePart { } fn create_process_case_metadata(context: &PipelineContext) -> ProcessCaseMetadata { - let case_name = Self::value_or_default(context, &CASE_NAME, || CaseName::empty()); - let process_name = Self::value_or_default(context, &PROCESS_NAME, || "UNDEFINED_PROCESS".to_string()); + let case_name = Self::value_or_default(context, &CASE_NAME_KEY, || CaseName::empty()); + let process_name = Self::value_or_default(context, &PROCESS_NAME_KEY, || "UNDEFINED_PROCESS".to_string()); - let subscription_id = Self::value_or_none(context, &SUBSCRIPTION_ID); - let subscription_name = Self::value_or_none(context, &SUBSCRIPTION_NAME); + let subscription_id = Self::value_or_none(context, &SUBSCRIPTION_ID_KEY); + let subscription_name = Self::value_or_none(context, &SUBSCRIPTION_NAME_KEY); - let pipeline_id = Self::value_or_none(context, &PIPELINE_ID); - let pipeline_name = Self::value_or_none(context, &PIPELINE_NAME); + let pipeline_id = Self::value_or_none(context, &PIPELINE_ID_KEY); + let pipeline_name = Self::value_or_none(context, &PIPELINE_NAME_KEY); - let metadata = Self::value_or_default(context, &UNSTRUCTURED_METADATA, || vec![]); + let metadata = Self::value_or_default(context, &UNSTRUCTURED_METADATA_KEY, || vec![]); ProcessCaseMetadata { process_name, diff --git a/Ficus/src/rust/ficus/src/grpc/kafka/grpc_kafka_service.rs b/Ficus/src/rust/ficus/src/grpc/kafka/grpc_kafka_service.rs index 79bc39cba..3bdce8a72 100644 --- a/Ficus/src/rust/ficus/src/grpc/kafka/grpc_kafka_service.rs +++ b/Ficus/src/rust/ficus/src/grpc/kafka/grpc_kafka_service.rs @@ -1,23 +1,28 @@ -use crate::ficus_proto::grpc_kafka_service_server::GrpcKafkaService; -use crate::ficus_proto::{ - grpc_kafka_result, GrpcAddPipelineRequest, GrpcAddPipelineStreamRequest, GrpcExecutePipelineAndProduceKafkaRequest, - GrpcGetAllSubscriptionsAndPipelinesResponse, GrpcGuid, GrpcKafkaFailedResult, GrpcKafkaResult, GrpcKafkaSubscription, - GrpcKafkaSubscriptionMetadata, GrpcKafkaSuccessResult, GrpcPipelineMetadata, GrpcPipelinePartExecutionResult, - GrpcRemoveAllPipelinesRequest, GrpcRemovePipelineRequest, GrpcSubscribeToKafkaRequest, GrpcSubscriptionPipeline, - GrpcUnsubscribeFromKafkaRequest, +use crate::{ + ficus_proto::{ + grpc_kafka_result, grpc_kafka_service_server::GrpcKafkaService, GrpcAddPipelineRequest, GrpcAddPipelineStreamRequest, + GrpcExecutePipelineAndProduceKafkaRequest, GrpcGetAllSubscriptionsAndPipelinesResponse, GrpcGuid, GrpcKafkaFailedResult, + GrpcKafkaResult, GrpcKafkaSubscription, GrpcKafkaSubscriptionMetadata, GrpcKafkaSuccessResult, GrpcPipelineMetadata, + GrpcPipelinePartExecutionResult, GrpcRemoveAllPipelinesRequest, GrpcRemovePipelineRequest, GrpcSubscribeToKafkaRequest, + GrpcSubscriptionPipeline, GrpcUnsubscribeFromKafkaRequest, + }, + grpc::{ + context_values_service::ContextValueService, + events::{ + delegating_events_handler::DelegatingEventsHandler, + events_handler::{CaseName, PipelineEvent, PipelineEventsHandler, PipelineFinalResult}, + grpc_events_handler::GrpcPipelineEventsHandler, + }, + kafka::{kafka_service::KafkaService, models::PipelineExecutionDto}, + }, + pipelines::{ + keys::context_keys::{CASE_NAME_KEY, PIPELINE_ID_KEY, PIPELINE_NAME_KEY, PROCESS_NAME_KEY, SUBSCRIPTION_ID_KEY, SUBSCRIPTION_NAME_KEY}, + pipeline_parts::PipelineParts, + }, + utils::user_data::user_data::UserData, }; -use crate::grpc::context_values_service::ContextValueService; -use crate::grpc::events::delegating_events_handler::DelegatingEventsHandler; -use crate::grpc::events::events_handler::{CaseName, PipelineEvent, PipelineEventsHandler, PipelineFinalResult}; -use crate::grpc::events::grpc_events_handler::GrpcPipelineEventsHandler; -use crate::grpc::kafka::kafka_service::KafkaService; -use crate::grpc::kafka::models::PipelineExecutionDto; -use crate::pipelines::keys::context_keys::{CASE_NAME, PIPELINE_ID, PIPELINE_NAME, PROCESS_NAME, SUBSCRIPTION_ID, SUBSCRIPTION_NAME}; -use crate::pipelines::pipeline_parts::PipelineParts; -use crate::utils::user_data::user_data::UserData; use futures::Stream; -use std::pin::Pin; -use std::sync::{Arc, Mutex}; +use std::{pin::Pin, sync::Arc}; use tokio::sync::mpsc; use tokio_stream::wrappers::ReceiverStream; use tonic::{Request, Response, Status}; @@ -211,14 +216,14 @@ impl GrpcKafkaService for GrpcKafkaServiceImpl { let context = KafkaService::create_pipeline_execution_context_from_proxy(pipeline, &context_values, &dto); let execution_result = context.execute_grpc_pipeline(move |context| { - context.put_concrete(SUBSCRIPTION_ID.key(), subscription_id.unwrap()); - context.put_concrete(PIPELINE_ID.key(), pipeline_id.unwrap()); - context.put_concrete(SUBSCRIPTION_NAME.key(), subscription_name); - context.put_concrete(PIPELINE_NAME.key(), pipeline_name); + context.put_concrete(SUBSCRIPTION_ID_KEY.key(), subscription_id.unwrap()); + context.put_concrete(PIPELINE_ID_KEY.key(), pipeline_id.unwrap()); + context.put_concrete(SUBSCRIPTION_NAME_KEY.key(), subscription_name); + context.put_concrete(PIPELINE_NAME_KEY.key(), pipeline_name); - context.put_concrete(PROCESS_NAME.key(), process_name); + context.put_concrete(PROCESS_NAME_KEY.key(), process_name); context.put_concrete( - CASE_NAME.key(), + CASE_NAME_KEY.key(), CaseName { display_name: case_name.to_string(), name_parts: vec![case_name.to_string()], diff --git a/Ficus/src/rust/ficus/src/grpc/kafka/kafka_service.rs b/Ficus/src/rust/ficus/src/grpc/kafka/kafka_service.rs index f26686128..4b612065f 100644 --- a/Ficus/src/rust/ficus/src/grpc/kafka/kafka_service.rs +++ b/Ficus/src/rust/ficus/src/grpc/kafka/kafka_service.rs @@ -1,26 +1,38 @@ -use crate::ficus_proto::{ - grpc_kafka_result, GrpcContextKeyValue, GrpcGuid, GrpcKafkaConnectionMetadata, GrpcKafkaFailedResult, GrpcKafkaSuccessResult, - GrpcPipeline, GrpcPipelineExecutionRequest, GrpcPipelineStreamingConfiguration, GrpcSubscribeToKafkaRequest, +use crate::{ + ficus_proto::{ + grpc_kafka_result, GrpcContextKeyValue, GrpcGuid, GrpcKafkaConnectionMetadata, GrpcKafkaFailedResult, GrpcKafkaSuccessResult, + GrpcPipeline, GrpcPipelineExecutionRequest, GrpcPipelineStreamingConfiguration, GrpcSubscribeToKafkaRequest, + }, + grpc::{ + events::{ + events_handler::{EmptyPipelineEventsHandler, PipelineEvent, PipelineEventsHandler, PipelineFinalResult}, + kafka_events_handler::{KafkaEventsHandler, PipelineEventsProducer}, + }, + kafka::{ + models::{KafkaConsumerCreationDto, PipelineExecutionDto}, + streaming::{ + configs::StreamingConfiguration, + processors::{KafkaTraceProcessingContext, TracesProcessor}, + }, + }, + logs_handler::ConsoleLogMessageHandler, + pipeline_executor::ServicePipelineExecutionContext, + }, + pipelines::{ + context::LogMessageHandler, + errors::pipeline_errors::{PipelinePartExecutionError, RawPartExecutionError}, + keys::context_keys::{PIPELINE_ID_KEY, PIPELINE_NAME_KEY, SUBSCRIPTION_ID_KEY, SUBSCRIPTION_NAME_KEY}, + pipeline_parts::PipelineParts, + }, + utils::user_data::user_data::UserData, }; -use crate::grpc::events::events_handler::{EmptyPipelineEventsHandler, PipelineEvent}; -use crate::grpc::events::events_handler::{PipelineEventsHandler, PipelineFinalResult}; -use crate::grpc::events::kafka_events_handler::{KafkaEventsHandler, PipelineEventsProducer}; -use crate::grpc::kafka::models::{KafkaConsumerCreationDto, PipelineExecutionDto}; -use crate::grpc::kafka::streaming::configs::StreamingConfiguration; -use crate::grpc::kafka::streaming::processors::{KafkaTraceProcessingContext, TracesProcessor}; -use crate::grpc::logs_handler::ConsoleLogMessageHandler; -use crate::grpc::pipeline_executor::ServicePipelineExecutionContext; -use crate::pipelines::context::LogMessageHandler; -use crate::pipelines::errors::pipeline_errors::{PipelinePartExecutionError, RawPartExecutionError}; -use crate::pipelines::keys::context_keys::{PIPELINE_ID, PIPELINE_NAME, SUBSCRIPTION_ID, SUBSCRIPTION_NAME}; -use crate::pipelines::pipeline_parts::PipelineParts; -use crate::utils::user_data::user_data::UserData; use bxes_kafka::consumer::bxes_kafka_consumer::{BxesKafkaConsumer, BxesKafkaError, BxesKafkaTrace}; use log::error; -use rdkafka::error::KafkaError; -use rdkafka::ClientConfig; -use std::collections::HashMap; -use std::sync::{Arc, Mutex}; +use rdkafka::{error::KafkaError, ClientConfig}; +use std::{ + collections::HashMap, + sync::{Arc, Mutex}, +}; use tonic::Status; use uuid::Uuid; @@ -235,10 +247,10 @@ impl KafkaService { } }; - context.put_concrete(SUBSCRIPTION_ID.key(), dto.uuid.clone()); - context.put_concrete(PIPELINE_ID.key(), pipeline_id.clone()); - context.put_concrete(SUBSCRIPTION_NAME.key(), dto.name.clone()); - context.put_concrete(PIPELINE_NAME.key(), pipeline.name.clone()); + context.put_concrete(SUBSCRIPTION_ID_KEY.key(), dto.uuid.clone()); + context.put_concrete(PIPELINE_ID_KEY.key(), pipeline_id.clone()); + context.put_concrete(SUBSCRIPTION_NAME_KEY.key(), dto.name.clone()); + context.put_concrete(PIPELINE_NAME_KEY.key(), pipeline.name.clone()); Ok(()) }); diff --git a/Ficus/src/rust/ficus/src/grpc/kafka/models.rs b/Ficus/src/rust/ficus/src/grpc/kafka/models.rs index dc68dcfb1..e67d1d27a 100644 --- a/Ficus/src/rust/ficus/src/grpc/kafka/models.rs +++ b/Ficus/src/rust/ficus/src/grpc/kafka/models.rs @@ -1,12 +1,13 @@ -use crate::event_log::bxes::bxes_to_xes_converter::BxesToXesReadError; -use crate::grpc::events::events_handler::PipelineEventsHandler; -use crate::grpc::kafka::kafka_service::KafkaSubscription; -use crate::grpc::logs_handler::ConsoleLogMessageHandler; -use crate::pipelines::errors::pipeline_errors::PipelinePartExecutionError; -use crate::pipelines::pipeline_parts::PipelineParts; -use std::collections::HashMap; -use std::fmt::{Debug, Display, Formatter}; -use std::sync::{Arc, Mutex}; +use crate::{ + event_log::bxes::bxes_to_xes_converter::BxesToXesReadError, + grpc::{events::events_handler::PipelineEventsHandler, kafka::kafka_service::KafkaSubscription, logs_handler::ConsoleLogMessageHandler}, + pipelines::{errors::pipeline_errors::PipelinePartExecutionError, pipeline_parts::PipelineParts}, +}; +use std::{ + collections::HashMap, + fmt::{Debug, Display, Formatter}, + sync::{Arc, Mutex}, +}; use uuid::Uuid; pub(super) const KAFKA_CASE_DISPLAY_NAME: &'static str = "case_display_name"; diff --git a/Ficus/src/rust/ficus/src/grpc/kafka/streaming/configs.rs b/Ficus/src/rust/ficus/src/grpc/kafka/streaming/configs.rs index 96787c07b..c515c4eae 100644 --- a/Ficus/src/rust/ficus/src/grpc/kafka/streaming/configs.rs +++ b/Ficus/src/rust/ficus/src/grpc/kafka/streaming/configs.rs @@ -1,9 +1,15 @@ -use crate::ficus_proto::GrpcPipelineStreamingConfiguration; -use crate::grpc::kafka::streaming::processors::TracesProcessor; -use crate::grpc::kafka::streaming::t1::configs::{T1StreamingConfiguration, TracesQueueConfiguration}; -use crate::grpc::kafka::streaming::t1::filterers::{T1LogFilterer, TracesQueueFiltererImpl}; -use crate::grpc::kafka::streaming::t1::processors::T1StreamingProcessor; -use crate::grpc::kafka::streaming::t2::configs::T2StreamingConfiguration; +use crate::{ + ficus_proto::GrpcPipelineStreamingConfiguration, + grpc::kafka::streaming::{ + processors::TracesProcessor, + t1::{ + configs::{T1StreamingConfiguration, TracesQueueConfiguration}, + filterers::{T1LogFilterer, TracesQueueFiltererImpl}, + processors::T1StreamingProcessor, + }, + t2::configs::T2StreamingConfiguration, + }, +}; type StreamingConfigurationEnum = crate::ficus_proto::grpc_pipeline_streaming_configuration::Configuration; diff --git a/Ficus/src/rust/ficus/src/grpc/kafka/streaming/processors.rs b/Ficus/src/rust/ficus/src/grpc/kafka/streaming/processors.rs index 985f4a498..bff421019 100644 --- a/Ficus/src/rust/ficus/src/grpc/kafka/streaming/processors.rs +++ b/Ficus/src/rust/ficus/src/grpc/kafka/streaming/processors.rs @@ -1,17 +1,23 @@ -use crate::grpc::events::events_handler::CaseName; -use crate::grpc::kafka::models::{ - KafkaTraceProcessingError, PipelineExecutionDto, XesFromBxesKafkaTraceCreatingError, KAFKA_CASE_DISPLAY_NAME, KAFKA_CASE_ID, - KAFKA_CASE_NAME_PARTS, KAFKA_CASE_NAME_PARTS_SEPARATOR, KAFKA_PROCESS_NAME, +use crate::{ + grpc::{ + events::events_handler::CaseName, + kafka::{ + models::{ + KafkaTraceProcessingError, PipelineExecutionDto, XesFromBxesKafkaTraceCreatingError, KAFKA_CASE_DISPLAY_NAME, KAFKA_CASE_ID, + KAFKA_CASE_NAME_PARTS, KAFKA_CASE_NAME_PARTS_SEPARATOR, KAFKA_PROCESS_NAME, + }, + streaming::{t1::processors::T1StreamingProcessor, t2::processors::T2StreamingProcessor}, + }, + }, + pipelines::{ + context::PipelineContext, + keys::context_keys::{CASE_NAME_KEY, PROCESS_NAME_KEY, UNSTRUCTURED_METADATA_KEY}, + }, + utils::user_data::user_data::UserData, }; -use crate::grpc::kafka::streaming::t1::processors::T1StreamingProcessor; -use crate::grpc::kafka::streaming::t2::processors::T2StreamingProcessor; -use crate::pipelines::context::PipelineContext; -use crate::pipelines::keys::context_keys::{CASE_NAME, PROCESS_NAME, UNSTRUCTURED_METADATA}; -use crate::utils::user_data::user_data::UserData; use bxes::models::domain::bxes_value::BxesValue; use bxes_kafka::consumer::bxes_kafka_consumer::BxesKafkaTrace; -use std::collections::HashMap; -use std::rc::Rc; +use std::{collections::HashMap, rc::Rc}; use uuid::Uuid; #[derive(Clone)] @@ -100,10 +106,10 @@ fn add_system_metadata( ) -> Result<(), XesFromBxesKafkaTraceCreatingError> { let metadata = ExtractedTraceMetadata::create_from(metadata)?; - context.put_concrete(PROCESS_NAME.key(), metadata.process.process_name); - context.put_concrete(UNSTRUCTURED_METADATA.key(), metadata.unstructured_metadata); + context.put_concrete(PROCESS_NAME_KEY.key(), metadata.process.process_name); + context.put_concrete(UNSTRUCTURED_METADATA_KEY.key(), metadata.unstructured_metadata); context.put_concrete( - CASE_NAME.key(), + CASE_NAME_KEY.key(), CaseName { display_name: metadata.case.case_display_name, name_parts: metadata.case.case_name_parts, diff --git a/Ficus/src/rust/ficus/src/grpc/kafka/streaming/t1/configs.rs b/Ficus/src/rust/ficus/src/grpc/kafka/streaming/t1/configs.rs index d5d865a95..3eefe6f06 100644 --- a/Ficus/src/rust/ficus/src/grpc/kafka/streaming/t1/configs.rs +++ b/Ficus/src/rust/ficus/src/grpc/kafka/streaming/t1/configs.rs @@ -1,9 +1,10 @@ -use crate::ficus_proto::grpc_t1_streaming_configuration::Configuration; -use crate::ficus_proto::GrpcT1StreamingConfiguration; -use crate::grpc::kafka::streaming::t1::filterers::{ - EventsTimeoutFiltererImpl, T1LogFilterer, TracesQueueFiltererImpl, TracesTimeoutFiltererImpl, +use crate::{ + ficus_proto::{grpc_t1_streaming_configuration::Configuration, GrpcT1StreamingConfiguration}, + grpc::kafka::streaming::t1::{ + filterers::{EventsTimeoutFiltererImpl, T1LogFilterer, TracesQueueFiltererImpl, TracesTimeoutFiltererImpl}, + processors::T1StreamingProcessor, + }, }; -use crate::grpc::kafka::streaming::t1::processors::T1StreamingProcessor; pub enum T1StreamingConfiguration { EventsTimeout(EventsTimeoutConfiguration), diff --git a/Ficus/src/rust/ficus/src/grpc/kafka/streaming/t1/filterers.rs b/Ficus/src/rust/ficus/src/grpc/kafka/streaming/t1/filterers.rs index 917a8e12c..7302c5803 100644 --- a/Ficus/src/rust/ficus/src/grpc/kafka/streaming/t1/filterers.rs +++ b/Ficus/src/rust/ficus/src/grpc/kafka/streaming/t1/filterers.rs @@ -1,8 +1,10 @@ -use crate::event_log::core::event::event::Event; -use crate::event_log::core::event_log::EventLog; -use crate::event_log::core::trace::trace::Trace; -use crate::event_log::xes::xes_event_log::XesEventLogImpl; -use crate::grpc::kafka::streaming::t1::configs::{EventsTimeoutConfiguration, TracesQueueConfiguration, TracesTimeoutConfiguration}; +use crate::{ + event_log::{ + core::{event::event::Event, event_log::EventLog, trace::trace::Trace}, + xes::xes_event_log::XesEventLogImpl, + }, + grpc::kafka::streaming::t1::configs::{EventsTimeoutConfiguration, TracesQueueConfiguration, TracesTimeoutConfiguration}, +}; use chrono::Utc; use log::debug; use std::ops::Sub; diff --git a/Ficus/src/rust/ficus/src/grpc/kafka/streaming/t1/processors.rs b/Ficus/src/rust/ficus/src/grpc/kafka/streaming/t1/processors.rs index e5c404428..ee5b3dc24 100644 --- a/Ficus/src/rust/ficus/src/grpc/kafka/streaming/t1/processors.rs +++ b/Ficus/src/rust/ficus/src/grpc/kafka/streaming/t1/processors.rs @@ -1,24 +1,33 @@ -use crate::event_log::bxes::bxes_to_xes_converter::read_bxes_events; -use crate::event_log::core::event::event::EventPayloadValue; -use crate::event_log::core::event_log::EventLog; -use crate::event_log::core::trace::trace::Trace; -use crate::event_log::xes::xes_event_log::XesEventLogImpl; -use crate::event_log::xes::xes_trace::XesTraceImpl; -use crate::grpc::kafka::models::{ - KafkaTraceProcessingError, XesFromBxesKafkaTraceCreatingError, KAFKA_CASE_ID, KAFKA_CASE_NAME_PARTS, KAFKA_TRACE_ID, +use crate::{ + event_log::{ + bxes::bxes_to_xes_converter::read_bxes_events, + core::{event::event::EventPayloadValue, event_log::EventLog, trace::trace::Trace}, + xes::{xes_event_log::XesEventLogImpl, xes_trace::XesTraceImpl}, + }, + grpc::{ + kafka::{ + models::{KafkaTraceProcessingError, XesFromBxesKafkaTraceCreatingError, KAFKA_CASE_ID, KAFKA_CASE_NAME_PARTS, KAFKA_TRACE_ID}, + streaming::{ + processors::{string_value_or_err, uuid_or_err}, + t1::filterers::T1LogFilterer, + }, + }, + logs_handler::ConsoleLogMessageHandler, + }, + pipelines::{ + context::{LogMessageHandler, PipelineContext}, + keys::context_keys::EVENT_LOG_KEY, + }, + utils::user_data::user_data::UserData, }; -use crate::grpc::kafka::streaming::processors::{string_value_or_err, uuid_or_err}; -use crate::grpc::kafka::streaming::t1::filterers::T1LogFilterer; -use crate::grpc::logs_handler::ConsoleLogMessageHandler; -use crate::pipelines::context::{LogMessageHandler, PipelineContext}; -use crate::pipelines::keys::context_keys::EVENT_LOG_KEY; -use crate::utils::user_data::user_data::UserData; use bxes_kafka::consumer::bxes_kafka_consumer::BxesKafkaTrace; use log::info; -use std::cell::RefCell; -use std::collections::HashMap; -use std::rc::Rc; -use std::sync::{Arc, Mutex}; +use std::{ + cell::RefCell, + collections::HashMap, + rc::Rc, + sync::{Arc, Mutex}, +}; use uuid::Uuid; #[derive(Clone)] diff --git a/Ficus/src/rust/ficus/src/grpc/kafka/streaming/t2/configs.rs b/Ficus/src/rust/ficus/src/grpc/kafka/streaming/t2/configs.rs index 624bee6b0..ecb075782 100644 --- a/Ficus/src/rust/ficus/src/grpc/kafka/streaming/t2/configs.rs +++ b/Ficus/src/rust/ficus/src/grpc/kafka/streaming/t2/configs.rs @@ -1,6 +1,7 @@ -use crate::ficus_proto::grpc_t2_streaming_configuration::Configuration; -use crate::ficus_proto::{GrpcPipeline, GrpcT2StreamingConfiguration}; -use crate::grpc::kafka::streaming::t2::processors::T2StreamingProcessor; +use crate::{ + ficus_proto::{grpc_t2_streaming_configuration::Configuration, GrpcPipeline, GrpcT2StreamingConfiguration}, + grpc::kafka::streaming::t2::processors::T2StreamingProcessor, +}; use std::time::Duration; pub enum T2StreamingConfiguration { diff --git a/Ficus/src/rust/ficus/src/grpc/kafka/streaming/t2/dfg_data_structures.rs b/Ficus/src/rust/ficus/src/grpc/kafka/streaming/t2/dfg_data_structures.rs index 16fee0836..7f62448b6 100644 --- a/Ficus/src/rust/ficus/src/grpc/kafka/streaming/t2/dfg_data_structures.rs +++ b/Ficus/src/rust/ficus/src/grpc/kafka/streaming/t2/dfg_data_structures.rs @@ -1,22 +1,26 @@ -use crate::event_log::core::event::event::Event; -use crate::event_log::core::trace::trace::Trace; -use crate::event_log::xes::xes_trace::XesTraceImpl; -use crate::features::analysis::log_info::event_log_info::OfflineEventLogInfo; -use crate::features::streaming::counters::core::{StreamingCounter, ValueUpdateKind}; -use crate::features::streaming::counters::lossy_count::LossyCount; -use crate::features::streaming::counters::sliding_window::SlidingWindow; -use crate::grpc::kafka::models::XesFromBxesKafkaTraceCreatingError; -use crate::grpc::kafka::streaming::processors::{CaseMetadata, ProcessMetadata}; -use crate::pipelines::context::PipelineContext; -use crate::pipelines::keys::context_keys::EVENT_LOG_INFO_KEY; -use crate::utils::user_data::user_data::UserData; +use crate::{ + event_log::{ + core::{event::event::Event, trace::trace::Trace}, + xes::xes_trace::XesTraceImpl, + }, + features::{ + analysis::log_info::event_log_info::OfflineEventLogInfo, + streaming::counters::{ + core::{StreamingCounter, ValueUpdateKind}, + lossy_count::LossyCount, + sliding_window::SlidingWindow, + }, + }, + grpc::kafka::{ + models::XesFromBxesKafkaTraceCreatingError, + streaming::processors::{CaseMetadata, ProcessMetadata}, + }, + pipelines::{context::PipelineContext, keys::context_keys::EVENT_LOG_INFO_KEY}, + utils::user_data::user_data::UserData, +}; use bxes::models::domain::bxes_value::BxesValue; use log::{debug, warn}; -use std::cell::RefCell; -use std::collections::HashMap; -use std::hash::Hash; -use std::rc::Rc; -use std::time::Duration; +use std::{cell::RefCell, collections::HashMap, hash::Hash, rc::Rc, time::Duration}; use uuid::Uuid; #[derive(Clone)] diff --git a/Ficus/src/rust/ficus/src/grpc/kafka/streaming/t2/processors.rs b/Ficus/src/rust/ficus/src/grpc/kafka/streaming/t2/processors.rs index 5de19eee5..4d34c8b36 100644 --- a/Ficus/src/rust/ficus/src/grpc/kafka/streaming/t2/processors.rs +++ b/Ficus/src/rust/ficus/src/grpc/kafka/streaming/t2/processors.rs @@ -1,19 +1,26 @@ -use crate::event_log::bxes::bxes_to_xes_converter::read_bxes_events; -use crate::event_log::core::event_log::EventLog; -use crate::event_log::xes::xes_event_log::XesEventLogImpl; -use crate::ficus_proto::GrpcPipeline; -use crate::grpc::kafka::models::{KafkaTraceProcessingError, XesFromBxesKafkaTraceCreatingError}; -use crate::grpc::kafka::streaming::processors::KafkaTraceProcessingContext; -use crate::grpc::kafka::streaming::t2::dfg_data_structures::DfgDataStructures; -use crate::grpc::pipeline_executor::ServicePipelineExecutionContext; -use crate::pipelines::context::{PipelineContext, PipelineInfrastructure}; -use crate::pipelines::keys::context_keys::EVENT_LOG_KEY; -use crate::pipelines::pipelines::PipelinePart; -use crate::utils::user_data::user_data::UserData; -use std::cell::RefCell; -use std::rc::Rc; -use std::sync::{Arc, Mutex}; -use std::time::Duration; +use crate::{ + event_log::{bxes::bxes_to_xes_converter::read_bxes_events, core::event_log::EventLog, xes::xes_event_log::XesEventLogImpl}, + ficus_proto::GrpcPipeline, + grpc::{ + kafka::{ + models::{KafkaTraceProcessingError, XesFromBxesKafkaTraceCreatingError}, + streaming::{processors::KafkaTraceProcessingContext, t2::dfg_data_structures::DfgDataStructures}, + }, + pipeline_executor::ServicePipelineExecutionContext, + }, + pipelines::{ + context::{PipelineContext, PipelineInfrastructure}, + keys::context_keys::EVENT_LOG_KEY, + pipelines::PipelinePart, + }, + utils::user_data::user_data::UserData, +}; +use std::{ + cell::RefCell, + rc::Rc, + sync::{Arc, Mutex}, + time::Duration, +}; #[derive(Clone)] pub struct T2StreamingProcessor { diff --git a/Ficus/src/rust/ficus/src/grpc/pipeline_executor.rs b/Ficus/src/rust/ficus/src/grpc/pipeline_executor.rs index 93455570c..eb23e07da 100644 --- a/Ficus/src/rust/ficus/src/grpc/pipeline_executor.rs +++ b/Ficus/src/rust/ficus/src/grpc/pipeline_executor.rs @@ -1,17 +1,21 @@ use super::events::events_handler::PipelineEventsHandler; -use crate::ficus_proto::grpc_pipeline_part_base::Part; -use crate::ficus_proto::{GrpcContextKeyValue, GrpcPipeline, GrpcPipelinePart}; -use crate::grpc::converters::put_into_user_data; -use crate::grpc::get_context_pipeline::GetContextValuePipelinePart; -use crate::grpc::logs_handler::{ConsoleLogMessageHandler, DelegatingLogMessageHandler, GrpcLogMessageHandlerImpl}; -use crate::pipelines::context::{LogMessageHandler, PipelineContext, PipelineInfrastructure}; -use crate::pipelines::errors::pipeline_errors::PipelinePartExecutionError; -use crate::pipelines::keys::context_keys::{find_context_key, EXECUTION_ID_KEY}; -use crate::pipelines::pipeline_parts::PipelineParts; -use crate::pipelines::pipelines::{DefaultPipelinePart, Pipeline, PipelinePart}; -use crate::utils::user_data::user_data::{UserData, UserDataImpl}; -use std::str::FromStr; -use std::sync::Arc; +use crate::{ + ficus_proto::{grpc_pipeline_part_base::Part, GrpcContextKeyValue, GrpcPipeline, GrpcPipelinePart}, + grpc::{ + converters::put_into_user_data, + get_context_pipeline::GetContextValuePipelinePart, + logs_handler::{ConsoleLogMessageHandler, DelegatingLogMessageHandler, GrpcLogMessageHandlerImpl}, + }, + pipelines::{ + context::{LogMessageHandler, PipelineContext, PipelineInfrastructure}, + errors::pipeline_errors::PipelinePartExecutionError, + keys::context_keys::{find_context_key, EXECUTION_ID_KEY}, + pipeline_parts::PipelineParts, + pipelines::{DefaultPipelinePart, Pipeline, PipelinePart}, + }, + utils::user_data::user_data::{UserData, UserDataImpl}, +}; +use std::{str::FromStr, sync::Arc}; use uuid::Uuid; pub(super) struct ServicePipelineExecutionContext<'a> { diff --git a/Ficus/src/rust/ficus/src/pipelines/activities_parts.rs b/Ficus/src/rust/ficus/src/pipelines/activities_parts.rs index dcbbe0fd4..9e0253d17 100644 --- a/Ficus/src/rust/ficus/src/pipelines/activities_parts.rs +++ b/Ficus/src/rust/ficus/src/pipelines/activities_parts.rs @@ -1,51 +1,47 @@ -use super::errors::pipeline_errors::RawPartExecutionError; use super::{ aliases::TracesActivities, context::PipelineContext, - errors::pipeline_errors::PipelinePartExecutionError, + errors::pipeline_errors::{PipelinePartExecutionError, RawPartExecutionError}, pipelines::{DefaultPipelinePart, PipelinePart, PipelinePartFactory}, }; -use crate::event_log::bxes::xes_to_bxes_converter::write_event_log_to_bxes; -use crate::event_log::core::event::event::Event; -use crate::event_log::core::trace::trace::Trace; -use crate::event_log::xes::writer::xes_event_log_writer::write_xes_log; -use crate::event_log::xes::xes_trace::XesTraceImpl; -use crate::features::analysis::log_info::event_log_info::count_events; -use crate::features::analysis::patterns::activity_instances; -use crate::features::analysis::patterns::activity_instances::{ - extract_activities_instances_strict, substitute_underlying_events, ActivitiesLogSource, UNDEF_ACTIVITY_NAME, -}; -use crate::features::analysis::patterns::pattern_info::{UnderlyingPatternKind, UNDERLYING_PATTERN_KIND_KEY}; -use crate::pipelines::context::PipelineInfrastructure; -use crate::pipelines::keys::context_keys::{ - ACTIVITIES_KEY, ACTIVITIES_LOGS_SOURCE_KEY, ACTIVITY_IN_TRACE_FILTER_KIND_KEY, ACTIVITY_LEVEL_KEY, ACTIVITY_NAME_KEY, ADJUSTING_MODE_KEY, - DISCOVER_ACTIVITY_INSTANCES_STRICT_KEY, EVENTS_COUNT_KEY, EVENT_CLASS_REGEX_KEY, EVENT_LOG_KEY, EXECUTE_ONLY_ON_LAST_EXTRACTION_KEY, - HASHES_EVENT_LOG_KEY, LOG_SERIALIZATION_FORMAT_KEY, MIN_ACTIVITY_LENGTH_KEY, NARROW_ACTIVITIES_KEY, PATH_KEY, - PATTERNS_DISCOVERY_STRATEGY_KEY, PATTERNS_KEY, PATTERNS_KIND_KEY, PIPELINE_KEY, REGEXES_KEY, REGEX_KEY, REPEAT_SETS_KEY, - TRACE_ACTIVITIES_KEY, UNDEF_ACTIVITY_HANDLING_STRATEGY_KEY, UNDERLYING_EVENTS_COUNT_KEY, -}; -use crate::pipelines::pipeline_parts::PipelineParts; -use crate::utils::log_serialization_format::LogSerializationFormat; use crate::{ event_log::{ - core::event_log::EventLog, - xes::{xes_event::XesEventImpl, xes_event_log::XesEventLogImpl}, + bxes::xes_to_bxes_converter::write_event_log_to_bxes, + core::{event::event::Event, event_log::EventLog, trace::trace::Trace}, + xes::{writer::xes_event_log_writer::write_xes_log, xes_event::XesEventImpl, xes_event_log::XesEventLogImpl, xes_trace::XesTraceImpl}, }, - features::analysis::patterns::{ - activity_instances::{ - add_unattached_activities, count_underlying_events, create_activity_name, create_log_from_unattached_events, - create_new_log_from_activities_instances, extract_activities_instances, ActivityInTraceInfo, AdjustingMode, SubTraceKind, - UndefActivityHandlingStrategy, + features::analysis::{ + log_info::event_log_info::count_events, + patterns::{ + activity_instances, + activity_instances::{ + add_unattached_activities, count_underlying_events, create_activity_name, create_log_from_unattached_events, + create_new_log_from_activities_instances, extract_activities_instances, extract_activities_instances_strict, + substitute_underlying_events, ActivitiesLogSource, ActivityInTraceInfo, AdjustingMode, SubTraceKind, UndefActivityHandlingStrategy, + UNDEF_ACTIVITY_NAME, + }, + pattern_info::{UnderlyingPatternKind, UNDERLYING_PATTERN_KIND_KEY}, + repeat_sets::{build_repeat_set_tree_from_repeats, build_repeat_sets}, }, - repeat_sets::{build_repeat_set_tree_from_repeats, build_repeat_sets}, }, - utils::user_data::user_data::{UserData, UserDataImpl}, + pipelines::{ + context::PipelineInfrastructure, + keys::context_keys::{ + ACTIVITIES_KEY, ACTIVITIES_LOGS_SOURCE_KEY, ACTIVITY_IN_TRACE_FILTER_KIND_KEY, ACTIVITY_LEVEL_KEY, ACTIVITY_NAME_KEY, + ADJUSTING_MODE_KEY, DISCOVER_ACTIVITY_INSTANCES_STRICT_KEY, EVENTS_COUNT_KEY, EVENT_CLASS_REGEX_KEY, EVENT_LOG_KEY, + EXECUTE_ONLY_ON_LAST_EXTRACTION_KEY, HASHES_EVENT_LOG_KEY, LOG_SERIALIZATION_FORMAT_KEY, MIN_ACTIVITY_LENGTH_KEY, + NARROW_ACTIVITIES_KEY, PATH_KEY, PATTERNS_DISCOVERY_STRATEGY_KEY, PATTERNS_KEY, PATTERNS_KIND_KEY, PIPELINE_KEY, REGEXES_KEY, + REGEX_KEY, REPEAT_SETS_KEY, TRACE_ACTIVITIES_KEY, UNDEF_ACTIVITY_HANDLING_STRATEGY_KEY, UNDERLYING_EVENTS_COUNT_KEY, + }, + pipeline_parts::PipelineParts, + }, + utils::{ + log_serialization_format::LogSerializationFormat, + user_data::user_data::{UserData, UserDataImpl}, + }, }; use chrono::TimeDelta; -use std::collections::HashMap; -use std::path::Path; -use std::str::FromStr; -use std::{cell::RefCell, rc::Rc}; +use std::{cell::RefCell, collections::HashMap, path::Path, rc::Rc, str::FromStr}; pub enum UndefActivityHandlingStrategyDto { DontInsert, @@ -271,7 +267,7 @@ impl PipelineParts { } pub(super) fn discover_activities_in_unattached_subtraces() -> (String, PipelinePartFactory) { - Self::create_pipeline_part(Self::DISCOVER_ACTIVITIES_IN_UNATTACHED_SUBTRACES, &|context, infra, config| { + Self::create_pipeline_part(Self::DISCOVER_ACTIVITIES_IN_UNATTACHED_SUBTRACES, &|context, _, config| { let log = Self::get_user_data(context, &EVENT_LOG_KEY)?; let mut existing_activities = &Self::create_empty_activities(log); @@ -316,7 +312,7 @@ impl PipelineParts { activities.push(vec![]); } - return activities; + activities } pub(super) fn clear_activities_related_stuff() -> (String, PipelinePartFactory) { @@ -464,7 +460,7 @@ impl PipelineParts { for trace in log.traces() { let mut new_trace = XesTraceImpl::empty(); for event in trace.borrow().events() { - substitute_underlying_events::(event, &mut new_trace); + substitute_underlying_events(event, &mut new_trace); } new_log.push(Rc::new(RefCell::new(new_trace))); @@ -518,7 +514,7 @@ impl PipelineParts { } pub(super) fn serialize_activities_logs() -> (String, PipelinePartFactory) { - Self::create_pipeline_part(Self::SERIALIZE_ACTIVITIES_LOGS, &|context, infra, config| { + Self::create_pipeline_part(Self::SERIALIZE_ACTIVITIES_LOGS, &|context, _, config| { let logs_to_activities = Self::create_activities_to_logs(context, config)?; let path = Path::new(Self::get_user_data(config, &PATH_KEY)?); let format = Self::get_user_data(config, &LOG_SERIALIZATION_FORMAT_KEY)?; @@ -547,7 +543,7 @@ impl PipelineParts { } pub(super) fn reverse_hierarchy_indices() -> (String, PipelinePartFactory) { - Self::create_pipeline_part(Self::REVERSE_HIERARCHY_INDICES, &|context, infra, config| { + Self::create_pipeline_part(Self::REVERSE_HIERARCHY_INDICES, &|context, _, _| { let log = Self::get_user_data_mut(context, &EVENT_LOG_KEY)?; const HIERARCHY_LEVEL: &str = "hierarchy_level_"; diff --git a/Ficus/src/rust/ficus/src/pipelines/annotations_parts.rs b/Ficus/src/rust/ficus/src/pipelines/annotations_parts.rs index 9ec7220bc..479948d4e 100644 --- a/Ficus/src/rust/ficus/src/pipelines/annotations_parts.rs +++ b/Ficus/src/rust/ficus/src/pipelines/annotations_parts.rs @@ -1,23 +1,30 @@ use std::collections::HashMap; -use crate::event_log::xes::xes_event_log::XesEventLogImpl; -use crate::features::discovery::ocel::graph_annotation::{create_ocel_annotation_for_dag, OcelAnnotation, OcelAnnotationCreationError}; -use crate::features::discovery::petri_net::annotations::{ - annotate_with_counts, annotate_with_frequencies, annotate_with_time_performance, annotate_with_trace_frequency, +use crate::{ + event_log::xes::xes_event_log::XesEventLogImpl, + features::discovery::{ + ocel::graph_annotation::create_ocel_annotation_for_dag, + petri_net::{ + annotations::{annotate_with_counts, annotate_with_frequencies, annotate_with_time_performance, annotate_with_trace_frequency}, + petri_net::DefaultPetriNet, + }, + }, + pipelines::{ + context::PipelineContext, + errors::pipeline_errors::{PipelinePartExecutionError, RawPartExecutionError}, + keys::context_keys::{ + EVENT_LOG_KEY, GRAPH_KEY, GRAPH_TIME_ANNOTATION_KEY, OCEL_ANNOTATION_KEY, PETRI_NET_COUNT_ANNOTATION_KEY, + PETRI_NET_FREQUENCY_ANNOTATION_KEY, PETRI_NET_KEY, PETRI_NET_TRACE_FREQUENCY_ANNOTATION_KEY, TERMINATE_ON_UNREPLAYABLE_TRACES_KEY, + TIME_ANNOTATION_KIND_KEY, + }, + pipeline_parts::PipelineParts, + pipelines::PipelinePartFactory, + }, + utils::{ + context_key::DefaultContextKey, + user_data::user_data::{UserData, UserDataImpl}, + }, }; -use crate::features::discovery::petri_net::petri_net::DefaultPetriNet; -use crate::pipelines::context::PipelineContext; -use crate::pipelines::errors::pipeline_errors::{PipelinePartExecutionError, RawPartExecutionError}; -use crate::pipelines::keys::context_keys::{ - EVENT_LOG_KEY, GRAPH_KEY, GRAPH_TIME_ANNOTATION_KEY, OCEL_ANNOTATION_KEY, PETRI_NET_COUNT_ANNOTATION_KEY, - PETRI_NET_FREQUENCY_ANNOTATION_KEY, PETRI_NET_KEY, PETRI_NET_TRACE_FREQUENCY_ANNOTATION_KEY, TERMINATE_ON_UNREPLAYABLE_TRACES_KEY, - TIME_ANNOTATION_KIND_KEY, -}; -use crate::pipelines::pipeline_parts::PipelineParts; -use crate::pipelines::pipelines::PipelinePartFactory; -use crate::utils::context_key::DefaultContextKey; -use crate::utils::user_data::user_data::UserData; -use crate::utils::user_data::user_data::UserDataImpl; impl PipelineParts { pub(super) fn annotate_petri_net_count() -> (String, PipelinePartFactory) { @@ -93,7 +100,7 @@ impl PipelineParts { } pub(super) fn create_ocel_annotation_for_dag() -> (String, PipelinePartFactory) { - Self::create_pipeline_part(Self::CREATE_OCEL_ANNOTATION_FOR_DAG, &|context, _, config| { + Self::create_pipeline_part(Self::CREATE_OCEL_ANNOTATION_FOR_DAG, &|context, _, _| { let graph = Self::get_user_data(context, &GRAPH_KEY)?; match create_ocel_annotation_for_dag(graph) { diff --git a/Ficus/src/rust/ficus/src/pipelines/cases.rs b/Ficus/src/rust/ficus/src/pipelines/cases.rs index d661102f2..4e5bc1961 100644 --- a/Ficus/src/rust/ficus/src/pipelines/cases.rs +++ b/Ficus/src/rust/ficus/src/pipelines/cases.rs @@ -1,17 +1,21 @@ -use crate::features::cases::cases_discovery::discover_cases; -use crate::pipelines::keys::context_keys::{END_CASE_REGEX, EVENT_LOG_KEY, INLINE_INNER_CASES, PIPELINE_KEY, START_CASE_REGEX}; -use crate::pipelines::pipeline_parts::PipelineParts; -use crate::pipelines::pipelines::{PipelinePart, PipelinePartFactory}; -use crate::utils::user_data::user_data::UserData; +use crate::{ + features::cases::cases_discovery::discover_cases, + pipelines::{ + keys::context_keys::{END_CASE_REGEX_KEY, EVENT_LOG_KEY, INLINE_INNER_CASES_KEY, PIPELINE_KEY, START_CASE_REGEX_KEY}, + pipeline_parts::PipelineParts, + pipelines::{PipelinePart, PipelinePartFactory}, + }, + utils::user_data::user_data::UserData, +}; impl PipelineParts { pub(super) fn discover_cases() -> (String, PipelinePartFactory) { Self::create_pipeline_part(Self::DISCOVER_CASES, &|context, infra, config| { let log = Self::get_user_data(context, &EVENT_LOG_KEY)?; let pipeline = Self::get_user_data(config, &PIPELINE_KEY)?; - let start_case_regex = Self::get_user_data(config, &START_CASE_REGEX)?; - let end_case_regex = Self::get_user_data(config, &END_CASE_REGEX)?; - let inline_inner_cases = *Self::get_user_data(config, &INLINE_INNER_CASES)?; + let start_case_regex = Self::get_user_data(config, &START_CASE_REGEX_KEY)?; + let end_case_regex = Self::get_user_data(config, &END_CASE_REGEX_KEY)?; + let inline_inner_cases = *Self::get_user_data(config, &INLINE_INNER_CASES_KEY)?; let new_log = discover_cases(log, start_case_regex.as_str(), end_case_regex.as_str(), inline_inner_cases); diff --git a/Ficus/src/rust/ficus/src/pipelines/clustering.rs b/Ficus/src/rust/ficus/src/pipelines/clustering.rs index 514ddb75a..4e2bd20b0 100644 --- a/Ficus/src/rust/ficus/src/pipelines/clustering.rs +++ b/Ficus/src/rust/ficus/src/pipelines/clustering.rs @@ -1,25 +1,35 @@ -use crate::event_log::xes::xes_event_log::XesEventLogImpl; -use crate::features::clustering::activities::activities_common::create_dataset; -use crate::features::clustering::activities::activities_params::{ActivitiesClusteringParams, ActivitiesVisualizationParams}; -use crate::features::clustering::activities::dbscan::clusterize_activities_dbscan; -use crate::features::clustering::activities::k_means::{clusterize_activities_k_means, clusterize_activities_k_means_grid_search}; -use crate::features::clustering::common::{transform_to_ficus_dataset, CommonVisualizationParams}; -use crate::features::clustering::traces::dbscan::{clusterize_log_by_traces_dbscan, clusterize_log_by_traces_dbscan_grid_search}; -use crate::features::clustering::traces::k_means::clusterize_log_by_traces_kmeans_grid_search; -use crate::features::clustering::traces::traces_params::{FeatureCountKind, TracesClusteringParams}; -use crate::pipelines::context::{PipelineContext, PipelineInfrastructure}; -use crate::pipelines::errors::pipeline_errors::{PipelinePartExecutionError, RawPartExecutionError}; -use crate::pipelines::keys::context_keys::{ - ACTIVITIES_REPR_SOURCE_KEY, ACTIVITY_LEVEL_KEY, CLUSTERS_COUNT_KEY, COLORS_HOLDER_KEY, DISTANCE_KEY, EVENT_CLASS_REGEX_KEY, - EVENT_LOG_KEY, FEATURE_COUNT_KIND_KEY, LABELED_LOG_TRACES_DATASET_KEY, LABELED_TRACES_ACTIVITIES_DATASET_KEY, - LEARNING_ITERATIONS_COUNT_KEY, MIN_EVENTS_IN_CLUSTERS_COUNT_KEY, MIN_POINTS_IN_CLUSTER_ARRAY_KEY, PERCENT_FROM_MAX_VALUE_KEY, - PIPELINE_KEY, PUT_NOISE_EVENTS_IN_ONE_CLUSTER_KEY, TOLERANCES_KEY, TOLERANCE_KEY, TRACES_ACTIVITIES_DATASET_KEY, - TRACES_REPRESENTATION_SOURCE_KEY, TRACE_ACTIVITIES_KEY, +use crate::{ + event_log::xes::xes_event_log::XesEventLogImpl, + features::clustering::{ + activities::{ + activities_common::create_dataset, + activities_params::{ActivitiesClusteringParams, ActivitiesVisualizationParams}, + dbscan::clusterize_activities_dbscan, + k_means::{clusterize_activities_k_means, clusterize_activities_k_means_grid_search}, + }, + common::{transform_to_ficus_dataset, CommonVisualizationParams}, + traces::{ + dbscan::{clusterize_log_by_traces_dbscan, clusterize_log_by_traces_dbscan_grid_search}, + k_means::clusterize_log_by_traces_kmeans_grid_search, + traces_params::{FeatureCountKind, TracesClusteringParams}, + }, + }, + pipelines::{ + context::{PipelineContext, PipelineInfrastructure}, + errors::pipeline_errors::{PipelinePartExecutionError, RawPartExecutionError}, + keys::context_keys::{ + ACTIVITIES_REPR_SOURCE_KEY, ACTIVITY_LEVEL_KEY, CLUSTERS_COUNT_KEY, COLORS_HOLDER_KEY, DISTANCE_KEY, EVENT_CLASS_REGEX_KEY, + EVENT_LOG_KEY, FEATURE_COUNT_KIND_KEY, LABELED_LOG_TRACES_DATASET_KEY, LABELED_TRACES_ACTIVITIES_DATASET_KEY, + LEARNING_ITERATIONS_COUNT_KEY, MIN_EVENTS_IN_CLUSTERS_COUNT_KEY, MIN_POINTS_IN_CLUSTER_ARRAY_KEY, PERCENT_FROM_MAX_VALUE_KEY, + PIPELINE_KEY, PUT_NOISE_EVENTS_IN_ONE_CLUSTER_KEY, TOLERANCES_KEY, TOLERANCE_KEY, TRACES_ACTIVITIES_DATASET_KEY, + TRACES_REPR_SOURCE_KEY, TRACE_ACTIVITIES_KEY, + }, + multithreading::FeatureCountKindDto, + pipeline_parts::PipelineParts, + pipelines::{Pipeline, PipelinePart, PipelinePartFactory}, + }, + utils::user_data::user_data::{UserData, UserDataImpl}, }; -use crate::pipelines::multithreading::FeatureCountKindDto; -use crate::pipelines::pipeline_parts::PipelineParts; -use crate::pipelines::pipelines::{Pipeline, PipelinePart, PipelinePartFactory}; -use crate::utils::user_data::user_data::{UserData, UserDataImpl}; impl PipelineParts { pub(super) fn clusterize_activities_from_traces_k_means() -> (String, PipelinePartFactory) { @@ -41,7 +51,7 @@ impl PipelineParts { fn create_common_vis_params<'a>( context: &'a PipelineContext, config: &'a UserDataImpl, - ) -> Result, PipelinePartExecutionError> { + ) -> Result, PipelinePartExecutionError> { let log = Self::get_user_data(context, &EVENT_LOG_KEY)?; let colors_holder = Self::get_user_data_mut(context, &COLORS_HOLDER_KEY)?; let class_extractor = match Self::get_user_data(config, &EVENT_CLASS_REGEX_KEY) { @@ -59,7 +69,7 @@ impl PipelineParts { fn create_activities_visualization_params<'a>( context: &'a mut PipelineContext, config: &'a UserDataImpl, - ) -> Result, PipelinePartExecutionError> { + ) -> Result, PipelinePartExecutionError> { let common_vis_params = Self::create_common_vis_params(context, config)?; let traces_activities = Self::get_user_data_mut(context, &TRACE_ACTIVITIES_KEY)?; let activity_level = *Self::get_user_data(config, &ACTIVITY_LEVEL_KEY)? as usize; @@ -76,7 +86,7 @@ impl PipelineParts { fn create_activities_clustering_params<'a>( context: &'a mut PipelineContext, config: &'a UserDataImpl, - ) -> Result, PipelinePartExecutionError> { + ) -> Result, PipelinePartExecutionError> { let vis_params = Self::create_activities_visualization_params(context, config)?; let tolerance = *Self::get_user_data(config, &TOLERANCE_KEY)?; let distance = *Self::get_user_data(config, &DISTANCE_KEY)?; @@ -166,9 +176,9 @@ impl PipelineParts { pub(crate) fn create_traces_clustering_params<'a>( context: &'a mut PipelineContext, config: &'a UserDataImpl, - ) -> Result, PipelinePartExecutionError> { + ) -> Result, PipelinePartExecutionError> { let distance = *Self::get_user_data(config, &DISTANCE_KEY)?; - let repr_source = *Self::get_user_data(config, &TRACES_REPRESENTATION_SOURCE_KEY)?; + let repr_source = *Self::get_user_data(config, &TRACES_REPR_SOURCE_KEY)?; let feature_count_kind = *Self::get_user_data(config, &FEATURE_COUNT_KIND_KEY)?; let feature_count_kind = match feature_count_kind { diff --git a/Ficus/src/rust/ficus/src/pipelines/context.rs b/Ficus/src/rust/ficus/src/pipelines/context.rs index ff603c4fb..07723a33c 100644 --- a/Ficus/src/rust/ficus/src/pipelines/context.rs +++ b/Ficus/src/rust/ficus/src/pipelines/context.rs @@ -1,11 +1,14 @@ -use crate::pipelines::pipeline_parts::PipelineParts; -use crate::utils::performance::performance_cookie::PerformanceLogger; -use crate::utils::user_data::{ - keys::{DefaultKey, Key}, - user_data::{UserData, UserDataImpl}, +use crate::{ + pipelines::pipeline_parts::PipelineParts, + utils::{ + performance::performance_cookie::PerformanceLogger, + user_data::{ + keys::{DefaultKey, Key}, + user_data::{UserData, UserDataImpl}, + }, + }, }; use std::{any::Any, sync::Arc}; -use uuid::Uuid; use super::errors::pipeline_errors::PipelinePartExecutionError; @@ -15,7 +18,6 @@ pub trait LogMessageHandler: Send + Sync { pub struct PipelineInfrastructure { log_message_handler: Option>>, - execution_id: Uuid, } impl PerformanceLogger for PipelineInfrastructure { @@ -27,10 +29,7 @@ impl PerformanceLogger for PipelineInfrastructure { impl PipelineInfrastructure { pub fn new(log_message_handler: Option>>) -> Self { - Self { - log_message_handler, - execution_id: Uuid::new_v4(), - } + Self { log_message_handler } } pub fn log(&self, message: &str) -> Result<(), PipelinePartExecutionError> { diff --git a/Ficus/src/rust/ficus/src/pipelines/discovery_parts.rs b/Ficus/src/rust/ficus/src/pipelines/discovery_parts.rs index 347bb3806..2bc95f10d 100644 --- a/Ficus/src/rust/ficus/src/pipelines/discovery_parts.rs +++ b/Ficus/src/rust/ficus/src/pipelines/discovery_parts.rs @@ -1,27 +1,37 @@ -use crate::features::analysis::directly_follows_graph::{construct_dfg, construct_dfg_by_attribute}; -use crate::features::analysis::log_info::event_log_info::OfflineEventLogInfo; -use crate::features::analysis::log_info::log_info_creation_dto::EventLogInfoCreationDto; -use crate::features::discovery::alpha::alpha::{discover_petri_net_alpha, discover_petri_net_alpha_plus, find_transitions_one_length_loop}; -use crate::features::discovery::alpha::alpha_plus_plus_nfc::alpha_plus_plus_nfc::discover_petri_net_alpha_plus_plus_nfc; -use crate::features::discovery::alpha::providers::alpha_plus_provider::AlphaPlusRelationsProviderImpl; -use crate::features::discovery::alpha::providers::alpha_provider::DefaultAlphaRelationsProvider; -use crate::features::discovery::fuzzy::fuzzy_miner::discover_graph_fuzzy; -use crate::features::discovery::heuristic::heuristic_miner::discover_petri_net_heuristic; -use crate::features::discovery::petri_net::marking::ensure_initial_marking; -use crate::features::discovery::petri_net::pnml_serialization::serialize_to_pnml_file; -use crate::features::discovery::relations::triangle_relation::OfflineTriangleRelation; -use crate::features::discovery::root_sequence::discovery_xes::discover_root_sequence_graph_from_event_log; -use crate::pipelines::context::PipelineContext; -use crate::pipelines::errors::pipeline_errors::{PipelinePartExecutionError, RawPartExecutionError}; -use crate::pipelines::keys::context_keys::{ - AND_THRESHOLD_KEY, ATTRIBUTE_KEY, BINARY_FREQUENCY_SIGNIFICANCE_THRESHOLD_KEY, DEPENDENCY_THRESHOLD_KEY, EDGE_CUTOFF_THRESHOLD_KEY, - EVENT_LOG_INFO_KEY, EVENT_LOG_KEY, GRAPH_KEY, LOOP_LENGTH_TWO_THRESHOLD_KEY, MERGE_SEQUENCES_OF_EVENTS_KEY, NODE_CUTOFF_THRESHOLD_KEY, - PATH_KEY, PETRI_NET_KEY, PNML_USE_NAMES_AS_IDS_KEY, POSITIVE_OBSERVATIONS_THRESHOLD_KEY, PRESERVE_THRESHOLD_KEY, RATIO_THRESHOLD_KEY, - RELATIVE_TO_BEST_THRESHOLD_KEY, ROOT_SEQUENCE_KIND_KEY, THREAD_ATTRIBUTE_KEY, UNARY_FREQUENCY_THRESHOLD_KEY, UTILITY_RATE_KEY, +use crate::{ + features::{ + analysis::{ + directly_follows_graph::{construct_dfg, construct_dfg_by_attribute}, + log_info::{event_log_info::OfflineEventLogInfo, log_info_creation_dto::EventLogInfoCreationDto}, + }, + discovery::{ + alpha::{ + alpha::{discover_petri_net_alpha, discover_petri_net_alpha_plus, find_transitions_one_length_loop}, + alpha_plus_plus_nfc::alpha_plus_plus_nfc::discover_petri_net_alpha_plus_plus_nfc, + providers::{alpha_plus_provider::AlphaPlusRelationsProviderImpl, alpha_provider::DefaultAlphaRelationsProvider}, + }, + fuzzy::fuzzy_miner::discover_graph_fuzzy, + heuristic::heuristic_miner::discover_petri_net_heuristic, + petri_net::{marking::ensure_initial_marking, pnml_serialization::serialize_to_pnml_file}, + relations::triangle_relation::OfflineTriangleRelation, + root_sequence::discovery_xes::discover_root_sequence_graph_from_event_log, + }, + }, + pipelines::{ + context::PipelineContext, + errors::pipeline_errors::{PipelinePartExecutionError, RawPartExecutionError}, + keys::context_keys::{ + AND_THRESHOLD_KEY, ATTRIBUTE_KEY, BINARY_FREQUENCY_SIGNIFICANCE_THRESHOLD_KEY, DEPENDENCY_THRESHOLD_KEY, EDGE_CUTOFF_THRESHOLD_KEY, + EVENT_LOG_INFO_KEY, EVENT_LOG_KEY, GRAPH_KEY, LOOP_LENGTH_TWO_THRESHOLD_KEY, MERGE_SEQUENCES_OF_EVENTS_KEY, + NODE_CUTOFF_THRESHOLD_KEY, PATH_KEY, PETRI_NET_KEY, PNML_USE_NAMES_AS_IDS_KEY, POSITIVE_OBSERVATIONS_THRESHOLD_KEY, + PRESERVE_THRESHOLD_KEY, RATIO_THRESHOLD_KEY, RELATIVE_TO_BEST_THRESHOLD_KEY, ROOT_SEQUENCE_KIND_KEY, THREAD_ATTRIBUTE_KEY, + UNARY_FREQUENCY_THRESHOLD_KEY, UTILITY_RATE_KEY, + }, + pipeline_parts::PipelineParts, + pipelines::PipelinePartFactory, + }, + utils::user_data::user_data::UserData, }; -use crate::pipelines::pipeline_parts::PipelineParts; -use crate::pipelines::pipelines::PipelinePartFactory; -use crate::utils::user_data::user_data::UserData; impl PipelineParts { pub(super) fn discover_petri_net_alpha() -> (String, PipelinePartFactory) { diff --git a/Ficus/src/rust/ficus/src/pipelines/drawing_parts.rs b/Ficus/src/rust/ficus/src/pipelines/drawing_parts.rs index 5c35456c3..79ebda24c 100644 --- a/Ficus/src/rust/ficus/src/pipelines/drawing_parts.rs +++ b/Ficus/src/rust/ficus/src/pipelines/drawing_parts.rs @@ -1,23 +1,22 @@ use fancy_regex::Regex; -use std::collections::HashMap; -use std::ops::Deref; +use std::{collections::HashMap, ops::Deref}; use super::{context::PipelineContext, errors::pipeline_errors::PipelinePartExecutionError, pipelines::PipelinePartFactory}; -use crate::event_log::xes::xes_event_log::XesEventLogImpl; -use crate::pipelines::keys::context_keys::{ - ATTRIBUTE_KEY, COLORS_EVENT_LOG_KEY, COLORS_HOLDER_KEY, EVENT_LOG_KEY, EVENT_NAME_KEY, REGEX_KEY, TRACE_ACTIVITIES_KEY, -}; -use crate::pipelines::pipeline_parts::PipelineParts; -use crate::utils::colors::{ColorsEventLog, ColorsHolder}; -use crate::utils::references::HeapedOrOwned; use crate::{ event_log::{ core::{event::event::Event, event_log::EventLog, trace::trace::Trace}, - xes::xes_event::XesEventImpl, + xes::{xes_event::XesEventImpl, xes_event_log::XesEventLogImpl}, }, features::analysis::patterns::activity_instances::{SubTraceKind, UNDEF_ACTIVITY_NAME}, + pipelines::{ + keys::context_keys::{ + ATTRIBUTE_KEY, COLORS_EVENT_LOG_KEY, COLORS_HOLDER_KEY, EVENT_LOG_KEY, EVENT_NAME_KEY, REGEX_KEY, TRACE_ACTIVITIES_KEY, + }, + pipeline_parts::PipelineParts, + }, utils::{ - colors::{Color, ColoredRectangle}, + colors::{Color, ColoredRectangle, ColorsEventLog, ColorsHolder}, + references::HeapedOrOwned, user_data::user_data::UserData, }, }; diff --git a/Ficus/src/rust/ficus/src/pipelines/errors/pipeline_errors.rs b/Ficus/src/rust/ficus/src/pipelines/errors/pipeline_errors.rs index 50a686b64..2f32a9190 100644 --- a/Ficus/src/rust/ficus/src/pipelines/errors/pipeline_errors.rs +++ b/Ficus/src/rust/ficus/src/pipelines/errors/pipeline_errors.rs @@ -1,6 +1,7 @@ -use std::error::Error; -use std::fmt::Debug; -use std::fmt::{Display, Formatter}; +use std::{ + error::Error, + fmt::{Debug, Display, Formatter}, +}; #[derive(Debug)] pub enum PipelinePartExecutionError { diff --git a/Ficus/src/rust/ficus/src/pipelines/filtering_parts.rs b/Ficus/src/rust/ficus/src/pipelines/filtering_parts.rs index 96704b3c8..0700dd747 100644 --- a/Ficus/src/rust/ficus/src/pipelines/filtering_parts.rs +++ b/Ficus/src/rust/ficus/src/pipelines/filtering_parts.rs @@ -6,18 +6,21 @@ use super::{ errors::pipeline_errors::{PipelinePartExecutionError, RawPartExecutionError}, pipelines::PipelinePartFactory, }; -use crate::event_log::xes::xes_event_log::XesEventLogImpl; -use crate::features::mutations::filtering::remain_events_in_event_log; -use crate::pipelines::context::PipelineContext; -use crate::pipelines::keys::context_keys::{EVENTS_COUNT_KEY, EVENT_LOG_KEY, EVENT_NAME_KEY, REGEX_KEY}; -use crate::pipelines::pipeline_parts::PipelineParts; -use crate::utils::user_data::user_data::UserDataImpl; use crate::{ - event_log::core::{event_log::EventLog, trace::trace::Trace}, + event_log::{ + core::{event_log::EventLog, trace::trace::Trace}, + xes::xes_event_log::XesEventLogImpl, + }, features::mutations::{ - filtering::{filter_log_by_name, filter_log_by_regex}, + filtering::{filter_log_by_name, filter_log_by_regex, remain_events_in_event_log}, split::get_traces_groups_indices, }, + pipelines::{ + context::PipelineContext, + keys::context_keys::{EVENTS_COUNT_KEY, EVENT_LOG_KEY, EVENT_NAME_KEY, REGEX_KEY}, + pipeline_parts::PipelineParts, + }, + utils::user_data::user_data::UserDataImpl, }; impl PipelineParts { diff --git a/Ficus/src/rust/ficus/src/pipelines/keys/context_keys.rs b/Ficus/src/rust/ficus/src/pipelines/keys/context_keys.rs index 896a436e1..a3c2fefad 100644 --- a/Ficus/src/rust/ficus/src/pipelines/keys/context_keys.rs +++ b/Ficus/src/rust/ficus/src/pipelines/keys/context_keys.rs @@ -1,48 +1,51 @@ -use std::ops::Deref; -use std::{cell::RefCell, collections::HashMap, rc::Rc}; - -use crate::features::analysis::log_info::event_log_info::OfflineEventLogInfo; -use crate::features::analysis::patterns::activity_instances::{ActivityInTraceFilterKind, ActivityNarrowingKind}; -use crate::features::clustering::activities::activities_params::ActivityRepresentationSource; -use crate::features::clustering::traces::traces_params::TracesRepresentationSource; -use crate::features::discovery::ocel::graph_annotation::OcelAnnotation; -use crate::features::discovery::petri_net::annotations::TimeAnnotationKind; -use crate::features::discovery::petri_net::petri_net::DefaultPetriNet; -use crate::features::discovery::root_sequence::models::RootSequenceKind; -use crate::features::discovery::timeline::discovery::LogTimelineDiagram; -use crate::features::discovery::timeline::software_data::extraction_config::SoftwareDataExtractionConfig; -use crate::grpc::events::events_handler::CaseName; -use crate::pipelines::activities_parts::{ActivitiesLogsSourceDto, UndefActivityHandlingStrategyDto}; -use crate::pipelines::multithreading::FeatureCountKindDto; -use crate::pipelines::patterns_parts::PatternsKindDto; -use crate::utils::colors::ColorsEventLog; -use crate::utils::context_key::{ContextKey, DefaultContextKey}; -use crate::utils::dataset::dataset::{FicusDataset, LabeledDataset}; -use crate::utils::distance::distance::FicusDistance; -use crate::utils::graph::graph::DefaultGraph; -use crate::utils::log_serialization_format::LogSerializationFormat; use crate::{ event_log::xes::xes_event_log::XesEventLogImpl, - features::analysis::patterns::{ - activity_instances::{ActivityInTraceInfo, AdjustingMode}, - contexts::PatternsDiscoveryStrategy, - repeat_sets::{ActivityNode, SubArrayWithTraceIndex}, - tandem_arrays::SubArrayInTraceInfo, + features::{ + analysis::{ + log_info::event_log_info::OfflineEventLogInfo, + patterns::{ + activity_instances::{ActivityInTraceFilterKind, ActivityInTraceInfo, ActivityNarrowingKind, AdjustingMode}, + contexts::PatternsDiscoveryStrategy, + repeat_sets::{ActivityNode, SubArrayWithTraceIndex}, + tandem_arrays::SubArrayInTraceInfo, + }, + }, + clustering::{activities::activities_params::ActivityRepresentationSource, traces::traces_params::TracesRepresentationSource}, + discovery::{ + ocel::graph_annotation::OcelAnnotation, + petri_net::{annotations::TimeAnnotationKind, petri_net::DefaultPetriNet}, + root_sequence::models::RootSequenceKind, + timeline::{discovery::LogTimelineDiagram, software_data::extraction_config::SoftwareDataExtractionConfig}, + }, + }, + grpc::events::events_handler::CaseName, + pipelines::{ + activities_parts::{ActivitiesLogsSourceDto, UndefActivityHandlingStrategyDto}, + multithreading::FeatureCountKindDto, + patterns_parts::PatternsKindDto, + pipelines::Pipeline, + }, + utils::{ + colors::{ColorsEventLog, ColorsHolder}, + context_key::ContextKey, + dataset::dataset::{FicusDataset, LabeledDataset}, + distance::distance::FicusDistance, + graph::graph::DefaultGraph, + log_serialization_format::LogSerializationFormat, }, - pipelines::pipelines::Pipeline, - utils::colors::ColorsHolder, }; use bxes::models::system_models::SystemMetadata; use lazy_static::lazy_static; +use std::{cell::RefCell, collections::HashMap, ops::Deref, rc::Rc}; use uuid::Uuid; -pub const CASE_NAME_STR: &'static str = "case_name"; -pub const PROCESS_NAME_STR: &'static str = "process_name"; -pub const SUBSCRIPTION_ID_STR: &'static str = "subscription_id"; -pub const SUBSCRIPTION_NAME_STR: &'static str = "subscription_name"; -pub const PIPELINE_ID_STR: &'static str = "pipeline_id"; -pub const PIPELINE_NAME_STR: &'static str = "pipeline_name"; -pub const UNSTRUCTURED_METADATA_STR: &'static str = "unstructured_metadata"; +pub const CASE_NAME: &'static str = "case_name"; +pub const PROCESS_NAME: &'static str = "process_name"; +pub const SUBSCRIPTION_ID: &'static str = "subscription_id"; +pub const SUBSCRIPTION_NAME: &'static str = "subscription_name"; +pub const PIPELINE_ID: &'static str = "pipeline_id"; +pub const PIPELINE_NAME: &'static str = "pipeline_name"; +pub const UNSTRUCTURED_METADATA: &'static str = "unstructured_metadata"; pub const PATH: &'static str = "path"; pub const TANDEM_ARRAY_LENGTH: &'static str = "tandem_array_length"; pub const ACTIVITY_LEVEL: &'static str = "activity_level"; @@ -83,9 +86,9 @@ pub const TOLERANCE: &'static str = "tolerance"; pub const MIN_EVENTS_IN_CLUSTERS_COUNT: &'static str = "min_events_in_cluster_count"; pub const EVENT_LOG_NAME: &'static str = "event_log_name"; pub const BYTES: &'static str = "bytes"; -pub const START_CASE_REGEX_STR: &str = "start_case_regex"; -pub const END_CASE_REGEX_STR: &str = "end_case_regex"; -pub const INLINE_INNER_CASES_STR: &str = "inline_inner_cases"; +pub const START_CASE_REGEX: &str = "start_case_regex"; +pub const END_CASE_REGEX: &str = "end_case_regex"; +pub const INLINE_INNER_CASES: &str = "inline_inner_cases"; pub const EVENT_LOG: &'static str = "event_log"; pub const ACTIVITIES: &'static str = "activities"; @@ -136,111 +139,115 @@ pub const DISCOVER_ACTIVITY_INSTANCES_STRICT: &'static str = "discover_activity_ pub const PUT_NOISE_EVENTS_IN_ONE_CLUSTER: &'static str = "put_noise_events_in_one_cluster"; pub const OCEL_ANNOTATION: &'static str = "ocel_annotation"; -#[rustfmt::skip] -lazy_static!( - pub static ref EVENT_LOG_KEY: DefaultContextKey = DefaultContextKey::new(EVENT_LOG); - pub static ref ACTIVITIES_KEY: DefaultContextKey>>> = DefaultContextKey::new(ACTIVITIES); - pub static ref REPEAT_SETS_KEY: DefaultContextKey> = DefaultContextKey::new(REPEAT_SETS); - pub static ref TRACE_ACTIVITIES_KEY: DefaultContextKey>> = DefaultContextKey::new(TRACE_ACTIVITIES); - pub static ref PATTERNS_KEY: DefaultContextKey>> = DefaultContextKey::new(PATTERNS); - pub static ref PETRI_NET_KEY: DefaultContextKey = DefaultContextKey::new(PETRI_NET); - pub static ref ACTIVITIES_TO_LOGS_KEY: DefaultContextKey> = DefaultContextKey::new(ACTIVITIES_TO_LOGS); - pub static ref ACTIVITY_NAME_KEY: DefaultContextKey = DefaultContextKey::new(ACTIVITY_NAME); - pub static ref HASHES_EVENT_LOG_KEY: DefaultContextKey>> = DefaultContextKey::new(HASHES_EVENT_LOG); - pub static ref NAMES_EVENT_LOG_KEY: DefaultContextKey>> = DefaultContextKey::new(NAMES_EVENT_LOG); - pub static ref TANDEM_ARRAY_LENGTH_KEY: DefaultContextKey = DefaultContextKey::new(TANDEM_ARRAY_LENGTH); - pub static ref ACTIVITY_LEVEL_KEY: DefaultContextKey = DefaultContextKey::new(ACTIVITY_LEVEL); - pub static ref NARROW_ACTIVITIES_KEY: DefaultContextKey = DefaultContextKey::new(NARROW_ACTIVITIES); - pub static ref EVENT_NAME_KEY: DefaultContextKey = DefaultContextKey::new(EVENT_NAME); - pub static ref REGEX_KEY: DefaultContextKey = DefaultContextKey::new(REGEX); - pub static ref COLORS_EVENT_LOG_KEY: DefaultContextKey = DefaultContextKey::new(COLORS_EVENT_LOG); - pub static ref COLORS_HOLDER_KEY: DefaultContextKey = DefaultContextKey::new(COLORS_HOLDER); - pub static ref PATTERNS_DISCOVERY_STRATEGY_KEY: DefaultContextKey = DefaultContextKey::new(PATTERNS_DISCOVERY_STRATEGY); - pub static ref OUTPUT_STRING_KEY: DefaultContextKey = DefaultContextKey::new(OUTPUT_STRING); - pub static ref EVENT_LOG_INFO_KEY: DefaultContextKey = DefaultContextKey::new(EVENT_LOG_INFO); - pub static ref UNDERLYING_EVENTS_COUNT_KEY: DefaultContextKey = DefaultContextKey::new(UNDERLYING_EVENTS_COUNT); - pub static ref EVENTS_COUNT_KEY: DefaultContextKey = DefaultContextKey::new(EVENTS_COUNT); - pub static ref REGEXES_KEY: DefaultContextKey> = DefaultContextKey::new(REGEXES); - pub static ref ADJUSTING_MODE_KEY: DefaultContextKey = DefaultContextKey::new(ADJUSTING_MODE); - pub static ref EVENT_CLASS_REGEX_KEY: DefaultContextKey = DefaultContextKey::new(EVENT_CLASS_REGEX); - pub static ref PATTERNS_KIND_KEY: DefaultContextKey = DefaultContextKey::new(PATTERNS_KIND); - pub static ref PIPELINE_KEY: DefaultContextKey = DefaultContextKey::new(PIPELINE); - pub static ref MIN_ACTIVITY_LENGTH_KEY: DefaultContextKey = DefaultContextKey::new(MIN_ACTIVITY_LENGTH); - pub static ref UNDEF_ACTIVITY_HANDLING_STRATEGY_KEY: DefaultContextKey = DefaultContextKey::new(UNDEF_ACTIVITY_HANDLING_STRATEGY); - pub static ref ACTIVITY_IN_TRACE_FILTER_KIND_KEY: DefaultContextKey = DefaultContextKey::new(ACTIVITY_IN_TRACE_FILTER_KIND); - pub static ref ACTIVITIES_LOGS_SOURCE_KEY: DefaultContextKey = DefaultContextKey::new(ACTIVITIES_LOGS_SOURCE); - pub static ref PNML_USE_NAMES_AS_IDS_KEY: DefaultContextKey = DefaultContextKey::new(PNML_USE_NAMES_AS_IDS); - pub static ref GRAPH_KEY: DefaultContextKey = DefaultContextKey::new(GRAPH); - pub static ref GRAPHS_KEY: DefaultContextKey> = DefaultContextKey::new(GRAPHS); - pub static ref DEPENDENCY_THRESHOLD_KEY: DefaultContextKey = DefaultContextKey::new(DEPENDENCY_THRESHOLD); - pub static ref POSITIVE_OBSERVATIONS_THRESHOLD_KEY: DefaultContextKey = DefaultContextKey::new(POSITIVE_OBSERVATIONS_THRESHOLD); - pub static ref RELATIVE_TO_BEST_THRESHOLD_KEY: DefaultContextKey = DefaultContextKey::new(RELATIVE_TO_BEST_THRESHOLD); - pub static ref AND_THRESHOLD_KEY: DefaultContextKey = DefaultContextKey::new(AND_THRESHOLD); - pub static ref LOOP_LENGTH_TWO_THRESHOLD_KEY: DefaultContextKey = DefaultContextKey::new(LOOP_LENGTH_TWO_THRESHOLD); - pub static ref UNARY_FREQUENCY_THRESHOLD_KEY: DefaultContextKey = DefaultContextKey::new(UNARY_FREQUENCY_THRESHOLD); - pub static ref BINARY_FREQUENCY_SIGNIFICANCE_THRESHOLD_KEY: DefaultContextKey = DefaultContextKey::new(BINARY_FREQUENCY_SIGNIFICANCE_THRESHOLD); -); +#[macro_export] +macro_rules! context_key { + ($name:ident, $t:ty) => { + paste::paste! { + lazy_static! { + pub static ref [<$name _KEY>]: crate::utils::context_key::DefaultContextKey<$t> = crate::utils::context_key::DefaultContextKey::new($name); + } + } + }; +} -#[rustfmt::skip] -lazy_static!( - pub static ref PRESERVE_THRESHOLD_KEY: DefaultContextKey = DefaultContextKey::new(PRESERVE_THRESHOLD); - pub static ref RATIO_THRESHOLD_KEY: DefaultContextKey = DefaultContextKey::new(RATIO_THRESHOLD); - pub static ref UTILITY_RATE_KEY: DefaultContextKey = DefaultContextKey::new(UTILITY_RATE); - pub static ref EDGE_CUTOFF_THRESHOLD_KEY: DefaultContextKey = DefaultContextKey::new(EDGE_CUTOFF_THRESHOLD); - pub static ref NODE_CUTOFF_THRESHOLD_KEY: DefaultContextKey = DefaultContextKey::new(NODE_CUTOFF_THRESHOLD); - pub static ref PETRI_NET_COUNT_ANNOTATION_KEY: DefaultContextKey> = DefaultContextKey::new(PETRI_NET_COUNT_ANNOTATION); - pub static ref PETRI_NET_FREQUENCY_ANNOTATION_KEY: DefaultContextKey> = DefaultContextKey::new(PETRI_NET_FREQUENCY_ANNOTATION); - pub static ref PETRI_NET_TRACE_FREQUENCY_ANNOTATION_KEY: DefaultContextKey> = DefaultContextKey::new(PETRI_NET_TRACE_FREQUENCY_ANNOTATION); - pub static ref TERMINATE_ON_UNREPLAYABLE_TRACES_KEY: DefaultContextKey = DefaultContextKey::new(TERMINATE_ON_UNREPLAYABLE_TRACES); - pub static ref CLUSTERS_COUNT_KEY: DefaultContextKey = DefaultContextKey::new(CLUSTERS_COUNT); - pub static ref LEARNING_ITERATIONS_COUNT_KEY: DefaultContextKey = DefaultContextKey::new(LEARNING_ITERATIONS_COUNT); - pub static ref TOLERANCE_KEY: DefaultContextKey = DefaultContextKey::new(TOLERANCE); - pub static ref MIN_EVENTS_IN_CLUSTERS_COUNT_KEY: DefaultContextKey = DefaultContextKey::new(MIN_EVENTS_IN_CLUSTERS_COUNT); - pub static ref TRACES_ACTIVITIES_DATASET_KEY: DefaultContextKey = DefaultContextKey::new(TRACES_ACTIVITIES_DATASET); - pub static ref LABELED_TRACES_ACTIVITIES_DATASET_KEY: DefaultContextKey = DefaultContextKey::new(LABELED_TRACES_ACTIVITIES_DATASET); - pub static ref ACTIVITIES_REPR_SOURCE_KEY: DefaultContextKey = DefaultContextKey::new(ACTIVITIES_REPR_SOURCE); - pub static ref DISTANCE_KEY: DefaultContextKey = DefaultContextKey::new(DISTANCE); - pub static ref EXECUTE_ONLY_ON_LAST_EXTRACTION_KEY: DefaultContextKey = DefaultContextKey::new(EXECUTE_ONLY_ON_LAST_EXTRACTION); - pub static ref EVENT_LOG_NAME_KEY: DefaultContextKey = DefaultContextKey::new(EVENT_LOG_NAME); - pub static ref LOG_TRACES_DATASET_KEY: DefaultContextKey = DefaultContextKey::new(LOG_TRACES_DATASET); - pub static ref LABELED_LOG_TRACES_DATASET_KEY: DefaultContextKey = DefaultContextKey::new(LABELED_LOG_TRACES_DATASET); - pub static ref TRACES_REPRESENTATION_SOURCE_KEY: DefaultContextKey = DefaultContextKey::new(TRACES_REPR_SOURCE); - pub static ref SYSTEM_METADATA_KEY: DefaultContextKey = DefaultContextKey::new(SYSTEM_METADATA); - pub static ref LOG_SERIALIZATION_FORMAT_KEY: DefaultContextKey = DefaultContextKey::new(LOG_SERIALIZATION_FORMAT); - pub static ref BYTES_KEY: DefaultContextKey> = DefaultContextKey::new(BYTES); - pub static ref PATH_KEY: DefaultContextKey = DefaultContextKey::new(PATH); - pub static ref CASE_NAME: DefaultContextKey = DefaultContextKey::new(CASE_NAME_STR); - pub static ref PROCESS_NAME: DefaultContextKey = DefaultContextKey::new(PROCESS_NAME_STR); - pub static ref PIPELINE_NAME: DefaultContextKey = DefaultContextKey::new(PIPELINE_NAME_STR); - pub static ref PIPELINE_ID: DefaultContextKey = DefaultContextKey::new(PIPELINE_ID_STR); - pub static ref SUBSCRIPTION_NAME: DefaultContextKey = DefaultContextKey::new(SUBSCRIPTION_NAME_STR); - pub static ref SUBSCRIPTION_ID: DefaultContextKey = DefaultContextKey::new(SUBSCRIPTION_ID_STR); - pub static ref UNSTRUCTURED_METADATA: DefaultContextKey> = DefaultContextKey::new(PROCESS_NAME_STR); - pub static ref START_CASE_REGEX: DefaultContextKey = DefaultContextKey::new(START_CASE_REGEX_STR); - pub static ref END_CASE_REGEX: DefaultContextKey = DefaultContextKey::new(END_CASE_REGEX_STR); - pub static ref INLINE_INNER_CASES: DefaultContextKey = DefaultContextKey::new(INLINE_INNER_CASES_STR); - pub static ref GRAPH_TIME_ANNOTATION_KEY: DefaultContextKey> = DefaultContextKey::new(GRAPH_TIME_ANNOTATION); - pub static ref ATTRIBUTE_KEY: DefaultContextKey = DefaultContextKey::new(ATTRIBUTE); - pub static ref TIME_ANNOTATION_KIND_KEY: DefaultContextKey = DefaultContextKey::new(TIME_ANNOTATION_KIND); - pub static ref ATTRIBUTES_KEY: DefaultContextKey> = DefaultContextKey::new(ATTRIBUTES); - pub static ref PATHS_KEY: DefaultContextKey> = DefaultContextKey::new(PATHS); - pub static ref LOG_THREADS_DIAGRAM_KEY: DefaultContextKey = DefaultContextKey::new(LOG_THREADS_DIAGRAM); - pub static ref THREAD_ATTRIBUTE_KEY: DefaultContextKey = DefaultContextKey::new(THREAD_ATTRIBUTE); - pub static ref TIME_ATTRIBUTE_KEY: DefaultContextKey = DefaultContextKey::new(TIME_ATTRIBUTE); - pub static ref TIME_DELTA_KEY: DefaultContextKey = DefaultContextKey::new(TIME_DELTA); - pub static ref FEATURE_COUNT_KIND_KEY: DefaultContextKey = DefaultContextKey::new(FEATURE_COUNT_KIND); - pub static ref PERCENT_FROM_MAX_VALUE_KEY: DefaultContextKey = DefaultContextKey::new(PERCENT_FROM_MAX_VALUE); - pub static ref TOLERANCES_KEY: DefaultContextKey> = DefaultContextKey::new(TOLERANCES); - pub static ref MIN_POINTS_IN_CLUSTER_ARRAY_KEY: DefaultContextKey> = DefaultContextKey::new(MIN_POINTS_IN_CLUSTER_ARRAY); - pub static ref EXECUTION_ID_KEY: DefaultContextKey = DefaultContextKey::new(EXECUTION_ID); - pub static ref ROOT_SEQUENCE_KIND_KEY: DefaultContextKey = DefaultContextKey::new(ROOT_SEQUENCE_KIND); - pub static ref MERGE_SEQUENCES_OF_EVENTS_KEY: DefaultContextKey = DefaultContextKey::new(MERGE_SEQUENCES_OF_EVENTS); - pub static ref DISCOVER_EVENTS_GROUPS_IN_EACH_TRACE_KEY: DefaultContextKey = DefaultContextKey::new(DISCOVER_EVENTS_GROUPS_IN_EACH_TRACE); - pub static ref SOFTWARE_DATA_EXTRACTION_CONFIG_KEY: DefaultContextKey = DefaultContextKey::new(SOFTWARE_DATA_EXTRACTION_CONFIG); - pub static ref DISCOVER_ACTIVITY_INSTANCES_STRICT_KEY: DefaultContextKey = DefaultContextKey::new(DISCOVER_ACTIVITY_INSTANCES_STRICT); - pub static ref PUT_NOISE_EVENTS_IN_ONE_CLUSTER_KEY: DefaultContextKey = DefaultContextKey::new(PUT_NOISE_EVENTS_IN_ONE_CLUSTER); - pub static ref OCEL_ANNOTATION_KEY: DefaultContextKey = DefaultContextKey::new(OCEL_ANNOTATION); -); +context_key! { PETRI_NET, DefaultPetriNet } +context_key! { EVENT_LOG, XesEventLogImpl } +context_key! { ACTIVITIES, Vec>> } +context_key! { REPEAT_SETS, Vec } +context_key! { TRACE_ACTIVITIES, Vec> } +context_key! { PATTERNS, Vec> } +context_key! { ACTIVITIES_TO_LOGS, HashMap } +context_key! { ACTIVITY_NAME, String } +context_key! { HASHES_EVENT_LOG, Vec> } +context_key! { NAMES_EVENT_LOG, Vec> } +context_key! { TANDEM_ARRAY_LENGTH, u32 } +context_key! { ACTIVITY_LEVEL, u32 } +context_key! { NARROW_ACTIVITIES, ActivityNarrowingKind } +context_key! { EVENT_NAME, String } +context_key! { REGEX, String } +context_key! { COLORS_EVENT_LOG, ColorsEventLog } +context_key! { COLORS_HOLDER, ColorsHolder } +context_key! { PATTERNS_DISCOVERY_STRATEGY, PatternsDiscoveryStrategy } +context_key! { OUTPUT_STRING, String } +context_key! { EVENT_LOG_INFO, OfflineEventLogInfo } +context_key! { UNDERLYING_EVENTS_COUNT, usize } +context_key! { EVENTS_COUNT, u32 } +context_key! { REGEXES, Vec } +context_key! { ADJUSTING_MODE, AdjustingMode } +context_key! { EVENT_CLASS_REGEX, String } +context_key! { PATTERNS_KIND, PatternsKindDto } +context_key! { PIPELINE, Pipeline } +context_key! { MIN_ACTIVITY_LENGTH, u32 } +context_key! { UNDEF_ACTIVITY_HANDLING_STRATEGY, UndefActivityHandlingStrategyDto } +context_key! { ACTIVITY_IN_TRACE_FILTER_KIND, ActivityInTraceFilterKind } +context_key! { ACTIVITIES_LOGS_SOURCE, ActivitiesLogsSourceDto } +context_key! { PNML_USE_NAMES_AS_IDS, bool } +context_key! { GRAPH, DefaultGraph } +context_key! { GRAPHS, Vec } +context_key! { DEPENDENCY_THRESHOLD, f64 } +context_key! { POSITIVE_OBSERVATIONS_THRESHOLD, u32 } +context_key! { RELATIVE_TO_BEST_THRESHOLD, f64 } +context_key! { AND_THRESHOLD, f64 } +context_key! { LOOP_LENGTH_TWO_THRESHOLD, f64 } +context_key! { UNARY_FREQUENCY_THRESHOLD, f64 } +context_key! { BINARY_FREQUENCY_SIGNIFICANCE_THRESHOLD, f64 } +context_key! { PRESERVE_THRESHOLD, f64 } +context_key! { RATIO_THRESHOLD, f64 } +context_key! { UTILITY_RATE, f64 } +context_key! { EDGE_CUTOFF_THRESHOLD, f64 } +context_key! { NODE_CUTOFF_THRESHOLD, f64 } +context_key! { PETRI_NET_COUNT_ANNOTATION, HashMap } +context_key! { PETRI_NET_FREQUENCY_ANNOTATION, HashMap } +context_key! { PETRI_NET_TRACE_FREQUENCY_ANNOTATION, HashMap } +context_key! { TERMINATE_ON_UNREPLAYABLE_TRACES, bool } +context_key! { CLUSTERS_COUNT, u32 } +context_key! { LEARNING_ITERATIONS_COUNT, u32 } +context_key! { TOLERANCE, f64 } +context_key! { MIN_EVENTS_IN_CLUSTERS_COUNT, u32 } +context_key! { TRACES_ACTIVITIES_DATASET, FicusDataset } +context_key! { LABELED_TRACES_ACTIVITIES_DATASET, LabeledDataset } +context_key! { ACTIVITIES_REPR_SOURCE, ActivityRepresentationSource } +context_key! { DISTANCE, FicusDistance } +context_key! { EXECUTE_ONLY_ON_LAST_EXTRACTION, bool } +context_key! { EVENT_LOG_NAME, String } +context_key! { LOG_TRACES_DATASET, FicusDataset } +context_key! { LABELED_LOG_TRACES_DATASET, LabeledDataset } +context_key! { TRACES_REPR_SOURCE, TracesRepresentationSource } +context_key! { SYSTEM_METADATA, SystemMetadata } +context_key! { LOG_SERIALIZATION_FORMAT, LogSerializationFormat } +context_key! { BYTES, Vec } +context_key! { PATH, String } +context_key! { CASE_NAME, CaseName } +context_key! { PROCESS_NAME, String } +context_key! { PIPELINE_NAME, String } +context_key! { PIPELINE_ID, Uuid } +context_key! { SUBSCRIPTION_NAME, String } +context_key! { SUBSCRIPTION_ID, Uuid } +context_key! { UNSTRUCTURED_METADATA, Vec<(String, String)> } +context_key! { START_CASE_REGEX, String } +context_key! { END_CASE_REGEX, String } +context_key! { INLINE_INNER_CASES, bool } +context_key! { GRAPH_TIME_ANNOTATION, HashMap } +context_key! { ATTRIBUTE, String } +context_key! { TIME_ANNOTATION_KIND, TimeAnnotationKind } +context_key! { ATTRIBUTES, Vec } +context_key! { PATHS, Vec } +context_key! { LOG_THREADS_DIAGRAM, LogTimelineDiagram } +context_key! { THREAD_ATTRIBUTE, String } +context_key! { TIME_ATTRIBUTE, String } +context_key! { TIME_DELTA, u32 } +context_key! { FEATURE_COUNT_KIND, FeatureCountKindDto } +context_key! { PERCENT_FROM_MAX_VALUE, f64 } +context_key! { TOLERANCES, Vec } +context_key! { MIN_POINTS_IN_CLUSTER_ARRAY, Vec } +context_key! { EXECUTION_ID, Uuid } +context_key! { ROOT_SEQUENCE_KIND, RootSequenceKind } +context_key! { MERGE_SEQUENCES_OF_EVENTS, bool } +context_key! { DISCOVER_EVENTS_GROUPS_IN_EACH_TRACE, bool } +context_key! { SOFTWARE_DATA_EXTRACTION_CONFIG, SoftwareDataExtractionConfig } +context_key! { DISCOVER_ACTIVITY_INSTANCES_STRICT, bool } +context_key! { PUT_NOISE_EVENTS_IN_ONE_CLUSTER, bool } +context_key! { OCEL_ANNOTATION, OcelAnnotation } pub fn find_context_key(name: &str) -> Option<&dyn ContextKey> { match name { @@ -308,12 +315,12 @@ pub fn find_context_key(name: &str) -> Option<&dyn ContextKey> { EXECUTE_ONLY_ON_LAST_EXTRACTION => Some(EXECUTE_ONLY_ON_LAST_EXTRACTION_KEY.deref() as &dyn ContextKey), LABELED_LOG_TRACES_DATASET => Some(LABELED_LOG_TRACES_DATASET_KEY.deref() as &dyn ContextKey), LOG_TRACES_DATASET => Some(LOG_TRACES_DATASET_KEY.deref() as &dyn ContextKey), - TRACES_REPR_SOURCE => Some(TRACES_REPRESENTATION_SOURCE_KEY.deref() as &dyn ContextKey), + TRACES_REPR_SOURCE => Some(TRACES_REPR_SOURCE_KEY.deref() as &dyn ContextKey), SYSTEM_METADATA => Some(SYSTEM_METADATA_KEY.deref() as &dyn ContextKey), LOG_SERIALIZATION_FORMAT => Some(LOG_SERIALIZATION_FORMAT_KEY.deref() as &dyn ContextKey), - START_CASE_REGEX_STR => Some(START_CASE_REGEX.deref() as &dyn ContextKey), - END_CASE_REGEX_STR => Some(END_CASE_REGEX.deref() as &dyn ContextKey), - INLINE_INNER_CASES_STR => Some(INLINE_INNER_CASES.deref() as &dyn ContextKey), + START_CASE_REGEX => Some(START_CASE_REGEX_KEY.deref() as &dyn ContextKey), + END_CASE_REGEX => Some(END_CASE_REGEX_KEY.deref() as &dyn ContextKey), + INLINE_INNER_CASES => Some(INLINE_INNER_CASES_KEY.deref() as &dyn ContextKey), GRAPH_TIME_ANNOTATION => Some(GRAPH_TIME_ANNOTATION_KEY.deref() as &dyn ContextKey), ATTRIBUTE => Some(ATTRIBUTE_KEY.deref() as &dyn ContextKey), TIME_ANNOTATION_KIND => Some(TIME_ANNOTATION_KIND_KEY.deref() as &dyn ContextKey), diff --git a/Ficus/src/rust/ficus/src/pipelines/multithreading.rs b/Ficus/src/rust/ficus/src/pipelines/multithreading.rs index 39fbf6797..b04f3f045 100644 --- a/Ficus/src/rust/ficus/src/pipelines/multithreading.rs +++ b/Ficus/src/rust/ficus/src/pipelines/multithreading.rs @@ -1,37 +1,46 @@ -use crate::event_log::core::event::event::{Event, EventPayloadValue}; -use crate::event_log::core::event_log::EventLog; -use crate::event_log::core::trace::trace::Trace; -use crate::event_log::xes::xes_event::XesEventImpl; -use crate::event_log::xes::xes_event_log::XesEventLogImpl; -use crate::event_log::xes::xes_trace::XesTraceImpl; -use crate::features::analysis::log_info::event_log_info::create_threads_log_by_attribute; -use crate::features::clustering::traces::dbscan::clusterize_log_by_traces_dbscan; -use crate::features::discovery::multithreaded_dfg::dfg::{ - discover_multithreaded_dfg, enumerate_multithreaded_events_groups, MultithreadedTracePartsCreationStrategy, +use crate::{ + event_log::{ + core::{ + event::event::{Event, EventPayloadValue}, + event_log::EventLog, + trace::trace::Trace, + }, + xes::{xes_event::XesEventImpl, xes_event_log::XesEventLogImpl, xes_trace::XesTraceImpl}, + }, + features::{ + analysis::log_info::event_log_info::create_threads_log_by_attribute, + clustering::traces::dbscan::clusterize_log_by_traces_dbscan, + discovery::{ + multithreaded_dfg::dfg::{ + discover_multithreaded_dfg, enumerate_multithreaded_events_groups, MultithreadedTracePartsCreationStrategy, + }, + root_sequence::log_prepare::prepare_software_log, + timeline::{ + abstraction::abstract_event_groups, + discovery::{discover_timeline_diagram, discover_traces_timeline_diagram}, + events_groups::{enumerate_event_groups, EventGroup}, + software_data::extraction_config::{ExtractionConfig, MethodStartEndConfig, SoftwareDataExtractionConfig}, + }, + }, + }, + pipelines::{ + context::{PipelineContext, PipelineInfrastructure}, + errors::pipeline_errors::{PipelinePartExecutionError, RawPartExecutionError}, + keys::context_keys::{ + DISCOVER_EVENTS_GROUPS_IN_EACH_TRACE_KEY, EVENT_LOG_KEY, GRAPH_KEY, LABELED_LOG_TRACES_DATASET_KEY, LOG_THREADS_DIAGRAM_KEY, + MIN_EVENTS_IN_CLUSTERS_COUNT_KEY, PIPELINE_KEY, PUT_NOISE_EVENTS_IN_ONE_CLUSTER_KEY, REGEXES_KEY, + SOFTWARE_DATA_EXTRACTION_CONFIG_KEY, THREAD_ATTRIBUTE_KEY, TIME_ATTRIBUTE_KEY, TIME_DELTA_KEY, TOLERANCE_KEY, + }, + pipeline_parts::PipelineParts, + pipelines::{PipelinePart, PipelinePartFactory}, + }, + utils::{ + display_name::DISPLAY_NAME_KEY, + user_data::user_data::{UserData, UserDataImpl, UserDataOwner}, + }, }; -use crate::features::discovery::root_sequence::log_prepare::prepare_software_log; -use crate::features::discovery::timeline::abstraction::abstract_event_groups; -use crate::features::discovery::timeline::discovery::{discover_timeline_diagram, discover_traces_timeline_diagram}; -use crate::features::discovery::timeline::events_groups::{enumerate_event_groups, EventGroup}; -use crate::features::discovery::timeline::software_data::extraction_config::{ - ExtractionConfig, MethodStartEndConfig, SoftwareDataExtractionConfig, -}; -use crate::pipelines::context::{PipelineContext, PipelineInfrastructure}; -use crate::pipelines::errors::pipeline_errors::{PipelinePartExecutionError, RawPartExecutionError}; -use crate::pipelines::keys::context_keys::{ - DISCOVER_EVENTS_GROUPS_IN_EACH_TRACE_KEY, EVENT_LOG_KEY, GRAPH_KEY, LABELED_LOG_TRACES_DATASET_KEY, LOG_THREADS_DIAGRAM_KEY, - MIN_EVENTS_IN_CLUSTERS_COUNT_KEY, PIPELINE_KEY, PUT_NOISE_EVENTS_IN_ONE_CLUSTER_KEY, REGEXES_KEY, SOFTWARE_DATA_EXTRACTION_CONFIG_KEY, - THREAD_ATTRIBUTE_KEY, TIME_ATTRIBUTE_KEY, TIME_DELTA_KEY, TOLERANCE_KEY, -}; -use crate::pipelines::pipeline_parts::PipelineParts; -use crate::pipelines::pipelines::{PipelinePart, PipelinePartFactory}; -use crate::utils::display_name::DISPLAY_NAME_KEY; -use crate::utils::user_data::user_data::{UserData, UserDataImpl, UserDataOwner}; use fancy_regex::Regex; -use std::cell::RefCell; -use std::collections::HashMap; -use std::rc::Rc; -use std::str::FromStr; +use std::{cell::RefCell, collections::HashMap, rc::Rc, str::FromStr}; #[derive(Copy, Clone)] pub enum FeatureCountKindDto { @@ -253,7 +262,7 @@ impl PipelineParts { } pub(super) fn shorten_allocation_types() -> (String, PipelinePartFactory) { - Self::create_pipeline_part(Self::SHORTEN_ALLOCATION_TYPE, &|context, _, config| { + Self::create_pipeline_part(Self::SHORTEN_ALLOCATION_TYPE, &|context, _, _| { let log = Self::get_user_data_mut(context, &EVENT_LOG_KEY)?; let software_data_extraction_config = Self::get_software_data_extraction_config(context); if let Some(config) = software_data_extraction_config.allocation() { diff --git a/Ficus/src/rust/ficus/src/pipelines/mutations_parts.rs b/Ficus/src/rust/ficus/src/pipelines/mutations_parts.rs index 281479f4d..dcf2f34c7 100644 --- a/Ficus/src/rust/ficus/src/pipelines/mutations_parts.rs +++ b/Ficus/src/rust/ficus/src/pipelines/mutations_parts.rs @@ -1,10 +1,14 @@ -use crate::features::mutations::mutations::{add_artificial_start_end_activities, append_attributes_to_name}; -use crate::pipelines::context::PipelineContext; -use crate::pipelines::errors::pipeline_errors::PipelinePartExecutionError; -use crate::pipelines::keys::context_keys::{ATTRIBUTES_KEY, EVENT_LOG_KEY}; -use crate::pipelines::pipeline_parts::PipelineParts; -use crate::pipelines::pipelines::PipelinePartFactory; -use crate::utils::user_data::user_data::UserDataImpl; +use crate::{ + features::mutations::mutations::{add_artificial_start_end_activities, append_attributes_to_name}, + pipelines::{ + context::PipelineContext, + errors::pipeline_errors::PipelinePartExecutionError, + keys::context_keys::{ATTRIBUTES_KEY, EVENT_LOG_KEY}, + pipeline_parts::PipelineParts, + pipelines::PipelinePartFactory, + }, + utils::user_data::user_data::UserDataImpl, +}; impl PipelineParts { pub(super) fn add_artificial_start_end_events() -> (String, PipelinePartFactory) { diff --git a/Ficus/src/rust/ficus/src/pipelines/patterns_parts.rs b/Ficus/src/rust/ficus/src/pipelines/patterns_parts.rs index 52d82fac7..61e9b6e32 100644 --- a/Ficus/src/rust/ficus/src/pipelines/patterns_parts.rs +++ b/Ficus/src/rust/ficus/src/pipelines/patterns_parts.rs @@ -1,17 +1,19 @@ use super::{context::PipelineContext, errors::pipeline_errors::PipelinePartExecutionError, pipelines::PipelinePartFactory}; -use crate::features::analysis::patterns::pattern_info::{UnderlyingPatternKind, UNDERLYING_PATTERN_KIND_KEY}; -use crate::features::analysis::patterns::strict_loops::find_loops_strict; -use crate::pipelines::keys::context_keys::{ - ACTIVITY_LEVEL_KEY, EVENT_LOG_KEY, HASHES_EVENT_LOG_KEY, PATTERNS_DISCOVERY_STRATEGY_KEY, PATTERNS_KEY, PATTERNS_KIND_KEY, - TANDEM_ARRAY_LENGTH_KEY, TRACE_ACTIVITIES_KEY, -}; -use crate::pipelines::pipeline_parts::PipelineParts; use crate::{ features::analysis::patterns::{ contexts::PatternsDiscoveryStrategy, + pattern_info::{UnderlyingPatternKind, UNDERLYING_PATTERN_KIND_KEY}, repeats::{find_maximal_repeats, find_near_super_maximal_repeats, find_super_maximal_repeats}, + strict_loops::find_loops_strict, tandem_arrays::{find_maximal_tandem_arrays, find_primitive_tandem_arrays, SubArrayInTraceInfo}, }, + pipelines::{ + keys::context_keys::{ + ACTIVITY_LEVEL_KEY, EVENT_LOG_KEY, HASHES_EVENT_LOG_KEY, PATTERNS_DISCOVERY_STRATEGY_KEY, PATTERNS_KEY, PATTERNS_KIND_KEY, + TANDEM_ARRAY_LENGTH_KEY, TRACE_ACTIVITIES_KEY, + }, + pipeline_parts::PipelineParts, + }, utils::user_data::user_data::{UserData, UserDataImpl}, }; use std::str::FromStr; diff --git a/Ficus/src/rust/ficus/src/pipelines/pipeline_parts.rs b/Ficus/src/rust/ficus/src/pipelines/pipeline_parts.rs index efb979122..54ee16d9a 100644 --- a/Ficus/src/rust/ficus/src/pipelines/pipeline_parts.rs +++ b/Ficus/src/rust/ficus/src/pipelines/pipeline_parts.rs @@ -1,10 +1,18 @@ -use crate::pipelines::context::{PipelineContext, PipelineInfrastructure}; -use crate::pipelines::errors::pipeline_errors::{MissingContextError, PipelinePartExecutionError, RawPartExecutionError}; -use crate::pipelines::pipelines::{DefaultPipelinePart, PipelinePartFactory}; -use crate::utils::context_key::DefaultContextKey; -use crate::utils::performance::performance_cookie::performance_cookie; -use crate::utils::user_data::keys::Key; -use crate::utils::user_data::user_data::{UserData, UserDataImpl}; +use crate::{ + pipelines::{ + context::{PipelineContext, PipelineInfrastructure}, + errors::pipeline_errors::{MissingContextError, PipelinePartExecutionError, RawPartExecutionError}, + pipelines::{DefaultPipelinePart, PipelinePartFactory}, + }, + utils::{ + context_key::DefaultContextKey, + performance::performance_cookie::performance_cookie, + user_data::{ + keys::Key, + user_data::{UserData, UserDataImpl}, + }, + }, +}; use derive_new::new; use fancy_regex::Regex; use std::collections::HashMap; diff --git a/Ficus/src/rust/ficus/src/pipelines/pipelines.rs b/Ficus/src/rust/ficus/src/pipelines/pipelines.rs index 336ce5717..142fce32a 100644 --- a/Ficus/src/rust/ficus/src/pipelines/pipelines.rs +++ b/Ficus/src/rust/ficus/src/pipelines/pipelines.rs @@ -1,8 +1,9 @@ -use crate::pipelines::context::PipelineInfrastructure; -use crate::pipelines::keys::context_keys::COLORS_HOLDER_KEY; -use crate::utils::{ - colors::ColorsHolder, - user_data::user_data::{UserData, UserDataImpl}, +use crate::{ + pipelines::{context::PipelineInfrastructure, keys::context_keys::COLORS_HOLDER_KEY}, + utils::{ + colors::ColorsHolder, + user_data::user_data::{UserData, UserDataImpl}, + }, }; use super::{context::PipelineContext, errors::pipeline_errors::PipelinePartExecutionError}; diff --git a/Ficus/src/rust/ficus/src/pipelines/util_parts.rs b/Ficus/src/rust/ficus/src/pipelines/util_parts.rs index 64b74803d..14775813d 100644 --- a/Ficus/src/rust/ficus/src/pipelines/util_parts.rs +++ b/Ficus/src/rust/ficus/src/pipelines/util_parts.rs @@ -3,15 +3,6 @@ use std::{cell::RefCell, rc::Rc}; use chrono::{DateTime, Duration, Utc}; use super::pipelines::PipelinePartFactory; -use crate::features::analysis::log_info::event_log_info::OfflineEventLogInfo; -use crate::features::analysis::log_info::log_info_creation_dto::EventLogInfoCreationDto; -use crate::pipelines::errors::pipeline_errors::PipelinePartExecutionError; -use crate::pipelines::keys::context_keys::{ - EVENT_CLASS_REGEX_KEY, EVENT_LOG_INFO_KEY, EVENT_LOG_KEY, GRAPHS_KEY, GRAPH_KEY, HASHES_EVENT_LOG_KEY, NAMES_EVENT_LOG_KEY, PIPELINE_KEY, -}; -use crate::pipelines::pipeline_parts::PipelineParts; -use crate::pipelines::pipelines::PipelinePart; -use crate::utils::graph::graphs_merging::merge_graphs; use crate::{ event_log::{ core::{ @@ -24,7 +15,20 @@ use crate::{ }, xes::{xes_event::XesEventImpl, xes_event_log::XesEventLogImpl, xes_trace::XesTraceImpl}, }, - utils::user_data::user_data::{UserData, UserDataImpl}, + features::analysis::log_info::{event_log_info::OfflineEventLogInfo, log_info_creation_dto::EventLogInfoCreationDto}, + pipelines::{ + errors::pipeline_errors::PipelinePartExecutionError, + keys::context_keys::{ + EVENT_CLASS_REGEX_KEY, EVENT_LOG_INFO_KEY, EVENT_LOG_KEY, GRAPHS_KEY, GRAPH_KEY, HASHES_EVENT_LOG_KEY, NAMES_EVENT_LOG_KEY, + PIPELINE_KEY, + }, + pipeline_parts::PipelineParts, + pipelines::PipelinePart, + }, + utils::{ + graph::graphs_merging::merge_graphs, + user_data::user_data::{UserData, UserDataImpl}, + }, }; impl PipelineParts { diff --git a/Ficus/src/rust/ficus/src/pipelines/xes_parts.rs b/Ficus/src/rust/ficus/src/pipelines/xes_parts.rs index 1f067d9b6..c2fc34342 100644 --- a/Ficus/src/rust/ficus/src/pipelines/xes_parts.rs +++ b/Ficus/src/rust/ficus/src/pipelines/xes_parts.rs @@ -2,16 +2,23 @@ use super::{ errors::pipeline_errors::{PipelinePartExecutionError, RawPartExecutionError}, pipelines::PipelinePartFactory, }; -use crate::event_log::bxes::bxes_to_xes_converter::{read_bxes_into_xes_log, read_bxes_into_xes_log_from_bytes, BxesToXesConversionResult}; -use crate::event_log::bxes::xes_to_bxes_converter::{write_event_log_to_bxes, write_event_log_to_bxes_bytes}; -use crate::event_log::xes::logs_merger::merge_xes_logs; -use crate::event_log::xes::reader::file_xes_log_reader::read_event_log_from_bytes; -use crate::event_log::xes::writer::xes_event_log_writer::write_xes_log_to_bytes; -use crate::pipelines::context::PipelineContext; -use crate::pipelines::keys::context_keys::{BYTES_KEY, EVENT_LOG_KEY, PATHS_KEY, PATH_KEY, SYSTEM_METADATA_KEY}; -use crate::pipelines::pipeline_parts::PipelineParts; use crate::{ - event_log::xes::{reader::file_xes_log_reader::read_event_log, writer::xes_event_log_writer::write_xes_log}, + event_log::{ + bxes::{ + bxes_to_xes_converter::{read_bxes_into_xes_log, read_bxes_into_xes_log_from_bytes, BxesToXesConversionResult}, + xes_to_bxes_converter::{write_event_log_to_bxes, write_event_log_to_bxes_bytes}, + }, + xes::{ + logs_merger::merge_xes_logs, + reader::file_xes_log_reader::{read_event_log, read_event_log_from_bytes}, + writer::xes_event_log_writer::{write_xes_log, write_xes_log_to_bytes}, + }, + }, + pipelines::{ + context::PipelineContext, + keys::context_keys::{BYTES_KEY, EVENT_LOG_KEY, PATHS_KEY, PATH_KEY, SYSTEM_METADATA_KEY}, + pipeline_parts::PipelineParts, + }, utils::user_data::user_data::UserData, }; @@ -27,7 +34,7 @@ impl PipelineParts { } pub(super) fn read_log_from_xes() -> (String, PipelinePartFactory) { - Self::create_pipeline_part(Self::READ_LOG_FROM_XES, &|context, infra, _| { + Self::create_pipeline_part(Self::READ_LOG_FROM_XES, &|context, _, _| { let path = Self::get_user_data(context, &PATH_KEY)?; let log = read_event_log(path); @@ -80,7 +87,7 @@ impl PipelineParts { } pub(super) fn read_xes_from_bytes() -> (String, PipelinePartFactory) { - Self::create_pipeline_part(Self::READ_XES_LOG_FROM_BYTES, &|context, _, config| { + Self::create_pipeline_part(Self::READ_XES_LOG_FROM_BYTES, &|context, _, _| { let bytes = Self::get_user_data(context, &BYTES_KEY)?; match read_event_log_from_bytes(bytes) { Some(log) => { @@ -96,7 +103,7 @@ impl PipelineParts { } pub(super) fn read_bxes_from_bytes() -> (String, PipelinePartFactory) { - Self::create_pipeline_part(Self::READ_BXES_LOG_FROM_BYTES, &|context, _, config| { + Self::create_pipeline_part(Self::READ_BXES_LOG_FROM_BYTES, &|context, _, _| { let bytes = Self::get_user_data(context, &BYTES_KEY)?; match read_bxes_into_xes_log_from_bytes(bytes) { Ok(read_result) => { @@ -112,7 +119,7 @@ impl PipelineParts { } pub(super) fn write_bxes_to_bytes() -> (String, PipelinePartFactory) { - Self::create_pipeline_part(Self::WRITE_BXES_LOG_TO_BYTES, &|context, _, config| { + Self::create_pipeline_part(Self::WRITE_BXES_LOG_TO_BYTES, &|context, _, _| { let log = Self::get_user_data(context, &EVENT_LOG_KEY)?; let system_metadata = match Self::get_user_data(context, &SYSTEM_METADATA_KEY) { Ok(metadata) => Some(metadata), @@ -130,7 +137,7 @@ impl PipelineParts { } pub(super) fn write_xes_to_bytes() -> (String, PipelinePartFactory) { - Self::create_pipeline_part(Self::WRITE_XES_LOG_TO_BYTES, &|context, _, config| { + Self::create_pipeline_part(Self::WRITE_XES_LOG_TO_BYTES, &|context, _, _| { let log = Self::get_user_data(context, &EVENT_LOG_KEY)?; match write_xes_log_to_bytes(log) { Ok(bytes) => { @@ -143,7 +150,7 @@ impl PipelineParts { } pub(super) fn merge_xes_logs_from_paths() -> (String, PipelinePartFactory) { - Self::create_pipeline_part(Self::MERGE_XES_LOGS_FROM_PATHS, &|context, _, config| { + Self::create_pipeline_part(Self::MERGE_XES_LOGS_FROM_PATHS, &|context, _, _| { let paths = Self::get_user_data(context, &PATHS_KEY)?; let log = merge_xes_logs(paths); diff --git a/Ficus/src/rust/ficus/src/utils/colors.rs b/Ficus/src/rust/ficus/src/utils/colors.rs index 1769a9689..ead87d9f1 100644 --- a/Ficus/src/rust/ficus/src/utils/colors.rs +++ b/Ficus/src/rust/ficus/src/utils/colors.rs @@ -1,5 +1,7 @@ -use std::collections::{HashMap, HashSet}; -use std::ops::Deref; +use std::{ + collections::{HashMap, HashSet}, + ops::Deref, +}; use crate::utils::references::HeapedOrOwned; use rand::Rng; @@ -24,9 +26,9 @@ impl Color { let mut rng = rand::thread_rng(); loop { - let red = rng.gen::(); - let green = rng.gen::(); - let blue = rng.gen::(); + let red = rng.r#gen::(); + let green = rng.r#gen::(); + let blue = rng.r#gen::(); let color = Self::new(red, green, blue); if let Some(used_colors) = used { diff --git a/Ficus/src/rust/ficus/src/utils/display_name.rs b/Ficus/src/rust/ficus/src/utils/display_name.rs index d7014a80e..5244e1496 100644 --- a/Ficus/src/rust/ficus/src/utils/display_name.rs +++ b/Ficus/src/rust/ficus/src/utils/display_name.rs @@ -1,13 +1,15 @@ -use crate::event_log::core::event::event::Event; -use crate::event_log::xes::xes_event::XesEventImpl; -use crate::utils::context_key::DefaultContextKey; -use crate::utils::references::HeapedOrOwned; -use crate::utils::user_data::user_data::{UserData, UserDataOwner}; +use crate::{ + context_key, + event_log::{core::event::event::Event, xes::xes_event::XesEventImpl}, + utils::{ + references::HeapedOrOwned, + user_data::user_data::{UserData, UserDataOwner}, + }, +}; use lazy_static::lazy_static; -lazy_static! { - pub static ref DISPLAY_NAME_KEY: DefaultContextKey = DefaultContextKey::new("DISPLAY_NAME"); -} +const DISPLAY_NAME: &'static str = "DISPLAY_NAME"; +context_key! { DISPLAY_NAME, String } pub fn get_display_name(event: &XesEventImpl) -> HeapedOrOwned { match event.user_data().concrete(DISPLAY_NAME_KEY.key()) { diff --git a/Ficus/src/rust/ficus/src/utils/graph/graph.rs b/Ficus/src/rust/ficus/src/utils/graph/graph.rs index e76e12465..d6cfd9e2d 100644 --- a/Ficus/src/rust/ficus/src/utils/graph/graph.rs +++ b/Ficus/src/rust/ficus/src/utils/graph/graph.rs @@ -1,10 +1,10 @@ -use crate::utils::graph::graph_edge::GraphEdge; -use crate::utils::graph::graph_node::GraphNode; -use crate::utils::references::HeapedOrOwned; -use crate::utils::user_data::user_data::UserDataImpl; +use crate::utils::{ + graph::{graph_edge::GraphEdge, graph_node::GraphNode}, + references::HeapedOrOwned, + user_data::user_data::UserDataImpl, +}; use getset::{Getters, Setters}; -use std::fmt::Display; -use std::{collections::HashMap, sync::atomic::AtomicU64}; +use std::{collections::HashMap, fmt::Display, sync::atomic::AtomicU64}; pub(crate) static NEXT_ID: AtomicU64 = AtomicU64::new(0); pub type DefaultGraph = Graph, HeapedOrOwned>; diff --git a/Ficus/src/rust/ficus/src/utils/graph/graph_clusters.rs b/Ficus/src/rust/ficus/src/utils/graph/graph_clusters.rs index febd1c8fa..6a914dd59 100644 --- a/Ficus/src/rust/ficus/src/utils/graph/graph_clusters.rs +++ b/Ficus/src/rust/ficus/src/utils/graph/graph_clusters.rs @@ -1,7 +1,11 @@ -use crate::utils::graph::graph::{Graph, NodesConnectionData}; -use crate::utils::graph::graph_edge::GraphEdge; -use std::collections::{HashMap, HashSet}; -use std::fmt::Display; +use crate::utils::graph::{ + graph::{Graph, NodesConnectionData}, + graph_edge::GraphEdge, +}; +use std::{ + collections::{HashMap, HashSet}, + fmt::Display, +}; impl Graph where diff --git a/Ficus/src/rust/ficus/src/utils/graph/graph_conversions.rs b/Ficus/src/rust/ficus/src/utils/graph/graph_conversions.rs index 823d6561f..a8ed3e3ac 100644 --- a/Ficus/src/rust/ficus/src/utils/graph/graph_conversions.rs +++ b/Ficus/src/rust/ficus/src/utils/graph/graph_conversions.rs @@ -1,10 +1,13 @@ -use crate::utils::graph::graph::{DefaultGraph, Graph}; -use crate::utils::graph::graph_edge::GraphEdge; -use crate::utils::graph::graph_node::GraphNode; -use crate::utils::references::HeapedOrOwned; -use crate::utils::user_data::user_data::UserDataImpl; -use std::collections::HashMap; -use std::fmt::Display; +use crate::utils::{ + graph::{ + graph::{DefaultGraph, Graph}, + graph_edge::GraphEdge, + graph_node::GraphNode, + }, + references::HeapedOrOwned, + user_data::user_data::UserDataImpl, +}; +use std::{collections::HashMap, fmt::Display}; impl Graph where diff --git a/Ficus/src/rust/ficus/src/utils/graph/graph_edge.rs b/Ficus/src/rust/ficus/src/utils/graph/graph_edge.rs index e8bf2364e..6b28f2ac7 100644 --- a/Ficus/src/rust/ficus/src/utils/graph/graph_edge.rs +++ b/Ficus/src/rust/ficus/src/utils/graph/graph_edge.rs @@ -1,5 +1,4 @@ -use crate::utils::graph::graph::NEXT_ID; -use crate::utils::user_data::user_data::UserDataImpl; +use crate::utils::{graph::graph::NEXT_ID, user_data::user_data::UserDataImpl}; use getset::{Getters, MutGetters}; use std::sync::atomic::Ordering; diff --git a/Ficus/src/rust/ficus/src/utils/graph/graph_node.rs b/Ficus/src/rust/ficus/src/utils/graph/graph_node.rs index f88fa71e2..c02939671 100644 --- a/Ficus/src/rust/ficus/src/utils/graph/graph_node.rs +++ b/Ficus/src/rust/ficus/src/utils/graph/graph_node.rs @@ -1,5 +1,4 @@ -use crate::utils::graph::graph::NEXT_ID; -use crate::utils::user_data::user_data::UserDataImpl; +use crate::utils::{graph::graph::NEXT_ID, user_data::user_data::UserDataImpl}; use std::sync::atomic::Ordering; #[derive(Debug, Clone)] diff --git a/Ficus/src/rust/ficus/src/utils/graph/graphs_merging.rs b/Ficus/src/rust/ficus/src/utils/graph/graphs_merging.rs index df41fccfe..46d59032d 100644 --- a/Ficus/src/rust/ficus/src/utils/graph/graphs_merging.rs +++ b/Ficus/src/rust/ficus/src/utils/graph/graphs_merging.rs @@ -1,10 +1,13 @@ -use crate::utils::context_key::DefaultContextKey; -use crate::utils::graph::graph::{Graph, NodesConnectionData}; -use crate::utils::user_data::user_data::UserData; +use crate::{ + context_key, + utils::{ + graph::graph::{Graph, NodesConnectionData}, + user_data::user_data::UserData, + }, +}; use enum_display_derive::Display; use lazy_static::lazy_static; -use std::collections::HashMap; -use std::fmt::{Debug, Display}; +use std::{collections::HashMap, fmt::Display}; #[derive(Display)] pub enum GraphsMergingError { @@ -15,10 +18,8 @@ pub enum GraphsMergingError { const START_NODE_ID: &'static str = "START_NODE_ID"; const END_NODE_ID: &'static str = "END_NODE_ID"; -lazy_static! { - pub static ref START_NODE_ID_KEY: DefaultContextKey = DefaultContextKey::new(START_NODE_ID); - pub static ref END_NODE_ID_KEY: DefaultContextKey = DefaultContextKey::new(END_NODE_ID); -} +context_key! { START_NODE_ID, u64 } +context_key! { END_NODE_ID, u64 } pub fn merge_graphs( graphs: &Vec>, diff --git a/Ficus/src/rust/ficus/src/utils/hash_map_utils.rs b/Ficus/src/rust/ficus/src/utils/hash_map_utils.rs index 3650bb90e..432937a6c 100644 --- a/Ficus/src/rust/ficus/src/utils/hash_map_utils.rs +++ b/Ficus/src/rust/ficus/src/utils/hash_map_utils.rs @@ -1,6 +1,8 @@ use num_traits::Num; -use std::collections::{HashMap, HashSet}; -use std::hash::Hash; +use std::{ + collections::{HashMap, HashSet}, + hash::Hash, +}; pub fn increase_in_map(map: &mut HashMap, key: &TKey) where diff --git a/Ficus/src/rust/ficus/src/utils/hash_utils.rs b/Ficus/src/rust/ficus/src/utils/hash_utils.rs index 008095663..777b11f82 100644 --- a/Ficus/src/rust/ficus/src/utils/hash_utils.rs +++ b/Ficus/src/rust/ficus/src/utils/hash_utils.rs @@ -1,5 +1,7 @@ -use std::collections::hash_map::DefaultHasher; -use std::hash::{Hash, Hasher}; +use std::{ + collections::hash_map::DefaultHasher, + hash::{Hash, Hasher}, +}; const POW: u64 = 31; const MOD: u64 = 1e9 as u64 + 7; diff --git a/Ficus/src/rust/ficus/src/utils/interval_tree/interval_tree.rs b/Ficus/src/rust/ficus/src/utils/interval_tree/interval_tree.rs index 0be3f278d..cb501fff7 100644 --- a/Ficus/src/rust/ficus/src/utils/interval_tree/interval_tree.rs +++ b/Ficus/src/rust/ficus/src/utils/interval_tree/interval_tree.rs @@ -1,8 +1,9 @@ -use std::collections::{HashSet, VecDeque}; -use std::hash::Hash; +use std::{ + collections::{HashSet, VecDeque}, + hash::Hash, +}; -use super::interval::Interval; -use super::node::Node; +use super::{interval::Interval, node::Node}; pub struct IntervalTree where diff --git a/Ficus/src/rust/ficus/src/utils/references.rs b/Ficus/src/rust/ficus/src/utils/references.rs index 6867c8377..7b1f48e74 100644 --- a/Ficus/src/rust/ficus/src/utils/references.rs +++ b/Ficus/src/rust/ficus/src/utils/references.rs @@ -1,8 +1,10 @@ use serde::{Deserialize, Deserializer, Serialize, Serializer}; -use std::fmt::{Debug, Display, Formatter}; -use std::hash::{Hash, Hasher}; -use std::ops::Deref; -use std::rc::Rc; +use std::{ + fmt::{Debug, Display, Formatter}, + hash::{Hash, Hasher}, + ops::Deref, + rc::Rc, +}; pub enum ReferenceOrOwned<'a, T> { Ref(&'a T), diff --git a/Ficus/src/rust/ficus/src/utils/sets/one_set.rs b/Ficus/src/rust/ficus/src/utils/sets/one_set.rs index f72d120b8..1b9db170c 100644 --- a/Ficus/src/rust/ficus/src/utils/sets/one_set.rs +++ b/Ficus/src/rust/ficus/src/utils/sets/one_set.rs @@ -1,7 +1,9 @@ use crate::utils::hash_utils::compare_based_on_hashes; -use std::collections::BTreeSet; -use std::hash::{Hash, Hasher}; -use std::sync::atomic::{AtomicU64, Ordering}; +use std::{ + collections::BTreeSet, + hash::{Hash, Hasher}, + sync::atomic::{AtomicU64, Ordering}, +}; pub struct OneSet where diff --git a/Ficus/src/rust/ficus/src/utils/sets/two_sets.rs b/Ficus/src/rust/ficus/src/utils/sets/two_sets.rs index 21e4a2c64..4abd54249 100644 --- a/Ficus/src/rust/ficus/src/utils/sets/two_sets.rs +++ b/Ficus/src/rust/ficus/src/utils/sets/two_sets.rs @@ -1,6 +1,8 @@ use crate::utils::hash_utils::compare_based_on_hashes; -use std::collections::BTreeSet; -use std::hash::{Hash, Hasher}; +use std::{ + collections::BTreeSet, + hash::{Hash, Hasher}, +}; #[derive(Debug)] pub struct TwoSets @@ -115,7 +117,7 @@ where let mut repr = String::new(); repr.push('('); - let mut write_set = |set: &BTreeSet, repr: &mut String| { + let write_set = |set: &BTreeSet, repr: &mut String| { repr.push('{'); for item in set { repr.push_str(item.to_string().as_str()); diff --git a/Ficus/src/rust/ficus/src/utils/silhouette.rs b/Ficus/src/rust/ficus/src/utils/silhouette.rs index 891933345..7fbd8604c 100644 --- a/Ficus/src/rust/ficus/src/utils/silhouette.rs +++ b/Ficus/src/rust/ficus/src/utils/silhouette.rs @@ -1,5 +1,7 @@ -use std::collections::HashMap; -use std::fmt::{Display, Formatter}; +use std::{ + collections::HashMap, + fmt::{Display, Formatter}, +}; #[derive(PartialEq, Debug)] pub enum SilhouetteScoreError { diff --git a/Ficus/src/rust/ficus/src/utils/stream_queue.rs b/Ficus/src/rust/ficus/src/utils/stream_queue.rs index 7d1dcec7c..97d5d4846 100644 --- a/Ficus/src/rust/ficus/src/utils/stream_queue.rs +++ b/Ficus/src/rust/ficus/src/utils/stream_queue.rs @@ -1,9 +1,13 @@ use futures::Stream; -use std::collections::VecDeque; -use std::pin::Pin; -use std::sync::atomic::{AtomicBool, Ordering}; -use std::sync::{Arc, Mutex}; -use std::task::{Context, Poll}; +use std::{ + collections::VecDeque, + pin::Pin, + sync::{ + atomic::{AtomicBool, Ordering}, + Arc, Mutex, + }, + task::{Context, Poll}, +}; pub struct StreamQueue { is_active: AtomicBool, diff --git a/Ficus/src/rust/ficus/src/utils/suffix_tree/node.rs b/Ficus/src/rust/ficus/src/utils/suffix_tree/node.rs index b8e294e8e..2506134e5 100644 --- a/Ficus/src/rust/ficus/src/utils/suffix_tree/node.rs +++ b/Ficus/src/rust/ficus/src/utils/suffix_tree/node.rs @@ -1,5 +1,4 @@ -use std::collections::HashMap; -use std::hash::Hash; +use std::{collections::HashMap, hash::Hash}; pub struct Node where diff --git a/Ficus/src/rust/ficus/src/utils/suffix_tree/suffix_tree_patterns.rs b/Ficus/src/rust/ficus/src/utils/suffix_tree/suffix_tree_patterns.rs index 1a48bd036..c38e71d50 100644 --- a/Ficus/src/rust/ficus/src/utils/suffix_tree/suffix_tree_patterns.rs +++ b/Ficus/src/rust/ficus/src/utils/suffix_tree/suffix_tree_patterns.rs @@ -1,9 +1,6 @@ -use std::cell::RefCell; -use std::hash::Hash; -use std::rc::Rc; +use std::{cell::RefCell, hash::Hash, rc::Rc}; -use super::node::Node; -use super::suffix_tree_slice::SuffixTreeSlice; +use super::{node::Node, suffix_tree_slice::SuffixTreeSlice}; pub struct SuffixTree<'a, TElement> where diff --git a/Ficus/src/rust/ficus/src/utils/suffix_tree/suffix_tree_repeats.rs b/Ficus/src/rust/ficus/src/utils/suffix_tree/suffix_tree_repeats.rs index eb860ba7c..9aaf3654b 100644 --- a/Ficus/src/rust/ficus/src/utils/suffix_tree/suffix_tree_repeats.rs +++ b/Ficus/src/rust/ficus/src/utils/suffix_tree/suffix_tree_repeats.rs @@ -1,9 +1,8 @@ use crate::utils::hash_map_utils::{compare_maps_by_keys, increase_in_map_by}; use super::suffix_tree_patterns::SuffixTree; -use std::collections::VecDeque; use std::{ - collections::{HashMap, HashSet}, + collections::{HashMap, HashSet, VecDeque}, hash::Hash, }; diff --git a/Ficus/src/rust/ficus/src/utils/user_data/keys.rs b/Ficus/src/rust/ficus/src/utils/user_data/keys.rs index 9adf66321..058c3bff7 100644 --- a/Ficus/src/rust/ficus/src/utils/user_data/keys.rs +++ b/Ficus/src/rust/ficus/src/utils/user_data/keys.rs @@ -1,6 +1,5 @@ -use std::hash::Hash; use std::{ - hash::Hasher, + hash::{Hash, Hasher}, marker::PhantomData, sync::atomic::{AtomicU64, Ordering}, }; diff --git a/Ficus/src/rust/ficus/src/utils/xml_utils.rs b/Ficus/src/rust/ficus/src/utils/xml_utils.rs index b2b7783a4..c32d99805 100644 --- a/Ficus/src/rust/ficus/src/utils/xml_utils.rs +++ b/Ficus/src/rust/ficus/src/utils/xml_utils.rs @@ -1,11 +1,15 @@ -use std::cell::RefCell; -use std::error::Error; -use std::fmt::{Debug, Display}; -use std::io; -use std::string::FromUtf8Error; +use std::{ + cell::RefCell, + error::Error, + fmt::{Debug, Display}, + io, + string::FromUtf8Error, +}; -use quick_xml::events::{BytesEnd, BytesStart}; -use quick_xml::Writer; +use quick_xml::{ + events::{BytesEnd, BytesStart}, + Writer, +}; pub enum XmlWriteError { FromUt8Error(FromUtf8Error), diff --git a/Ficus/src/rust/ficus/tests/analysis/analysis_tests.rs b/Ficus/src/rust/ficus/tests/analysis/analysis_tests.rs index f88a47334..c0ff4dd6e 100644 --- a/Ficus/src/rust/ficus/tests/analysis/analysis_tests.rs +++ b/Ficus/src/rust/ficus/tests/analysis/analysis_tests.rs @@ -3,12 +3,16 @@ use std::collections::{HashMap, HashSet}; use crate::test_core::simple_events_logs_provider::{ create_log_from_filter_out_chaotic_events, create_log_from_filter_out_chaotic_events_with_noise, create_simple_event_log, }; -use ficus::features::analysis::log_info::event_log_info::EventLogInfo; -use ficus::features::analysis::log_info::event_log_info::OfflineEventLogInfo; -use ficus::features::analysis::log_info::log_info_creation_dto::EventLogInfoCreationDto; use ficus::features::analysis::{ - entropy::dfg_entropy::{calculate_default_dfg_entropy, calculate_laplace_dfg_entropy}, - entropy::{pos_entropy::calculate_pos_entropies, pos_entropy_fast::calculate_pos_entropies_fast}, + entropy::{ + dfg_entropy::{calculate_default_dfg_entropy, calculate_laplace_dfg_entropy}, + pos_entropy::calculate_pos_entropies, + pos_entropy_fast::calculate_pos_entropies_fast, + }, + log_info::{ + event_log_info::{EventLogInfo, OfflineEventLogInfo}, + log_info_creation_dto::EventLogInfoCreationDto, + }, }; #[test] diff --git a/Ficus/src/rust/ficus/tests/analysis/event_log_info_tests.rs b/Ficus/src/rust/ficus/tests/analysis/event_log_info_tests.rs index 077da5194..ddcd87727 100644 --- a/Ficus/src/rust/ficus/tests/analysis/event_log_info_tests.rs +++ b/Ficus/src/rust/ficus/tests/analysis/event_log_info_tests.rs @@ -1,6 +1,8 @@ use crate::test_core::simple_events_logs_provider::create_simple_event_log; -use ficus::features::analysis::log_info::event_log_info::{EventLogInfo, OfflineEventLogInfo}; -use ficus::features::analysis::log_info::log_info_creation_dto::EventLogInfoCreationDto; +use ficus::features::analysis::log_info::{ + event_log_info::{EventLogInfo, OfflineEventLogInfo}, + log_info_creation_dto::EventLogInfoCreationDto, +}; #[test] fn test_event_log_info() { diff --git a/Ficus/src/rust/ficus/tests/analysis/patterns/activities_instances_tests.rs b/Ficus/src/rust/ficus/tests/analysis/patterns/activities_instances_tests.rs index 475cea964..fc1484ba7 100644 --- a/Ficus/src/rust/ficus/tests/analysis/patterns/activities_instances_tests.rs +++ b/Ficus/src/rust/ficus/tests/analysis/patterns/activities_instances_tests.rs @@ -1,12 +1,17 @@ use crate::test_core::simple_events_logs_provider::{create_log_from_taxonomy_of_patterns, create_maximal_repeats_log}; -use ficus::event_log::core::event::event::Event; -use ficus::event_log::xes::xes_event::XesEventImpl; -use ficus::event_log::xes::xes_event_log::XesEventLogImpl; -use ficus::features::analysis::patterns::activity_instances::{ActivityInTraceFilterKind, ActivityNarrowingKind}; use ficus::{ - event_log::core::{event::event_hasher::default_class_extractor, event_log::EventLog}, + event_log::{ + core::{ + event::{event::Event, event_hasher::default_class_extractor}, + event_log::EventLog, + }, + xes::{xes_event::XesEventImpl, xes_event_log::XesEventLogImpl}, + }, features::analysis::patterns::{ - activity_instances::{create_activity_name, ActivityInTraceInfo, UndefActivityHandlingStrategy, UNDEF_ACTIVITY_NAME}, + activity_instances::{ + create_activity_name, ActivityInTraceFilterKind, ActivityInTraceInfo, ActivityNarrowingKind, UndefActivityHandlingStrategy, + UNDEF_ACTIVITY_NAME, + }, contexts::{ActivitiesDiscoveryContext, ActivitiesInstancesDiscoveryContext, PatternsDiscoveryContext, PatternsDiscoveryStrategy}, entry_points::{create_logs_for_activities, discover_activities_and_create_new_log, discover_activities_instances, PatternsKind}, }, diff --git a/Ficus/src/rust/ficus/tests/analysis/patterns/patterns_tests.rs b/Ficus/src/rust/ficus/tests/analysis/patterns/patterns_tests.rs index 908624ee8..b12c57ea4 100644 --- a/Ficus/src/rust/ficus/tests/analysis/patterns/patterns_tests.rs +++ b/Ficus/src/rust/ficus/tests/analysis/patterns/patterns_tests.rs @@ -4,12 +4,14 @@ use crate::test_core::simple_events_logs_provider::{ create_log_for_max_repeats2, create_log_from_taxonomy_of_patterns, create_maximal_repeats_log, create_no_tandem_array_log, create_one_tandem_array_log, create_single_trace_test_log1, create_single_trace_test_log2, }; -use ficus::event_log::xes::xes_event_log::XesEventLogImpl; use ficus::{ - event_log::core::{ - event::{event::Event, event_hasher::NameEventHasher}, - event_log::EventLog, - trace::trace::Trace, + event_log::{ + core::{ + event::{event::Event, event_hasher::NameEventHasher}, + event_log::EventLog, + trace::trace::Trace, + }, + xes::xes_event_log::XesEventLogImpl, }, features::analysis::patterns::{ contexts::PatternsDiscoveryStrategy, diff --git a/Ficus/src/rust/ficus/tests/analysis/patterns/repeat_sets_tests.rs b/Ficus/src/rust/ficus/tests/analysis/patterns/repeat_sets_tests.rs index 93c0e197a..f1cc364d0 100644 --- a/Ficus/src/rust/ficus/tests/analysis/patterns/repeat_sets_tests.rs +++ b/Ficus/src/rust/ficus/tests/analysis/patterns/repeat_sets_tests.rs @@ -1,10 +1,9 @@ use std::{cell::RefCell, ops::Deref, rc::Rc}; -use ficus::features::analysis::patterns::activity_instances::{ActivityInTraceFilterKind, ActivityNarrowingKind}; use ficus::{ event_log::core::event::event_hasher::default_class_extractor, features::analysis::patterns::{ - activity_instances::create_activity_name, + activity_instances::{create_activity_name, ActivityInTraceFilterKind, ActivityNarrowingKind}, contexts::{ActivitiesDiscoveryContext, PatternsDiscoveryContext, PatternsDiscoveryStrategy}, entry_points::{build_repeat_set_tree, find_repeats, PatternsKind}, repeat_sets::{ActivityNode, SubArrayWithTraceIndex}, diff --git a/Ficus/src/rust/ficus/tests/annotations/annotation_tests.rs b/Ficus/src/rust/ficus/tests/annotations/annotation_tests.rs index 7f9112d2e..213f05226 100644 --- a/Ficus/src/rust/ficus/tests/annotations/annotation_tests.rs +++ b/Ficus/src/rust/ficus/tests/annotations/annotation_tests.rs @@ -1,18 +1,25 @@ use crate::test_core::simple_events_logs_provider::{create_event_log_with_simple_real_time, create_simple_event_log}; -use ficus::event_log::xes::xes_event_log::XesEventLogImpl; -use ficus::features::analysis::directly_follows_graph::construct_dfg; -use ficus::features::analysis::log_info::event_log_info::OfflineEventLogInfo; -use ficus::features::analysis::log_info::log_info_creation_dto::EventLogInfoCreationDto; -use ficus::features::discovery::alpha::alpha::discover_petri_net_alpha; -use ficus::features::discovery::alpha::providers::alpha_provider::DefaultAlphaRelationsProvider; -use ficus::features::discovery::petri_net::annotations::{ - annotate_with_counts, annotate_with_frequencies, annotate_with_time_performance, annotate_with_trace_frequency, TimeAnnotationKind, +use ficus::{ + event_log::xes::xes_event_log::XesEventLogImpl, + features::{ + analysis::{ + directly_follows_graph::construct_dfg, + log_info::{event_log_info::OfflineEventLogInfo, log_info_creation_dto::EventLogInfoCreationDto}, + }, + discovery::{ + alpha::{alpha::discover_petri_net_alpha, providers::alpha_provider::DefaultAlphaRelationsProvider}, + petri_net::{ + annotations::{ + annotate_with_counts, annotate_with_frequencies, annotate_with_time_performance, annotate_with_trace_frequency, + TimeAnnotationKind, + }, + petri_net::DefaultPetriNet, + }, + }, + }, + utils::graph::graph::DefaultGraph, }; -use ficus::features::discovery::petri_net::petri_net::DefaultPetriNet; -use ficus::utils::graph::graph::DefaultGraph; -use std::collections::HashMap; -use std::fmt::Debug; -use std::ops::Deref; +use std::{collections::HashMap, fmt::Debug, ops::Deref}; #[test] pub fn test_simple_count_annotation() { diff --git a/Ficus/src/rust/ficus/tests/cases/test_cases_discovery.rs b/Ficus/src/rust/ficus/tests/cases/test_cases_discovery.rs index debe3a680..4e7db65c3 100644 --- a/Ficus/src/rust/ficus/tests/cases/test_cases_discovery.rs +++ b/Ficus/src/rust/ficus/tests/cases/test_cases_discovery.rs @@ -1,6 +1,5 @@ use crate::test_core::simple_events_logs_provider::create_cases_discovery_test_log; -use ficus::event_log::core::event_log::EventLog; -use ficus::features::cases::cases_discovery::discover_cases; +use ficus::{event_log::core::event_log::EventLog, features::cases::cases_discovery::discover_cases}; #[test] fn test_simple_cases_discovery() { diff --git a/Ficus/src/rust/ficus/tests/clustering/silhouette_score_tests.rs b/Ficus/src/rust/ficus/tests/clustering/silhouette_score_tests.rs index 6277dd5b1..73a6fb0ae 100644 --- a/Ficus/src/rust/ficus/tests/clustering/silhouette_score_tests.rs +++ b/Ficus/src/rust/ficus/tests/clustering/silhouette_score_tests.rs @@ -1,13 +1,14 @@ use approx::assert_abs_diff_eq; -use ficus::features::clustering::traces::common::calculate_distance; -use ficus::utils::distance::distance::{DistanceWrapper, FicusDistance}; -use ficus::utils::silhouette::{silhouette_score, SilhouetteScoreError}; -use linfa::metrics::SilhouetteScore; -use linfa::prelude::Transformer; -use linfa::DatasetBase; +use ficus::{ + features::clustering::traces::common::calculate_distance, + utils::{ + distance::distance::{DistanceWrapper, FicusDistance}, + silhouette::{silhouette_score, SilhouetteScoreError}, + }, +}; +use linfa::{metrics::SilhouetteScore, prelude::Transformer, DatasetBase}; use linfa_clustering::Dbscan; -use linfa_nn::distance::L2Dist; -use linfa_nn::CommonNearestNeighbour::KdTree; +use linfa_nn::{distance::L2Dist, CommonNearestNeighbour::KdTree}; use ndarray::{Array1, Array2}; #[test] @@ -31,7 +32,7 @@ pub fn test_silhouette_score() { pub fn test_single_label() { let labels = vec![0; 123]; assert_eq!( - silhouette_score(&labels, |first, second| 0.).err().unwrap(), + silhouette_score(&labels, |_, _| 0.).err().unwrap(), SilhouetteScoreError::InappropriateLabelsCount ) } @@ -40,14 +41,14 @@ pub fn test_single_label() { pub fn test_all_different_labels() { let labels = (0..123).into_iter().collect(); assert_eq!( - silhouette_score(&labels, |first, second| 0.).err().unwrap(), + silhouette_score(&labels, |_, _| 0.).err().unwrap(), SilhouetteScoreError::InappropriateLabelsCount ) } #[test] pub fn test_silhouette_score_empty_labels() { - let result = silhouette_score(&vec![], |first, second| 0.); + let result = silhouette_score(&vec![], |_, _| 0.); assert_eq!(result.err().unwrap(), SilhouetteScoreError::NotEnoughSamples) } diff --git a/Ficus/src/rust/ficus/tests/discovery/alpha_nfc_plus_plus_tests.rs b/Ficus/src/rust/ficus/tests/discovery/alpha_nfc_plus_plus_tests.rs index 246f64bfa..42842bb74 100644 --- a/Ficus/src/rust/ficus/tests/discovery/alpha_nfc_plus_plus_tests.rs +++ b/Ficus/src/rust/ficus/tests/discovery/alpha_nfc_plus_plus_tests.rs @@ -1,9 +1,12 @@ use crate::test_core::{ gold_based_test::execute_test_with_gold, simple_events_logs_provider::*, test_paths::get_serialized_petri_nets_gold_path, }; -use ficus::event_log::xes::xes_event_log::XesEventLogImpl; -use ficus::features::discovery::{ - alpha::alpha_plus_plus_nfc::alpha_plus_plus_nfc::discover_petri_net_alpha_plus_plus_nfc, petri_net::pnml_serialization::serialize_to_pnml, +use ficus::{ + event_log::xes::xes_event_log::XesEventLogImpl, + features::discovery::{ + alpha::alpha_plus_plus_nfc::alpha_plus_plus_nfc::discover_petri_net_alpha_plus_plus_nfc, + petri_net::pnml_serialization::serialize_to_pnml, + }, }; #[test] diff --git a/Ficus/src/rust/ficus/tests/discovery/alpha_tests.rs b/Ficus/src/rust/ficus/tests/discovery/alpha_tests.rs index 3ef8bacf3..986c81c94 100644 --- a/Ficus/src/rust/ficus/tests/discovery/alpha_tests.rs +++ b/Ficus/src/rust/ficus/tests/discovery/alpha_tests.rs @@ -1,12 +1,18 @@ -use crate::test_core::gold_based_test::execute_test_with_gold; -use crate::test_core::simple_events_logs_provider::{create_simple_event_log, create_simple_event_log2, create_simple_event_log3}; -use crate::test_core::test_paths::get_serialized_petri_nets_gold_path; -use ficus::event_log::xes::xes_event_log::XesEventLogImpl; -use ficus::features::analysis::log_info::event_log_info::OfflineEventLogInfo; -use ficus::features::analysis::log_info::log_info_creation_dto::EventLogInfoCreationDto; -use ficus::features::discovery::alpha::alpha::discover_petri_net_alpha; -use ficus::features::discovery::alpha::providers::alpha_provider::DefaultAlphaRelationsProvider; -use ficus::features::discovery::petri_net::pnml_serialization::serialize_to_pnml; +use crate::test_core::{ + gold_based_test::execute_test_with_gold, + simple_events_logs_provider::{create_simple_event_log, create_simple_event_log2, create_simple_event_log3}, + test_paths::get_serialized_petri_nets_gold_path, +}; +use ficus::{ + event_log::xes::xes_event_log::XesEventLogImpl, + features::{ + analysis::log_info::{event_log_info::OfflineEventLogInfo, log_info_creation_dto::EventLogInfoCreationDto}, + discovery::{ + alpha::{alpha::discover_petri_net_alpha, providers::alpha_provider::DefaultAlphaRelationsProvider}, + petri_net::pnml_serialization::serialize_to_pnml, + }, + }, +}; #[test] pub fn alpha_simple_test_1() { diff --git a/Ficus/src/rust/ficus/tests/discovery/heuristic_miner_tests.rs b/Ficus/src/rust/ficus/tests/discovery/heuristic_miner_tests.rs index 0ad67a279..8c24ab624 100644 --- a/Ficus/src/rust/ficus/tests/discovery/heuristic_miner_tests.rs +++ b/Ficus/src/rust/ficus/tests/discovery/heuristic_miner_tests.rs @@ -1,12 +1,15 @@ use crate::test_core::{ gold_based_test::execute_test_with_gold, simple_events_logs_provider::*, test_paths::get_serialized_petri_nets_gold_path, }; -use ficus::event_log::xes::xes_event_log::XesEventLogImpl; -use ficus::features::analysis::log_info::event_log_info::OfflineEventLogInfo; -use ficus::features::analysis::log_info::log_info_creation_dto::EventLogInfoCreationDto; -use ficus::features::discovery::relations::triangle_relation::OfflineTriangleRelation; -use ficus::features::discovery::{ - heuristic::heuristic_miner::discover_petri_net_heuristic, petri_net::pnml_serialization::serialize_to_pnml, +use ficus::{ + event_log::xes::xes_event_log::XesEventLogImpl, + features::{ + analysis::log_info::{event_log_info::OfflineEventLogInfo, log_info_creation_dto::EventLogInfoCreationDto}, + discovery::{ + heuristic::heuristic_miner::discover_petri_net_heuristic, petri_net::pnml_serialization::serialize_to_pnml, + relations::triangle_relation::OfflineTriangleRelation, + }, + }, }; #[test] diff --git a/Ficus/src/rust/ficus/tests/discovery/multithreaded_dfg_tests.rs b/Ficus/src/rust/ficus/tests/discovery/multithreaded_dfg_tests.rs index b6177d207..d48e64830 100644 --- a/Ficus/src/rust/ficus/tests/discovery/multithreaded_dfg_tests.rs +++ b/Ficus/src/rust/ficus/tests/discovery/multithreaded_dfg_tests.rs @@ -1,12 +1,15 @@ -use ficus::event_log::core::event::event::{Event, EventPayloadValue}; -use ficus::event_log::core::event_log::EventLog; -use ficus::event_log::core::trace::trace::Trace; -use ficus::event_log::xes::xes_event::XesEventImpl; -use ficus::event_log::xes::xes_event_log::XesEventLogImpl; -use ficus::event_log::xes::xes_trace::XesTraceImpl; -use ficus::features::discovery::multithreaded_dfg::dfg::{discover_multithreaded_dfg, MultithreadedTracePartsCreationStrategy}; -use std::cell::RefCell; -use std::rc::Rc; +use ficus::{ + event_log::{ + core::{ + event::event::{Event, EventPayloadValue}, + event_log::EventLog, + trace::trace::Trace, + }, + xes::{xes_event::XesEventImpl, xes_event_log::XesEventLogImpl, xes_trace::XesTraceImpl}, + }, + features::discovery::multithreaded_dfg::dfg::{discover_multithreaded_dfg, MultithreadedTracePartsCreationStrategy}, +}; +use std::{cell::RefCell, rc::Rc}; const TEST_THREAD_ID_ATTRIBUTE: &'static str = "TestThreadId"; diff --git a/Ficus/src/rust/ficus/tests/discovery/root_sequence_discovery.rs b/Ficus/src/rust/ficus/tests/discovery/root_sequence_discovery.rs index b4501a579..34d0c6ff0 100644 --- a/Ficus/src/rust/ficus/tests/discovery/root_sequence_discovery.rs +++ b/Ficus/src/rust/ficus/tests/discovery/root_sequence_discovery.rs @@ -1,10 +1,13 @@ -use ficus::features::discovery::root_sequence::context::DiscoveryContext; -use ficus::features::discovery::root_sequence::discovery::discover_root_sequence_graph; -use ficus::features::discovery::root_sequence::models::{EventWithUniqueId, RootSequenceKind}; -use ficus::features::discovery::root_sequence::root_sequence::discover_root_sequence; -use ficus::utils::references::HeapedOrOwned; -use ficus::utils::user_data::user_data::UserDataImpl; -use ficus::vecs; +use ficus::{ + features::discovery::root_sequence::{ + context::DiscoveryContext, + discovery::discover_root_sequence_graph, + models::{EventWithUniqueId, RootSequenceKind}, + root_sequence::discover_root_sequence, + }, + utils::{references::HeapedOrOwned, user_data::user_data::UserDataImpl}, + vecs, +}; use termgraph::{Config, DirectedGraph, ValueFormatter}; #[test] diff --git a/Ficus/src/rust/ficus/tests/mutations/mutations_tests.rs b/Ficus/src/rust/ficus/tests/mutations/mutations_tests.rs index 121c9288e..e7000a8ff 100644 --- a/Ficus/src/rust/ficus/tests/mutations/mutations_tests.rs +++ b/Ficus/src/rust/ficus/tests/mutations/mutations_tests.rs @@ -2,20 +2,17 @@ use crate::test_core::simple_events_logs_provider::{ create_raw_event_log2, create_simple_event_log, create_simple_event_log2, create_simple_event_log3, }; use chrono::{DateTime, Utc}; -use ficus::event_log::core::trace::trace::Trace; -use ficus::event_log::xes::xes_event_log::XesEventLogImpl; -use ficus::event_log::xes::xes_trace::XesTraceImpl; -use ficus::features::mutations::mutations::{add_artificial_start_end_activities, ARTIFICIAL_END_EVENT_NAME, ARTIFICIAL_START_EVENT_NAME}; use ficus::{ - event_log::core::{event::event::Event, event_log::EventLog}, + event_log::{ + core::{event::event::Event, event_log::EventLog, trace::trace::Trace}, + xes::{xes_event_log::XesEventLogImpl, xes_trace::XesTraceImpl}, + }, features::mutations::{ filtering::{filter_log_by_name, filter_log_by_names}, - mutations::rename_events, + mutations::{add_artificial_start_end_activities, rename_events, ARTIFICIAL_END_EVENT_NAME, ARTIFICIAL_START_EVENT_NAME}, }, }; -use std::cell::RefCell; -use std::rc::Rc; -use std::{collections::HashSet, vec}; +use std::{cell::RefCell, collections::HashSet, rc::Rc, vec}; #[test] fn test_removing_events() { diff --git a/Ficus/src/rust/ficus/tests/other/split_tests.rs b/Ficus/src/rust/ficus/tests/other/split_tests.rs index 0960b8a60..259226387 100644 --- a/Ficus/src/rust/ficus/tests/other/split_tests.rs +++ b/Ficus/src/rust/ficus/tests/other/split_tests.rs @@ -1,8 +1,10 @@ use std::{cell::RefCell, rc::Rc}; use crate::test_core::simple_events_logs_provider::{create_simple_event_log, create_simple_event_log2}; -use ficus::event_log::xes::xes_trace::XesTraceImpl; -use ficus::{event_log::core::trace::trace::Trace, features::mutations::split::split_by_traces}; +use ficus::{ + event_log::{core::trace::trace::Trace, xes::xes_trace::XesTraceImpl}, + features::mutations::split::split_by_traces, +}; #[test] fn test_split_log() { diff --git a/Ficus/src/rust/ficus/tests/other/test_simple_event_log.rs b/Ficus/src/rust/ficus/tests/other/test_simple_event_log.rs index bb9d18ff9..d98967ddd 100644 --- a/Ficus/src/rust/ficus/tests/other/test_simple_event_log.rs +++ b/Ficus/src/rust/ficus/tests/other/test_simple_event_log.rs @@ -1,9 +1,10 @@ use crate::test_core::simple_events_logs_provider::{create_raw_event_log, create_simple_event_log}; use chrono::Utc; use core::fmt::Debug; -use ficus::event_log::core::{event::event::Event, event_log::EventLog, trace::trace::Trace}; -use ficus::event_log::xes::xes_event::XesEventImpl; -use ficus::event_log::xes::xes_event_log::XesEventLogImpl; +use ficus::event_log::{ + core::{event::event::Event, event_log::EventLog, trace::trace::Trace}, + xes::{xes_event::XesEventImpl, xes_event_log::XesEventLogImpl}, +}; #[test] fn test_simple_event_log_creation() { diff --git a/Ficus/src/rust/ficus/tests/other/xes_read_write_tests.rs b/Ficus/src/rust/ficus/tests/other/xes_read_write_tests.rs index 3846b756f..bccd07989 100644 --- a/Ficus/src/rust/ficus/tests/other/xes_read_write_tests.rs +++ b/Ficus/src/rust/ficus/tests/other/xes_read_write_tests.rs @@ -1,8 +1,9 @@ -use ficus::event_log::xes::reader::file_xes_log_reader::read_event_log; -use ficus::event_log::xes::writer::xes_event_log_writer::serialize_event_log; +use ficus::event_log::xes::{reader::file_xes_log_reader::read_event_log, writer::xes_event_log_writer::serialize_event_log}; -use crate::test_core::gold_based_test::execute_test_with_gold; -use crate::test_core::test_paths::{create_example_log_gold_file_path, get_paths_to_example_logs}; +use crate::test_core::{ + gold_based_test::execute_test_with_gold, + test_paths::{create_example_log_gold_file_path, get_paths_to_example_logs}, +}; #[test] fn test_read_write_xes() { diff --git a/Ficus/src/rust/ficus/tests/petri_nets/petri_net_tests.rs b/Ficus/src/rust/ficus/tests/petri_nets/petri_net_tests.rs index f3c814223..47113b5ab 100644 --- a/Ficus/src/rust/ficus/tests/petri_nets/petri_net_tests.rs +++ b/Ficus/src/rust/ficus/tests/petri_nets/petri_net_tests.rs @@ -1,11 +1,14 @@ -use crate::test_core::gold_based_test::execute_test_with_gold; -use crate::test_core::simple_events_logs_provider::create_simple_event_log3; -use crate::test_core::test_paths::get_serialized_petri_nets_gold_path; -use ficus::features::analysis::log_info::event_log_info::OfflineEventLogInfo; -use ficus::features::analysis::log_info::log_info_creation_dto::EventLogInfoCreationDto; -use ficus::features::discovery::alpha::alpha::discover_petri_net_alpha; -use ficus::features::discovery::alpha::providers::alpha_provider::DefaultAlphaRelationsProvider; -use ficus::features::discovery::petri_net::pnml_serialization::serialize_to_pnml; +use crate::test_core::{ + gold_based_test::execute_test_with_gold, simple_events_logs_provider::create_simple_event_log3, + test_paths::get_serialized_petri_nets_gold_path, +}; +use ficus::features::{ + analysis::log_info::{event_log_info::OfflineEventLogInfo, log_info_creation_dto::EventLogInfoCreationDto}, + discovery::{ + alpha::{alpha::discover_petri_net_alpha, providers::alpha_provider::DefaultAlphaRelationsProvider}, + petri_net::pnml_serialization::serialize_to_pnml, + }, +}; #[test] #[rustfmt::skip] diff --git a/Ficus/src/rust/ficus/tests/petri_nets/replay_tests.rs b/Ficus/src/rust/ficus/tests/petri_nets/replay_tests.rs index 288ed403c..3910318c2 100644 --- a/Ficus/src/rust/ficus/tests/petri_nets/replay_tests.rs +++ b/Ficus/src/rust/ficus/tests/petri_nets/replay_tests.rs @@ -1,18 +1,22 @@ use crate::test_core::simple_events_logs_provider::{ create_alpha_plus_miner_replay_test_log, create_heuristic_miner_replay_test_log, create_simple_event_log, }; -use ficus::event_log::core::event_log::EventLog; -use ficus::features::analysis::log_info::event_log_info::OfflineEventLogInfo; -use ficus::features::analysis::log_info::log_info_creation_dto::EventLogInfoCreationDto; -use ficus::features::discovery::alpha::alpha::{discover_petri_net_alpha, discover_petri_net_alpha_plus, find_transitions_one_length_loop}; -use ficus::features::discovery::alpha::providers::alpha_plus_provider::AlphaPlusRelationsProviderImpl; -use ficus::features::discovery::alpha::providers::alpha_provider::DefaultAlphaRelationsProvider; -use ficus::features::discovery::heuristic::heuristic_miner::discover_petri_net_heuristic; -use ficus::features::discovery::petri_net::marking::ensure_initial_marking; -use ficus::features::discovery::petri_net::petri_net::DefaultPetriNet; -use ficus::features::discovery::petri_net::replay::replay_petri_net; -use ficus::features::discovery::relations::triangle_relation::OfflineTriangleRelation; -use ficus::vecs; +use ficus::{ + event_log::core::event_log::EventLog, + features::{ + analysis::log_info::{event_log_info::OfflineEventLogInfo, log_info_creation_dto::EventLogInfoCreationDto}, + discovery::{ + alpha::{ + alpha::{discover_petri_net_alpha, discover_petri_net_alpha_plus, find_transitions_one_length_loop}, + providers::{alpha_plus_provider::AlphaPlusRelationsProviderImpl, alpha_provider::DefaultAlphaRelationsProvider}, + }, + heuristic::heuristic_miner::discover_petri_net_heuristic, + petri_net::{marking::ensure_initial_marking, petri_net::DefaultPetriNet, replay::replay_petri_net}, + relations::triangle_relation::OfflineTriangleRelation, + }, + }, + vecs, +}; #[test] pub fn test_simple_replay() { diff --git a/Ficus/src/rust/ficus/tests/pipelines/pipeline_keys_tests.rs b/Ficus/src/rust/ficus/tests/pipelines/pipeline_keys_tests.rs index 714454c30..2e71c51f7 100644 --- a/Ficus/src/rust/ficus/tests/pipelines/pipeline_keys_tests.rs +++ b/Ficus/src/rust/ficus/tests/pipelines/pipeline_keys_tests.rs @@ -1,33 +1,42 @@ -use std::collections::HashMap; -use std::collections::HashSet; +use std::collections::{HashMap, HashSet}; use bxes::models::system_models::SystemMetadata; -use ficus::features::analysis::log_info::event_log_info::OfflineEventLogInfo; -use ficus::features::analysis::patterns::activity_instances::{ActivityInTraceFilterKind, ActivityNarrowingKind}; -use ficus::features::clustering::activities::activities_params::ActivityRepresentationSource; -use ficus::features::clustering::traces::traces_params::{FeatureCountKind, TracesRepresentationSource}; -use ficus::features::discovery::ocel::graph_annotation::OcelAnnotationCreationError; -use ficus::features::discovery::petri_net::annotations::TimeAnnotationKind; -use ficus::features::discovery::petri_net::petri_net::DefaultPetriNet; -use ficus::features::discovery::root_sequence::models::RootSequenceKind; -use ficus::features::discovery::timeline::discovery::LogTimelineDiagram; -use ficus::pipelines::activities_parts::{ActivitiesLogsSourceDto, UndefActivityHandlingStrategyDto}; -use ficus::pipelines::keys::context_keys::*; -use ficus::pipelines::patterns_parts::PatternsKindDto; -use ficus::utils::colors::ColorsEventLog; -use ficus::utils::dataset::dataset::{FicusDataset, LabeledDataset}; -use ficus::utils::distance::distance::FicusDistance; -use ficus::utils::graph::graph::DefaultGraph; -use ficus::utils::log_serialization_format::LogSerializationFormat; use ficus::{ event_log::xes::xes_event_log::XesEventLogImpl, - features::analysis::patterns::{activity_instances::AdjustingMode, contexts::PatternsDiscoveryStrategy}, + features::{ + analysis::{ + log_info::event_log_info::OfflineEventLogInfo, + patterns::{ + activity_instances::{ActivityInTraceFilterKind, ActivityNarrowingKind, AdjustingMode}, + contexts::PatternsDiscoveryStrategy, + }, + }, + clustering::{ + activities::activities_params::ActivityRepresentationSource, + traces::traces_params::{FeatureCountKind, TracesRepresentationSource}, + }, + discovery::{ + ocel::graph_annotation::OcelAnnotationCreationError, + petri_net::{annotations::TimeAnnotationKind, petri_net::DefaultPetriNet}, + root_sequence::models::RootSequenceKind, + timeline::discovery::LogTimelineDiagram, + }, + }, pipelines::{ + activities_parts::{ActivitiesLogsSourceDto, UndefActivityHandlingStrategyDto}, aliases::{Activities, ActivitiesToLogs, Patterns, RepeatSets, TracesActivities}, + keys::context_keys::*, + patterns_parts::PatternsKindDto, pipelines::Pipeline, }, - utils::colors::ColorsHolder, + utils::{ + colors::{ColorsEventLog, ColorsHolder}, + dataset::dataset::{FicusDataset, LabeledDataset}, + distance::distance::FicusDistance, + graph::graph::DefaultGraph, + log_serialization_format::LogSerializationFormat, + }, vecs, }; @@ -69,9 +78,9 @@ fn test_event_log_all_concrete_keys() { assert_existence::(&UTILITY_RATE, &mut used); assert_existence::(&EDGE_CUTOFF_THRESHOLD, &mut used); assert_existence::(&NODE_CUTOFF_THRESHOLD, &mut used); - assert_existence::(&START_CASE_REGEX_STR, &mut used); - assert_existence::(&END_CASE_REGEX_STR, &mut used); - assert_existence::(&INLINE_INNER_CASES_STR, &mut used); + assert_existence::(&START_CASE_REGEX, &mut used); + assert_existence::(&END_CASE_REGEX, &mut used); + assert_existence::(&INLINE_INNER_CASES, &mut used); assert_existence::(&EVENT_LOG, &mut used); assert_existence::(&ACTIVITIES, &mut used); @@ -283,9 +292,9 @@ fn test_equivalence_of_keys() { assert_keys_equivalence::(&UTILITY_RATE, &mut used); assert_keys_equivalence::(&EDGE_CUTOFF_THRESHOLD, &mut used); assert_keys_equivalence::(&NODE_CUTOFF_THRESHOLD, &mut used); - assert_keys_equivalence::(&START_CASE_REGEX_STR, &mut used); - assert_keys_equivalence::(&END_CASE_REGEX_STR, &mut used); - assert_keys_equivalence::(&INLINE_INNER_CASES_STR, &mut used); + assert_keys_equivalence::(&START_CASE_REGEX, &mut used); + assert_keys_equivalence::(&END_CASE_REGEX, &mut used); + assert_keys_equivalence::(&INLINE_INNER_CASES, &mut used); assert_keys_equivalence::(&EVENT_LOG, &mut used); assert_keys_equivalence::(&ACTIVITIES, &mut used); diff --git a/Ficus/src/rust/ficus/tests/pipelines/pipeline_parts_tests.rs b/Ficus/src/rust/ficus/tests/pipelines/pipeline_parts_tests.rs index 753d529f3..d40c2c432 100644 --- a/Ficus/src/rust/ficus/tests/pipelines/pipeline_parts_tests.rs +++ b/Ficus/src/rust/ficus/tests/pipelines/pipeline_parts_tests.rs @@ -1,5 +1,4 @@ -use ficus::pipelines::pipeline_parts::PipelineParts; -use ficus::vecs; +use ficus::{pipelines::pipeline_parts::PipelineParts, vecs}; fn get_test_parts_names() -> Vec { vecs![ diff --git a/Ficus/src/rust/ficus/tests/software_data/extractors_tests.rs b/Ficus/src/rust/ficus/tests/software_data/extractors_tests.rs index d3a8cd54b..64d8010e6 100644 --- a/Ficus/src/rust/ficus/tests/software_data/extractors_tests.rs +++ b/Ficus/src/rust/ficus/tests/software_data/extractors_tests.rs @@ -1,23 +1,28 @@ use chrono::Utc; -use ficus::event_log::core::event::event::EventPayloadValue; -use ficus::event_log::xes::xes_event::XesEventImpl; -use ficus::features::discovery::timeline::events_groups::EventGroup; -use ficus::features::discovery::timeline::software_data::extraction_config::{ - ActivityDurationExtractionConfig, ExtractionConfig, GenericExtractionConfigBase, NameCreationStrategy, OcelAllocateMergeExtractionConfig, - OcelConsumeProduceExtractionConfig, OcelObjectExtractionConfigBase, OcelUnitedExtractionConfig, PieChartExtractionConfig, - SimpleCountExtractionConfig, SingleAttribute, SoftwareDataExtractionConfig, TimeAttributeConfig, TimeKind, -}; -use ficus::features::discovery::timeline::software_data::extractors::activities_durations::ActivityDurationExtractor; -use ficus::features::discovery::timeline::software_data::extractors::core::{ - EventGroupSoftwareDataExtractor, EventGroupTraceSoftwareDataExtractor, +use ficus::{ + event_log::{core::event::event::EventPayloadValue, xes::xes_event::XesEventImpl}, + features::discovery::timeline::{ + events_groups::EventGroup, + software_data::{ + extraction_config::{ + ActivityDurationExtractionConfig, ExtractionConfig, GenericExtractionConfigBase, NameCreationStrategy, + OcelAllocateMergeExtractionConfig, OcelConsumeProduceExtractionConfig, OcelObjectExtractionConfigBase, OcelUnitedExtractionConfig, + PieChartExtractionConfig, SimpleCountExtractionConfig, SingleAttribute, SoftwareDataExtractionConfig, TimeAttributeConfig, + TimeKind, + }, + extractors::{ + activities_durations::ActivityDurationExtractor, + core::{EventGroupSoftwareDataExtractor, EventGroupTraceSoftwareDataExtractor}, + ocel::OcelDataExtractor, + pie_charts::PieChartExtractor, + simple_counter::SimpleCounterExtractor, + }, + models::SoftwareData, + }, + }, + utils::references::heaped, }; -use ficus::features::discovery::timeline::software_data::extractors::ocel::OcelDataExtractor; -use ficus::features::discovery::timeline::software_data::extractors::pie_charts::PieChartExtractor; -use ficus::features::discovery::timeline::software_data::extractors::simple_counter::SimpleCounterExtractor; -use ficus::features::discovery::timeline::software_data::models::{OcelProducedObjectAfterConsume, SoftwareData}; -use ficus::utils::references::heaped; -use std::cell::RefCell; -use std::rc::Rc; +use std::{cell::RefCell, rc::Rc}; #[test] fn test_general_histogram() { diff --git a/Ficus/src/rust/ficus/tests/streaming/lossy_count_tests.rs b/Ficus/src/rust/ficus/tests/streaming/lossy_count_tests.rs index bd5096f87..8b126eb69 100644 --- a/Ficus/src/rust/ficus/tests/streaming/lossy_count_tests.rs +++ b/Ficus/src/rust/ficus/tests/streaming/lossy_count_tests.rs @@ -1,7 +1,8 @@ -use ficus::features::streaming::counters::core::{StreamingCounter, ValueUpdateKind}; -use ficus::features::streaming::counters::lossy_count::LossyCount; -use std::fmt::Debug; -use std::hash::Hash; +use ficus::features::streaming::counters::{ + core::{StreamingCounter, ValueUpdateKind}, + lossy_count::LossyCount, +}; +use std::{fmt::Debug, hash::Hash}; #[test] pub fn lossy_count_test_1() { diff --git a/Ficus/src/rust/ficus/tests/streaming/sliding_window_test.rs b/Ficus/src/rust/ficus/tests/streaming/sliding_window_test.rs index 16b61c364..ab4c4d20a 100644 --- a/Ficus/src/rust/ficus/tests/streaming/sliding_window_test.rs +++ b/Ficus/src/rust/ficus/tests/streaming/sliding_window_test.rs @@ -1,8 +1,12 @@ use chrono::Utc; -use ficus::features::streaming::counters::core::{StreamingCounter, ValueUpdateKind}; -use ficus::features::streaming::counters::sliding_window::SlidingWindow; -use std::ops::{Add, Sub}; -use std::time::Duration; +use ficus::features::streaming::counters::{ + core::{StreamingCounter, ValueUpdateKind}, + sliding_window::SlidingWindow, +}; +use std::{ + ops::{Add, Sub}, + time::Duration, +}; #[test] pub fn test_timed_window() { diff --git a/Ficus/src/rust/ficus/tests/streaming/t1_filterers_test.rs b/Ficus/src/rust/ficus/tests/streaming/t1_filterers_test.rs index dcdf7365a..89ba874bc 100644 --- a/Ficus/src/rust/ficus/tests/streaming/t1_filterers_test.rs +++ b/Ficus/src/rust/ficus/tests/streaming/t1_filterers_test.rs @@ -1,10 +1,13 @@ use crate::test_core::simple_events_logs_provider::{annotate_log_with_real_time, create_simple_event_log2}; use chrono::{Duration, Utc}; -use ficus::event_log::core::event_log::EventLog; -use ficus::event_log::xes::xes_event_log::XesEventLogImpl; -use ficus::grpc::kafka::streaming::t1::configs::{EventsTimeoutConfiguration, TracesQueueConfiguration, TracesTimeoutConfiguration}; -use ficus::grpc::kafka::streaming::t1::filterers::{EventsTimeoutFiltererImpl, TracesQueueFiltererImpl, TracesTimeoutFiltererImpl}; -use ficus::vecs; +use ficus::{ + event_log::{core::event_log::EventLog, xes::xes_event_log::XesEventLogImpl}, + grpc::kafka::streaming::t1::{ + configs::{EventsTimeoutConfiguration, TracesQueueConfiguration, TracesTimeoutConfiguration}, + filterers::{EventsTimeoutFiltererImpl, TracesQueueFiltererImpl, TracesTimeoutFiltererImpl}, + }, + vecs, +}; use std::ops::Sub; #[test] diff --git a/Ficus/src/rust/ficus/tests/suffix_tree/suffix_tree_tests.rs b/Ficus/src/rust/ficus/tests/suffix_tree/suffix_tree_tests.rs index dd0f63617..62da7a43e 100644 --- a/Ficus/src/rust/ficus/tests/suffix_tree/suffix_tree_tests.rs +++ b/Ficus/src/rust/ficus/tests/suffix_tree/suffix_tree_tests.rs @@ -8,12 +8,11 @@ use ficus::{ vecs, }; -use crate::test_core::simple_events_logs_provider::create_long_repeats_trace; use crate::test_core::{ gold_based_test::execute_test_with_gold, simple_events_logs_provider::{ - create_max_repeats_trace_1, create_max_repeats_trace_2, create_max_repeats_trace_3, create_max_repeats_trace_4, - create_max_repeats_trace_5, + create_long_repeats_trace, create_max_repeats_trace_1, create_max_repeats_trace_2, create_max_repeats_trace_3, + create_max_repeats_trace_4, create_max_repeats_trace_5, }, test_paths::{create_suffix_tree_gold_file_path, get_paths_to_suffix_tree_string}, }; diff --git a/Ficus/src/rust/ficus/tests/test_core/gold_based_test.rs b/Ficus/src/rust/ficus/tests/test_core/gold_based_test.rs index 2dd3aa320..a5d310118 100644 --- a/Ficus/src/rust/ficus/tests/test_core/gold_based_test.rs +++ b/Ficus/src/rust/ficus/tests/test_core/gold_based_test.rs @@ -1,5 +1,4 @@ -use std::fs; -use std::path::PathBuf; +use std::{fs, path::PathBuf}; pub fn execute_test_with_gold(gold_file_path: PathBuf, test_func: T) where diff --git a/Ficus/src/rust/ficus/tests/test_core/simple_events_logs_provider.rs b/Ficus/src/rust/ficus/tests/test_core/simple_events_logs_provider.rs index 903cc477d..d93b3c396 100644 --- a/Ficus/src/rust/ficus/tests/test_core/simple_events_logs_provider.rs +++ b/Ficus/src/rust/ficus/tests/test_core/simple_events_logs_provider.rs @@ -1,11 +1,10 @@ use chrono::{DateTime, Duration, Utc}; -use ficus::event_log::core::event::event::Event; -use ficus::event_log::core::event_log::EventLog; -use ficus::event_log::core::trace::trace::Trace; -use ficus::event_log::xes::xes_event_log::XesEventLogImpl; +use ficus::event_log::{ + core::{event::event::Event, event_log::EventLog, trace::trace::Trace}, + xes::xes_event_log::XesEventLogImpl, +}; use rand::Rng; -use std::iter; -use std::ops::Add; +use std::{iter, ops::Add}; pub fn create_raw_event_log() -> Vec> { vec![vec!["A", "B", "C"], vec!["A", "B", "C"]] diff --git a/Ficus/src/rust/ficus_backend/Cargo.toml b/Ficus/src/rust/ficus_backend/Cargo.toml index 45249e952..0dae96b41 100644 --- a/Ficus/src/rust/ficus_backend/Cargo.toml +++ b/Ficus/src/rust/ficus_backend/Cargo.toml @@ -5,8 +5,8 @@ edition = "2021" [dependencies] ficus = { path = "../ficus" } -tokio = "1.39.3" +tokio = "1.49.0" tonic = "0.9.2" -colog = "1.3.0" -log = "0.4.25" +colog = "1.4.0" +log = "0.4.29" diff --git a/Ficus/src/rust/ficus_backend/src/main.rs b/Ficus/src/rust/ficus_backend/src/main.rs index 7c8d937fb..39ba5c94b 100644 --- a/Ficus/src/rust/ficus_backend/src/main.rs +++ b/Ficus/src/rust/ficus_backend/src/main.rs @@ -4,7 +4,7 @@ use ficus::grpc::context_values_service::{ContextValueService, GrpcContextValueS use ficus::grpc::kafka::grpc_kafka_service::GrpcKafkaServiceImpl; use ficus::{ficus_proto::grpc_backend_service_server::GrpcBackendServiceServer, grpc::backend_service::FicusService}; use log::{info, LevelFilter}; -use std::sync::{Arc, Mutex}; +use std::sync::Arc; use tonic::transport::Server; #[tokio::main] diff --git a/Ficus/src/rust/rustfmt.toml b/Ficus/src/rust/rustfmt.toml index 7dad0cc64..3e523a1f4 100644 --- a/Ficus/src/rust/rustfmt.toml +++ b/Ficus/src/rust/rustfmt.toml @@ -1,2 +1,3 @@ max_width = 140 -tab_spaces = 2 \ No newline at end of file +tab_spaces = 2 +imports_granularity = "Crate" \ No newline at end of file diff --git a/Procfiler/src/dotnet/Core/Utils/ProgramMethodCallTreeDumper.cs b/Procfiler/src/dotnet/Core/Utils/ProgramMethodCallTreeDumper.cs index 9a6cfea09..925bb830c 100644 --- a/Procfiler/src/dotnet/Core/Utils/ProgramMethodCallTreeDumper.cs +++ b/Procfiler/src/dotnet/Core/Utils/ProgramMethodCallTreeDumper.cs @@ -7,10 +7,17 @@ namespace Core.Utils; public static class ProgramMethodCallTreeDumper { + public enum DumpEventKind + { + Start, + End, + Execution + } + public static string CreateDump( IEnumerable events, string? pattern, - Func methodInfoExtractor) + Func methodInfoExtractor) { var sb = new StringBuilder(); var regex = pattern is { } ? new Regex(pattern) : null; @@ -19,10 +26,10 @@ public static string CreateDump( foreach (var eventRecord in events) { - if (methodInfoExtractor(eventRecord) is var (frame, isStart) && + if (methodInfoExtractor(eventRecord) is var (frame, kind) && (regex is null || regex.IsMatch(frame))) { - if (isStart) ++currentIndent; + if (kind is DumpEventKind.Start) ++currentIndent; if (currentIndent < 0) Debug.Fail("currentIndent < 0"); @@ -33,9 +40,17 @@ public static string CreateDump( const string Start = "[start] "; const string End = "[ end ] "; - sb.Append(isStart ? Start : End).Append(frame).AppendNewLine(); + const string Execution = "[exec]"; + + sb.Append(kind switch + { + DumpEventKind.Start => Start, + DumpEventKind.End => End, + DumpEventKind.Execution => Execution, + _ => throw new ArgumentOutOfRangeException() + }).Append(frame).AppendNewLine(); - if (!isStart) --currentIndent; + if (kind is DumpEventKind.End) --currentIndent; } } diff --git a/Procfiler/src/dotnet/OnlineProcfilerTests/Tests/OnlineProcfilerMethodsTest.cs b/Procfiler/src/dotnet/OnlineProcfilerTests/Tests/OnlineProcfilerMethodsTest.cs index dfc42f69d..c38c40bca 100644 --- a/Procfiler/src/dotnet/OnlineProcfilerTests/Tests/OnlineProcfilerMethodsTest.cs +++ b/Procfiler/src/dotnet/OnlineProcfilerTests/Tests/OnlineProcfilerMethodsTest.cs @@ -45,7 +45,12 @@ public static string SerializeToGold( return null; }, trace => ProgramMethodCallTreeDumper.CreateDump(trace, filter.ToString(), e => e.TryGetMethodDetails() switch { - var (_, id) => (sharedData.FindMethodDetails(id)!.Fqn, e.GetMethodEventKind() == MethodKind.Begin), + var (_, id) => (sharedData.FindMethodDetails(id)!.Fqn, e.GetMethodEventKind() switch + { + MethodKind.Begin => ProgramMethodCallTreeDumper.DumpEventKind.Start, + MethodKind.End => ProgramMethodCallTreeDumper.DumpEventKind.End, + _ => throw new ArgumentOutOfRangeException() + }), _ => null })); } diff --git a/Procfiler/src/dotnet/Procfiler/src/Core/EventRecord/EventRecordExtensions.cs b/Procfiler/src/dotnet/Procfiler/src/Core/EventRecord/EventRecordExtensions.cs index 33b06f60c..48e3ceefd 100644 --- a/Procfiler/src/dotnet/Procfiler/src/Core/EventRecord/EventRecordExtensions.cs +++ b/Procfiler/src/dotnet/Procfiler/src/Core/EventRecord/EventRecordExtensions.cs @@ -16,17 +16,28 @@ public bool IsMethodStartOrEndEvent() => public MethodStartEndEventInfo GetMethodStartEndEventInfo() => eventRecord.TryGetMethodStartEndEventInfo() ?? throw new ArgumentOutOfRangeException(); + public string GetMethodNameOrThrow() => eventRecord.Metadata[TraceEventsConstants.ProcfilerMethodName]; + public MethodStartEndEventInfo? TryGetMethodStartEndEventInfo() { - if (IsMethodStartOrEndEvent(eventRecord)) + if (eventRecord.IsMethodStartOrEndEvent()) { return new MethodStartEndEventInfo( - eventRecord.Metadata[TraceEventsConstants.ProcfilerMethodName], + eventRecord.GetMethodNameOrThrow(), eventRecord.EventClass is TraceEventsConstants.ProcfilerMethodStart ); } return null; } + + public bool IsMethodExecutionEvent(out string? methodName) + { + methodName = null; + if (eventRecord.EventClass is not TraceEventsConstants.ProcfilerMethodExecution) return false; + + methodName = eventRecord.GetMethodNameOrThrow(); + return true; + } } } \ No newline at end of file diff --git a/Procfiler/src/dotnet/Procfiler/src/Core/EventRecord/IProcfilerEventsFactory.cs b/Procfiler/src/dotnet/Procfiler/src/Core/EventRecord/IProcfilerEventsFactory.cs index a5fb568d3..8c0ab22e2 100644 --- a/Procfiler/src/dotnet/Procfiler/src/Core/EventRecord/IProcfilerEventsFactory.cs +++ b/Procfiler/src/dotnet/Procfiler/src/Core/EventRecord/IProcfilerEventsFactory.cs @@ -87,8 +87,14 @@ public EventRecordWithMetadata CreateMethodExecutionEvent(EventsCreationContext { var (stamp, managedThreadId, nativeThreadId) = context; var metadata = CreateMethodEventMetadata(methodName); - var name = CreateEventNameForMethodExecutionEvent(methodName); - return new EventRecordWithMetadata(stamp, name, managedThreadId, nativeThreadId, -1, metadata); + + const string EventClass = TraceEventsConstants.ProcfilerMethodExecution; + var @event = new EventRecordWithMetadata(stamp, EventClass, managedThreadId, nativeThreadId, -1, metadata) + { + EventName = CreateEventNameForMethodExecutionEvent(methodName) + }; + + return @event; } private string CreateEventNameForMethodExecutionEvent(string fqn) => diff --git a/Procfiler/src/dotnet/Procfiler/src/Core/SplitByMethod/CallbackBasedSplitter.cs b/Procfiler/src/dotnet/Procfiler/src/Core/SplitByMethod/CallbackBasedSplitter.cs index df534e153..2684c0c8b 100644 --- a/Procfiler/src/dotnet/Procfiler/src/Core/SplitByMethod/CallbackBasedSplitter.cs +++ b/Procfiler/src/dotnet/Procfiler/src/Core/SplitByMethod/CallbackBasedSplitter.cs @@ -114,7 +114,7 @@ private void ProcessEndOfMethod(string frame, EventRecordWithMetadata methodEndE (topOfStack, states) = myFramesStack.Peek(); foreach (var (serializer, state) in serializers.Zip(states)) { - serializer.HandleUpdate(new MethodExecutionUpdate(new CurrentFrameInfoWithState(topOfStack, state), topOfStack.Frame)); + serializer.HandleUpdate(new MethodExecutionUpdate(new CurrentFrameInfoWithState(topOfStack, state), frame)); } } diff --git a/Procfiler/src/dotnet/ProcfilerLoggerProvider/OcelLogger.cs b/Procfiler/src/dotnet/ProcfilerLoggerProvider/OcelLogger.cs index 02e791d13..c027d96f9 100644 --- a/Procfiler/src/dotnet/ProcfilerLoggerProvider/OcelLogger.cs +++ b/Procfiler/src/dotnet/ProcfilerLoggerProvider/OcelLogger.cs @@ -37,67 +37,89 @@ public void Dispose() } - public static void LogObjectAllocated(T obj) where T : class + public static long? LogObjectAllocated(T obj) where T : class { - if (!IsEnabled()) return; + if (!IsEnabled()) return null; + + var id = GetObjectId(obj); + OcelEventsSource.Instance.OcelObjectAllocated(id, GetObjectType(obj), string.Empty); - OcelEventsSource.Instance.OcelObjectAllocated(GetObjectId(obj), GetObjectType(obj), string.Empty); + return id; } - public static void LogObjectAllocatedRaw(in OcelObjectDto dto) + public static long? LogObjectAllocatedRaw(in OcelObjectDto dto) { - if (!IsEnabled()) return; + if (!IsEnabled()) return null; OcelEventsSource.Instance.OcelObjectAllocated(dto.Id, dto.Type, string.Empty); + + return dto.Id; } - public static void LogObjectConsumed(T obj, string? category = null) + public static long? LogObjectConsumed(T obj, string? category = null) { - if (!IsEnabled()) return; + if (!IsEnabled()) return null; - OcelEventsSource.Instance.OcelObjectConsumed(GetObjectId(obj), category, string.Empty); + var id = GetObjectId(obj); + OcelEventsSource.Instance.OcelObjectConsumed(id, category, string.Empty); + + return id; } - public static void LogObjectConsumedRaw(in OcelObjectDto dto) + public static long? LogObjectConsumedRaw(in OcelObjectDto dto) { - if (!IsEnabled()) return; + if (!IsEnabled()) return null; OcelEventsSource.Instance.OcelObjectConsumed(dto.Id, dto.Type, string.Empty); + + return dto.Id; } - public static void LogConsumeProduceRaw(long objectId, params OcelObjectDto[] relatedObjectIds) + public static long? LogConsumeProduceRaw(long objectId, params OcelObjectDto[] relatedObjectIds) { - if (!IsEnabled()) return; + if (!IsEnabled()) return null; var relatedIds = JoinObjectsIds(relatedObjectIds.Select(o => o.Id)); var relatedTypes = JoinObjectTypes(relatedObjectIds.Select(o => o.Type)); OcelEventsSource.Instance.OcelConsumeProduce(objectId, relatedIds, relatedTypes, string.Empty); + + return objectId; } - public static void LogConsumeProduce(T obj, params T[] relatedObjects) + public static long? LogConsumeProduce(T obj, params T[] relatedObjects) { - if (!IsEnabled()) return; + if (!IsEnabled()) return null; var relatedObjectIds = JoinObjectsIds(relatedObjects.Select(GetObjectId)); var relatedObjectTypes = JoinObjectTypes(relatedObjectIds.Select(GetObjectType)); - OcelEventsSource.Instance.OcelConsumeProduce(GetObjectId(obj), relatedObjectIds, relatedObjectTypes, string.Empty); + var id = GetObjectId(obj); + OcelEventsSource.Instance.OcelConsumeProduce(id, relatedObjectIds, relatedObjectTypes, string.Empty); + + return id; } - public static void LogMergeAllocateRaw(OcelObjectDto allocatedObject, params long[] relatedObjectIds) + public static long? LogMergeAllocateRaw(OcelObjectDto allocatedObject, params long[] relatedObjectIds) { - if (!IsEnabled()) return; + if (!IsEnabled()) return null; - OcelEventsSource.Instance.OcelMergeAllocate(allocatedObject.Id, allocatedObject.Type, JoinObjectsIds(relatedObjectIds), string.Empty); + OcelEventsSource.Instance.OcelMergeAllocate( + allocatedObject.Id, allocatedObject.Type, JoinObjectsIds(relatedObjectIds), string.Empty); + + return allocatedObject.Id; } - public static void LogMergeAllocate(T obj, params T[] relatedObjects) + public static long? LogMergeAllocate(T obj, params T[] relatedObjects) { - if (!IsEnabled()) return; + if (!IsEnabled()) return null; var relatedObjectIds = JoinObjectsIds(relatedObjects.Select(GetObjectId)); - OcelEventsSource.Instance.OcelMergeAllocate(GetObjectId(obj), GetObjectType(obj), relatedObjectIds, string.Empty); + var id = GetObjectId(obj); + + OcelEventsSource.Instance.OcelMergeAllocate(id, GetObjectType(obj), relatedObjectIds, string.Empty); + + return id; } private static string JoinObjectsIds(IEnumerable objectIds) => string.Join(Delimiter, objectIds); diff --git a/Procfiler/src/dotnet/ProcfilerTests/Core/TestsMethodCallTreeDumper.cs b/Procfiler/src/dotnet/ProcfilerTests/Core/TestsMethodCallTreeDumper.cs index 12faeae13..7df47ff51 100644 --- a/Procfiler/src/dotnet/ProcfilerTests/Core/TestsMethodCallTreeDumper.cs +++ b/Procfiler/src/dotnet/ProcfilerTests/Core/TestsMethodCallTreeDumper.cs @@ -8,10 +8,23 @@ public static class TestsMethodCallTreeDumper { public static string CreateDump(IEnumerable trace, string? filterPattern) { - return ProgramMethodCallTreeDumper.CreateDump(trace, filterPattern, e => e.TryGetMethodStartEndEventInfo() switch + return ProgramMethodCallTreeDumper.CreateDump(trace, filterPattern, e => { - var (frame, isStart) => (frame, isStart), - _ => null + if (e.TryGetMethodStartEndEventInfo() is var (frame, isStart)) + { + return (frame, isStart switch + { + true => ProgramMethodCallTreeDumper.DumpEventKind.Start, + false => ProgramMethodCallTreeDumper.DumpEventKind.End + }); + } + + if (e.IsMethodExecutionEvent(out frame)) + { + return (frame!, ProgramMethodCallTreeDumper.DumpEventKind.Execution); + } + + return null; }); } } \ No newline at end of file diff --git a/Procfiler/src/dotnet/ProcfilerTests/Tests/SplitByMethods/ByMethodSplitTests.cs b/Procfiler/src/dotnet/ProcfilerTests/Tests/SplitByMethods/ByMethodSplitTestsBase.cs similarity index 57% rename from Procfiler/src/dotnet/ProcfilerTests/Tests/SplitByMethods/ByMethodSplitTests.cs rename to Procfiler/src/dotnet/ProcfilerTests/Tests/SplitByMethods/ByMethodSplitTestsBase.cs index efdb28c8c..5668f385b 100644 --- a/Procfiler/src/dotnet/ProcfilerTests/Tests/SplitByMethods/ByMethodSplitTests.cs +++ b/Procfiler/src/dotnet/ProcfilerTests/Tests/SplitByMethods/ByMethodSplitTestsBase.cs @@ -1,25 +1,27 @@ using System.Text; using Core.Utils; +using Procfiler.Commands.CollectClrEvents.Split; using Procfiler.Core.Collector; using ProcfilerTests.Core; namespace ProcfilerTests.Tests.SplitByMethods; -[TestFixture] -public class ByMethodSplitTests : GoldProcessBasedTest +public abstract class ByMethodSplitTestsBase : GoldProcessBasedTest { + protected abstract InlineMode InlineMode { get; } + + [TestCaseSource(nameof(DefaultContexts))] [TestCaseSource(nameof(OnlineSerializationContexts))] - public void Test(ContextWithSolution dto) => DoTest(dto); - - private void DoTest(ContextWithSolution dto) + public void DoTest(ContextWithSolution dto) { - ExecuteTestWithGold(dto.Context, events => DumpMethodCallTree(dto.Solution.NamespaceFilterPattern, events)); + ExecuteTestWithGold(dto.Context, + events => DumpMethodCallTree(dto.Solution.NamespaceFilterPattern, events, InlineMode)); } - private string DumpMethodCallTree(string filterPattern, CollectedEvents events) + private string DumpMethodCallTree(string filterPattern, CollectedEvents events, InlineMode inlineMode) { - var eventByMethods = SplitByMethodsTestUtil.SplitByMethods(events, Container, filterPattern); + var eventByMethods = SplitByMethodsTestUtil.SplitByMethods(events, Container, filterPattern, inlineMode); var interestingEvents = eventByMethods.OrderBy(pair => pair.Key); var sb = new StringBuilder(); @@ -38,4 +40,16 @@ private string DumpMethodCallTree(string filterPattern, CollectedEvents events) return sb.ToString(); } +} + +[TestFixture] +public class ByMethodSplitTests : ByMethodSplitTestsBase +{ + protected override InlineMode InlineMode => InlineMode.EventsAndMethodsEvents; +} + +[TestFixture] +public class ByMethodSplitTestsNoInline : ByMethodSplitTestsBase +{ + protected override InlineMode InlineMode => InlineMode.NotInline; } \ No newline at end of file diff --git a/Procfiler/src/dotnet/ProcfilerTests/Tests/SplitByMethods/SplitByMethodsTestUtil.cs b/Procfiler/src/dotnet/ProcfilerTests/Tests/SplitByMethods/SplitByMethodsTestUtil.cs index 31c9dbec2..1ea101b39 100644 --- a/Procfiler/src/dotnet/ProcfilerTests/Tests/SplitByMethods/SplitByMethodsTestUtil.cs +++ b/Procfiler/src/dotnet/ProcfilerTests/Tests/SplitByMethods/SplitByMethodsTestUtil.cs @@ -12,7 +12,7 @@ namespace ProcfilerTests.Tests.SplitByMethods; public static class SplitByMethodsTestUtil { public static IReadOnlyDictionary>> SplitByMethods( - CollectedEvents events, IContainer container, string filterPattern) + CollectedEvents events, IContainer container, string filterPattern, InlineMode inlineMode) { var mainThreadEvents = TestUtil.FindEventsForMainThread(events.Events); var processingContext = EventsProcessingContext.DoEverything(mainThreadEvents, events.GlobalData); @@ -22,6 +22,6 @@ public static IReadOnlyDictionary>> S processor.ApplyMultipleMutators(mainThreadEvents, events.GlobalData, EmptyCollections.EmptySet); var splitter = container.Resolve(); - return splitter.Split(mainThreadEvents, filterPattern, InlineMode.EventsAndMethodsEvents); + return splitter.Split(mainThreadEvents, filterPattern, inlineMode); } } \ No newline at end of file diff --git a/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/ConsoleApp1.gold b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/ConsoleApp1.gold new file mode 100644 index 000000000..568b71ad9 --- /dev/null +++ b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/ConsoleApp1.gold @@ -0,0 +1,31 @@ +Method: ConsoleApp1.Program..ctor[instance.void..()] + +Trace 0 + [start] ConsoleApp1.Program..ctor[instance.void..()] + [ end ] ConsoleApp1.Program..ctor[instance.void..()] +Trace 1 + [start] ConsoleApp1.Program..ctor[instance.void..()] + [ end ] ConsoleApp1.Program..ctor[instance.void..()] + +Method: ConsoleApp1.Program.Main[void..()] + +Trace 0 + [start] ConsoleApp1.Program.Main[void..()] + [exec]ConsoleApp1.Program.Method1[void..()] + [ end ] ConsoleApp1.Program.Main[void..()] + +Method: ConsoleApp1.Program.Method1[void..()] + +Trace 0 + [start] ConsoleApp1.Program.Method1[void..()] + [exec]ConsoleApp1.Program..ctor[instance.void..()] + [exec]ConsoleApp1.Program.Method2[void..()] + [exec]ConsoleApp1.Program..ctor[instance.void..()] + [ end ] ConsoleApp1.Program.Method1[void..()] + +Method: ConsoleApp1.Program.Method2[void..()] + +Trace 0 + [start] ConsoleApp1.Program.Method2[void..()] + [ end ] ConsoleApp1.Program.Method2[void..()] + diff --git a/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/DynamicAssemblyCreation.gold b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/DynamicAssemblyCreation.gold new file mode 100644 index 000000000..c0319364a --- /dev/null +++ b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/DynamicAssemblyCreation.gold @@ -0,0 +1,6 @@ +Method: DynamicAssemblyCreation.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] DynamicAssemblyCreation.Program.Main[void..(class.System.String[])] + [ end ] DynamicAssemblyCreation.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/DynamicAssemblyLoading.gold b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/DynamicAssemblyLoading.gold new file mode 100644 index 000000000..5cc114007 --- /dev/null +++ b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/DynamicAssemblyLoading.gold @@ -0,0 +1,6 @@ +Method: DynamicAssemblyLoading.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] DynamicAssemblyLoading.Program.Main[void..(class.System.String[])] + [ end ] DynamicAssemblyLoading.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/ExceptionTryCatchFinally.gold b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/ExceptionTryCatchFinally.gold new file mode 100644 index 000000000..a133519e8 --- /dev/null +++ b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/ExceptionTryCatchFinally.gold @@ -0,0 +1,20 @@ +Method: ExceptionTryCatchFinally.Program..ctor[instance.void..()] + +Trace 0 + [start] ExceptionTryCatchFinally.Program..ctor[instance.void..()] + [ end ] ExceptionTryCatchFinally.Program..ctor[instance.void..()] + +Method: ExceptionTryCatchFinally.Program.
g__ThrowException|0_0[void..()] + +Trace 0 + [start] ExceptionTryCatchFinally.Program.
g__ThrowException|0_0[void..()] + [ end ] ExceptionTryCatchFinally.Program.
g__ThrowException|0_0[void..()] + +Method: ExceptionTryCatchFinally.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] ExceptionTryCatchFinally.Program.Main[void..(class.System.String[])] + [exec]ExceptionTryCatchFinally.Program.
g__ThrowException|0_0[void..()] + [exec]ExceptionTryCatchFinally.Program..ctor[instance.void..()] + [ end ] ExceptionTryCatchFinally.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/ExceptionTryCatchFinallyWhen.gold b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/ExceptionTryCatchFinallyWhen.gold new file mode 100644 index 000000000..e5b82c86c --- /dev/null +++ b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/ExceptionTryCatchFinallyWhen.gold @@ -0,0 +1,13 @@ +Method: ExceptionTryCatchFinallyWhen.Program.
g__Throw|0_0[void..()] + +Trace 0 + [start] ExceptionTryCatchFinallyWhen.Program.
g__Throw|0_0[void..()] + [ end ] ExceptionTryCatchFinallyWhen.Program.
g__Throw|0_0[void..()] + +Method: ExceptionTryCatchFinallyWhen.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] ExceptionTryCatchFinallyWhen.Program.Main[void..(class.System.String[])] + [exec]ExceptionTryCatchFinallyWhen.Program.
g__Throw|0_0[void..()] + [ end ] ExceptionTryCatchFinallyWhen.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/FileWriteProject.gold b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/FileWriteProject.gold new file mode 100644 index 000000000..439404490 --- /dev/null +++ b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/FileWriteProject.gold @@ -0,0 +1,26 @@ +Method: FileWriteProject.Program.
[void..(class.System.String[])] + +Trace 0 + [start] FileWriteProject.Program.
[void..(class.System.String[])] + [exec]FileWriteProject.Program.Main[class.System.Threading.Tasks.Task..(class.System.String[])] + [ end ] FileWriteProject.Program.
[void..(class.System.String[])] + +Method: FileWriteProject.Program.Main[class.System.Threading.Tasks.Task..(class.System.String[])] + +Trace 0 + [start] FileWriteProject.Program.Main[class.System.Threading.Tasks.Task..(class.System.String[])] + [exec]FileWriteProject.Program+
d__0..ctor[instance.void..()] + [ end ] FileWriteProject.Program.Main[class.System.Threading.Tasks.Task..(class.System.String[])] + +Method: FileWriteProject.Program+
d__0..ctor[instance.void..()] + +Trace 0 + [start] FileWriteProject.Program+
d__0..ctor[instance.void..()] + [ end ] FileWriteProject.Program+
d__0..ctor[instance.void..()] + +Method: FileWriteProject.Program+
d__0.MoveNext[instance.void..()] + +Trace 0 + [start] FileWriteProject.Program+
d__0.MoveNext[instance.void..()] + [ end ] FileWriteProject.Program+
d__0.MoveNext[instance.void..()] + diff --git a/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/FinalizableObject.gold b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/FinalizableObject.gold new file mode 100644 index 000000000..99f103fb9 --- /dev/null +++ b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/FinalizableObject.gold @@ -0,0 +1,209 @@ +Method: FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + +Trace 0 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 1 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 2 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 3 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 4 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 5 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 6 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 7 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 8 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 9 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 10 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 11 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 12 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 13 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 14 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 15 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 16 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 17 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 18 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 19 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 20 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 21 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 22 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 23 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 24 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 25 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 26 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 27 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 28 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 29 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 30 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 31 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 32 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 33 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 34 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 35 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 36 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 37 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 38 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 39 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 40 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 41 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 42 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 43 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 44 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 45 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 46 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 47 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 48 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 49 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + +Method: FinalizableObject.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] FinalizableObject.Program.Main[void..(class.System.String[])] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/IntensiveThreadPoolUse.gold b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/IntensiveThreadPoolUse.gold new file mode 100644 index 000000000..7f83655d3 --- /dev/null +++ b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/IntensiveThreadPoolUse.gold @@ -0,0 +1,6 @@ +Method: IntensiveThreadPoolUse.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] IntensiveThreadPoolUse.Program.Main[void..(class.System.String[])] + [ end ] IntensiveThreadPoolUse.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/LOHAllocations.gold b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/LOHAllocations.gold new file mode 100644 index 000000000..404678d94 --- /dev/null +++ b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/LOHAllocations.gold @@ -0,0 +1,6 @@ +Method: LOHAllocations.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] LOHAllocations.Program.Main[void..(class.System.String[])] + [ end ] LOHAllocations.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/NotExistingAssemblyLoading.gold b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/NotExistingAssemblyLoading.gold new file mode 100644 index 000000000..b4ed29bf1 --- /dev/null +++ b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/NotExistingAssemblyLoading.gold @@ -0,0 +1,31 @@ +Method: NotExistingAssemblyLoading.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] NotExistingAssemblyLoading.Program.Main[void..(class.System.String[])] + [ end ] NotExistingAssemblyLoading.Program.Main[void..(class.System.String[])] + +Method: NotExistingAssemblyLoading.Program+<>c..cctor[void..()] + +Trace 0 + [start] NotExistingAssemblyLoading.Program+<>c..cctor[void..()] + [exec]NotExistingAssemblyLoading.Program+<>c..ctor[instance.void..()] + [ end ] NotExistingAssemblyLoading.Program+<>c..cctor[void..()] + +Method: NotExistingAssemblyLoading.Program+<>c..ctor[instance.void..()] + +Trace 0 + [start] NotExistingAssemblyLoading.Program+<>c..ctor[instance.void..()] + [ end ] NotExistingAssemblyLoading.Program+<>c..ctor[instance.void..()] + +Method: NotExistingAssemblyLoading.Program+<>c.
b__0_0[instance.class.System.Reflection.Assembly..(class.System.Object,class.System.ResolveEventArgs)] + +Trace 0 + [start] NotExistingAssemblyLoading.Program+<>c.
b__0_0[instance.class.System.Reflection.Assembly..(class.System.Object,class.System.ResolveEventArgs)] + [ end ] NotExistingAssemblyLoading.Program+<>c.
b__0_0[instance.class.System.Reflection.Assembly..(class.System.Object,class.System.ResolveEventArgs)] + +Method: NotExistingAssemblyLoading.Program+<>c.
b__0_1[instance.class.System.Reflection.Assembly..(class.System.Runtime.Loader.AssemblyLoadContext,class.System.Reflection.AssemblyName)] + +Trace 0 + [start] NotExistingAssemblyLoading.Program+<>c.
b__0_1[instance.class.System.Reflection.Assembly..(class.System.Runtime.Loader.AssemblyLoadContext,class.System.Reflection.AssemblyName)] + [ end ] NotExistingAssemblyLoading.Program+<>c.
b__0_1[instance.class.System.Reflection.Assembly..(class.System.Runtime.Loader.AssemblyLoadContext,class.System.Reflection.AssemblyName)] + diff --git a/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/SystemArrayPooling.gold b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/SystemArrayPooling.gold new file mode 100644 index 000000000..4d58a3f5c --- /dev/null +++ b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/SystemArrayPooling.gold @@ -0,0 +1,6 @@ +Method: SystemArrayPooling.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] SystemArrayPooling.Program.Main[void..(class.System.String[])] + [ end ] SystemArrayPooling.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/TaskTestProject1.gold b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/TaskTestProject1.gold new file mode 100644 index 000000000..419e89a13 --- /dev/null +++ b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/TaskTestProject1.gold @@ -0,0 +1,13 @@ +Method: TaskTestProject1.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] TaskTestProject1.Program.Main[void..(class.System.String[])] + [exec]TaskTestProject1.Program+<>c__DisplayClass0_0..ctor[instance.void..()] + [ end ] TaskTestProject1.Program.Main[void..(class.System.String[])] + +Method: TaskTestProject1.Program+<>c__DisplayClass0_0..ctor[instance.void..()] + +Trace 0 + [start] TaskTestProject1.Program+<>c__DisplayClass0_0..ctor[instance.void..()] + [ end ] TaskTestProject1.Program+<>c__DisplayClass0_0..ctor[instance.void..()] + diff --git a/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/UnsafeFixed.gold b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/UnsafeFixed.gold new file mode 100644 index 000000000..2f0b0664f --- /dev/null +++ b/Procfiler/test_data/gold/linux/ByMethodSplitTestsNoInline/UnsafeFixed.gold @@ -0,0 +1,6 @@ +Method: UnsafeFixed.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] UnsafeFixed.Program.Main[void..(class.System.String[])] + [ end ] UnsafeFixed.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/linux/OcelEventsTest/SimpleTest3.gold b/Procfiler/test_data/gold/linux/OcelEventsTest/SimpleTest3.gold index a97ccbdaa..78fe2eb3e 100644 --- a/Procfiler/test_data/gold/linux/OcelEventsTest/SimpleTest3.gold +++ b/Procfiler/test_data/gold/linux/OcelEventsTest/SimpleTest3.gold @@ -1,50 +1,110 @@ OcelObjectAllocated {"objectId":"1","type":"Type1","attributes":""} OcelObjectAllocated {"objectId":"2","type":"Type1","attributes":""} OcelObjectAllocated {"objectId":"3","type":"Type1","attributes":""} -OcelMergeAllocate {"objectId":"4","type":"Type1","relatedObjectsIds":"1 2 3","attributes":""} -OcelConsumeProduce {"objectId":"4","relatedObjectsIds":"5 6","relatedObjectsTypes":"Type3 Type2","attributes":""} -OcelObjectAllocated {"objectId":"7","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"8","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"9","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"4","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"5","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"6","type":"Type1","attributes":""} +OcelMergeAllocate {"objectId":"7","type":"Type1","relatedObjectsIds":"1 2","attributes":""} +OcelMergeAllocate {"objectId":"8","type":"Type1","relatedObjectsIds":"3 4","attributes":""} +OcelMergeAllocate {"objectId":"9","type":"Type1","relatedObjectsIds":"5 6","attributes":""} OcelMergeAllocate {"objectId":"10","type":"Type1","relatedObjectsIds":"7 8 9","attributes":""} OcelConsumeProduce {"objectId":"10","relatedObjectsIds":"11 12","relatedObjectsTypes":"Type3 Type2","attributes":""} -OcelObjectAllocated {"objectId":"13","type":"Type1","attributes":""} -OcelObjectAllocated {"objectId":"14","type":"Type1","attributes":""} -OcelObjectAllocated {"objectId":"15","type":"Type1","attributes":""} -OcelMergeAllocate {"objectId":"16","type":"Type1","relatedObjectsIds":"13 14 15","attributes":""} -OcelConsumeProduce {"objectId":"16","relatedObjectsIds":"17 18","relatedObjectsTypes":"Type3 Type2","attributes":""} -OcelObjectAllocated {"objectId":"19","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"20","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"21","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"13","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"14","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"15","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"16","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"17","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"18","type":"Type2","attributes":""} +OcelMergeAllocate {"objectId":"19","type":"Type2","relatedObjectsIds":"13 14","attributes":""} +OcelMergeAllocate {"objectId":"20","type":"Type2","relatedObjectsIds":"15 16","attributes":""} +OcelMergeAllocate {"objectId":"21","type":"Type2","relatedObjectsIds":"17 18","attributes":""} OcelMergeAllocate {"objectId":"22","type":"Type1","relatedObjectsIds":"19 20 21","attributes":""} OcelConsumeProduce {"objectId":"22","relatedObjectsIds":"23 24","relatedObjectsTypes":"Type3 Type2","attributes":""} OcelObjectAllocated {"objectId":"25","type":"Type1","attributes":""} OcelObjectAllocated {"objectId":"26","type":"Type1","attributes":""} OcelObjectAllocated {"objectId":"27","type":"Type1","attributes":""} -OcelMergeAllocate {"objectId":"28","type":"Type1","relatedObjectsIds":"25 26 27","attributes":""} -OcelConsumeProduce {"objectId":"28","relatedObjectsIds":"29 30","relatedObjectsTypes":"Type3 Type2","attributes":""} -OcelObjectAllocated {"objectId":"31","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"32","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"33","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"28","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"29","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"30","type":"Type1","attributes":""} +OcelMergeAllocate {"objectId":"31","type":"Type1","relatedObjectsIds":"25 26","attributes":""} +OcelMergeAllocate {"objectId":"32","type":"Type1","relatedObjectsIds":"27 28","attributes":""} +OcelMergeAllocate {"objectId":"33","type":"Type1","relatedObjectsIds":"29 30","attributes":""} OcelMergeAllocate {"objectId":"34","type":"Type1","relatedObjectsIds":"31 32 33","attributes":""} OcelConsumeProduce {"objectId":"34","relatedObjectsIds":"35 36","relatedObjectsTypes":"Type3 Type2","attributes":""} -OcelObjectAllocated {"objectId":"37","type":"Type1","attributes":""} -OcelObjectAllocated {"objectId":"38","type":"Type1","attributes":""} -OcelObjectAllocated {"objectId":"39","type":"Type1","attributes":""} -OcelMergeAllocate {"objectId":"40","type":"Type1","relatedObjectsIds":"37 38 39","attributes":""} -OcelConsumeProduce {"objectId":"40","relatedObjectsIds":"41 42","relatedObjectsTypes":"Type3 Type2","attributes":""} -OcelObjectAllocated {"objectId":"43","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"44","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"45","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"37","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"38","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"39","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"40","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"41","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"42","type":"Type2","attributes":""} +OcelMergeAllocate {"objectId":"43","type":"Type2","relatedObjectsIds":"37 38","attributes":""} +OcelMergeAllocate {"objectId":"44","type":"Type2","relatedObjectsIds":"39 40","attributes":""} +OcelMergeAllocate {"objectId":"45","type":"Type2","relatedObjectsIds":"41 42","attributes":""} OcelMergeAllocate {"objectId":"46","type":"Type1","relatedObjectsIds":"43 44 45","attributes":""} OcelConsumeProduce {"objectId":"46","relatedObjectsIds":"47 48","relatedObjectsTypes":"Type3 Type2","attributes":""} OcelObjectAllocated {"objectId":"49","type":"Type1","attributes":""} OcelObjectAllocated {"objectId":"50","type":"Type1","attributes":""} OcelObjectAllocated {"objectId":"51","type":"Type1","attributes":""} -OcelMergeAllocate {"objectId":"52","type":"Type1","relatedObjectsIds":"49 50 51","attributes":""} -OcelConsumeProduce {"objectId":"52","relatedObjectsIds":"53 54","relatedObjectsTypes":"Type3 Type2","attributes":""} -OcelObjectAllocated {"objectId":"55","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"56","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"57","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"52","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"53","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"54","type":"Type1","attributes":""} +OcelMergeAllocate {"objectId":"55","type":"Type1","relatedObjectsIds":"49 50","attributes":""} +OcelMergeAllocate {"objectId":"56","type":"Type1","relatedObjectsIds":"51 52","attributes":""} +OcelMergeAllocate {"objectId":"57","type":"Type1","relatedObjectsIds":"53 54","attributes":""} OcelMergeAllocate {"objectId":"58","type":"Type1","relatedObjectsIds":"55 56 57","attributes":""} -OcelConsumeProduce {"objectId":"58","relatedObjectsIds":"59 60","relatedObjectsTypes":"Type3 Type2","attributes":""} \ No newline at end of file +OcelConsumeProduce {"objectId":"58","relatedObjectsIds":"59 60","relatedObjectsTypes":"Type3 Type2","attributes":""} +OcelObjectAllocated {"objectId":"61","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"62","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"63","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"64","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"65","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"66","type":"Type2","attributes":""} +OcelMergeAllocate {"objectId":"67","type":"Type2","relatedObjectsIds":"61 62","attributes":""} +OcelMergeAllocate {"objectId":"68","type":"Type2","relatedObjectsIds":"63 64","attributes":""} +OcelMergeAllocate {"objectId":"69","type":"Type2","relatedObjectsIds":"65 66","attributes":""} +OcelMergeAllocate {"objectId":"70","type":"Type1","relatedObjectsIds":"67 68 69","attributes":""} +OcelConsumeProduce {"objectId":"70","relatedObjectsIds":"71 72","relatedObjectsTypes":"Type3 Type2","attributes":""} +OcelObjectAllocated {"objectId":"73","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"74","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"75","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"76","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"77","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"78","type":"Type1","attributes":""} +OcelMergeAllocate {"objectId":"79","type":"Type1","relatedObjectsIds":"73 74","attributes":""} +OcelMergeAllocate {"objectId":"80","type":"Type1","relatedObjectsIds":"75 76","attributes":""} +OcelMergeAllocate {"objectId":"81","type":"Type1","relatedObjectsIds":"77 78","attributes":""} +OcelMergeAllocate {"objectId":"82","type":"Type1","relatedObjectsIds":"79 80 81","attributes":""} +OcelConsumeProduce {"objectId":"82","relatedObjectsIds":"83 84","relatedObjectsTypes":"Type3 Type2","attributes":""} +OcelObjectAllocated {"objectId":"85","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"86","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"87","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"88","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"89","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"90","type":"Type2","attributes":""} +OcelMergeAllocate {"objectId":"91","type":"Type2","relatedObjectsIds":"85 86","attributes":""} +OcelMergeAllocate {"objectId":"92","type":"Type2","relatedObjectsIds":"87 88","attributes":""} +OcelMergeAllocate {"objectId":"93","type":"Type2","relatedObjectsIds":"89 90","attributes":""} +OcelMergeAllocate {"objectId":"94","type":"Type1","relatedObjectsIds":"91 92 93","attributes":""} +OcelConsumeProduce {"objectId":"94","relatedObjectsIds":"95 96","relatedObjectsTypes":"Type3 Type2","attributes":""} +OcelObjectAllocated {"objectId":"97","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"98","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"99","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"100","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"101","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"102","type":"Type1","attributes":""} +OcelMergeAllocate {"objectId":"103","type":"Type1","relatedObjectsIds":"97 98","attributes":""} +OcelMergeAllocate {"objectId":"104","type":"Type1","relatedObjectsIds":"99 100","attributes":""} +OcelMergeAllocate {"objectId":"105","type":"Type1","relatedObjectsIds":"101 102","attributes":""} +OcelMergeAllocate {"objectId":"106","type":"Type1","relatedObjectsIds":"103 104 105","attributes":""} +OcelConsumeProduce {"objectId":"106","relatedObjectsIds":"107 108","relatedObjectsTypes":"Type3 Type2","attributes":""} +OcelObjectAllocated {"objectId":"109","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"110","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"111","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"112","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"113","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"114","type":"Type2","attributes":""} +OcelMergeAllocate {"objectId":"115","type":"Type2","relatedObjectsIds":"109 110","attributes":""} +OcelMergeAllocate {"objectId":"116","type":"Type2","relatedObjectsIds":"111 112","attributes":""} +OcelMergeAllocate {"objectId":"117","type":"Type2","relatedObjectsIds":"113 114","attributes":""} +OcelMergeAllocate {"objectId":"118","type":"Type1","relatedObjectsIds":"115 116 117","attributes":""} +OcelConsumeProduce {"objectId":"118","relatedObjectsIds":"119 120","relatedObjectsTypes":"Type3 Type2","attributes":""} \ No newline at end of file diff --git a/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/ConsoleApp1.gold b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/ConsoleApp1.gold new file mode 100644 index 000000000..568b71ad9 --- /dev/null +++ b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/ConsoleApp1.gold @@ -0,0 +1,31 @@ +Method: ConsoleApp1.Program..ctor[instance.void..()] + +Trace 0 + [start] ConsoleApp1.Program..ctor[instance.void..()] + [ end ] ConsoleApp1.Program..ctor[instance.void..()] +Trace 1 + [start] ConsoleApp1.Program..ctor[instance.void..()] + [ end ] ConsoleApp1.Program..ctor[instance.void..()] + +Method: ConsoleApp1.Program.Main[void..()] + +Trace 0 + [start] ConsoleApp1.Program.Main[void..()] + [exec]ConsoleApp1.Program.Method1[void..()] + [ end ] ConsoleApp1.Program.Main[void..()] + +Method: ConsoleApp1.Program.Method1[void..()] + +Trace 0 + [start] ConsoleApp1.Program.Method1[void..()] + [exec]ConsoleApp1.Program..ctor[instance.void..()] + [exec]ConsoleApp1.Program.Method2[void..()] + [exec]ConsoleApp1.Program..ctor[instance.void..()] + [ end ] ConsoleApp1.Program.Method1[void..()] + +Method: ConsoleApp1.Program.Method2[void..()] + +Trace 0 + [start] ConsoleApp1.Program.Method2[void..()] + [ end ] ConsoleApp1.Program.Method2[void..()] + diff --git a/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/DynamicAssemblyCreation.gold b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/DynamicAssemblyCreation.gold new file mode 100644 index 000000000..c0319364a --- /dev/null +++ b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/DynamicAssemblyCreation.gold @@ -0,0 +1,6 @@ +Method: DynamicAssemblyCreation.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] DynamicAssemblyCreation.Program.Main[void..(class.System.String[])] + [ end ] DynamicAssemblyCreation.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/DynamicAssemblyLoading.gold b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/DynamicAssemblyLoading.gold new file mode 100644 index 000000000..5cc114007 --- /dev/null +++ b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/DynamicAssemblyLoading.gold @@ -0,0 +1,6 @@ +Method: DynamicAssemblyLoading.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] DynamicAssemblyLoading.Program.Main[void..(class.System.String[])] + [ end ] DynamicAssemblyLoading.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/ExceptionTryCatchFinally.gold b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/ExceptionTryCatchFinally.gold new file mode 100644 index 000000000..a133519e8 --- /dev/null +++ b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/ExceptionTryCatchFinally.gold @@ -0,0 +1,20 @@ +Method: ExceptionTryCatchFinally.Program..ctor[instance.void..()] + +Trace 0 + [start] ExceptionTryCatchFinally.Program..ctor[instance.void..()] + [ end ] ExceptionTryCatchFinally.Program..ctor[instance.void..()] + +Method: ExceptionTryCatchFinally.Program.
g__ThrowException|0_0[void..()] + +Trace 0 + [start] ExceptionTryCatchFinally.Program.
g__ThrowException|0_0[void..()] + [ end ] ExceptionTryCatchFinally.Program.
g__ThrowException|0_0[void..()] + +Method: ExceptionTryCatchFinally.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] ExceptionTryCatchFinally.Program.Main[void..(class.System.String[])] + [exec]ExceptionTryCatchFinally.Program.
g__ThrowException|0_0[void..()] + [exec]ExceptionTryCatchFinally.Program..ctor[instance.void..()] + [ end ] ExceptionTryCatchFinally.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/ExceptionTryCatchFinallyWhen.gold b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/ExceptionTryCatchFinallyWhen.gold new file mode 100644 index 000000000..e5b82c86c --- /dev/null +++ b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/ExceptionTryCatchFinallyWhen.gold @@ -0,0 +1,13 @@ +Method: ExceptionTryCatchFinallyWhen.Program.
g__Throw|0_0[void..()] + +Trace 0 + [start] ExceptionTryCatchFinallyWhen.Program.
g__Throw|0_0[void..()] + [ end ] ExceptionTryCatchFinallyWhen.Program.
g__Throw|0_0[void..()] + +Method: ExceptionTryCatchFinallyWhen.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] ExceptionTryCatchFinallyWhen.Program.Main[void..(class.System.String[])] + [exec]ExceptionTryCatchFinallyWhen.Program.
g__Throw|0_0[void..()] + [ end ] ExceptionTryCatchFinallyWhen.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/FileWriteProject.gold b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/FileWriteProject.gold new file mode 100644 index 000000000..439404490 --- /dev/null +++ b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/FileWriteProject.gold @@ -0,0 +1,26 @@ +Method: FileWriteProject.Program.
[void..(class.System.String[])] + +Trace 0 + [start] FileWriteProject.Program.
[void..(class.System.String[])] + [exec]FileWriteProject.Program.Main[class.System.Threading.Tasks.Task..(class.System.String[])] + [ end ] FileWriteProject.Program.
[void..(class.System.String[])] + +Method: FileWriteProject.Program.Main[class.System.Threading.Tasks.Task..(class.System.String[])] + +Trace 0 + [start] FileWriteProject.Program.Main[class.System.Threading.Tasks.Task..(class.System.String[])] + [exec]FileWriteProject.Program+
d__0..ctor[instance.void..()] + [ end ] FileWriteProject.Program.Main[class.System.Threading.Tasks.Task..(class.System.String[])] + +Method: FileWriteProject.Program+
d__0..ctor[instance.void..()] + +Trace 0 + [start] FileWriteProject.Program+
d__0..ctor[instance.void..()] + [ end ] FileWriteProject.Program+
d__0..ctor[instance.void..()] + +Method: FileWriteProject.Program+
d__0.MoveNext[instance.void..()] + +Trace 0 + [start] FileWriteProject.Program+
d__0.MoveNext[instance.void..()] + [ end ] FileWriteProject.Program+
d__0.MoveNext[instance.void..()] + diff --git a/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/FinalizableObject.gold b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/FinalizableObject.gold new file mode 100644 index 000000000..99f103fb9 --- /dev/null +++ b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/FinalizableObject.gold @@ -0,0 +1,209 @@ +Method: FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + +Trace 0 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 1 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 2 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 3 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 4 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 5 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 6 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 7 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 8 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 9 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 10 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 11 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 12 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 13 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 14 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 15 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 16 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 17 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 18 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 19 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 20 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 21 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 22 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 23 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 24 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 25 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 26 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 27 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 28 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 29 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 30 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 31 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 32 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 33 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 34 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 35 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 36 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 37 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 38 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 39 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 40 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 41 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 42 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 43 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 44 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 45 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 46 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 47 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 48 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 49 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + +Method: FinalizableObject.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] FinalizableObject.Program.Main[void..(class.System.String[])] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/IntensiveThreadPoolUse.gold b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/IntensiveThreadPoolUse.gold new file mode 100644 index 000000000..7f83655d3 --- /dev/null +++ b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/IntensiveThreadPoolUse.gold @@ -0,0 +1,6 @@ +Method: IntensiveThreadPoolUse.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] IntensiveThreadPoolUse.Program.Main[void..(class.System.String[])] + [ end ] IntensiveThreadPoolUse.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/LOHAllocations.gold b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/LOHAllocations.gold new file mode 100644 index 000000000..404678d94 --- /dev/null +++ b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/LOHAllocations.gold @@ -0,0 +1,6 @@ +Method: LOHAllocations.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] LOHAllocations.Program.Main[void..(class.System.String[])] + [ end ] LOHAllocations.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/NotExistingAssemblyLoading.gold b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/NotExistingAssemblyLoading.gold new file mode 100644 index 000000000..b4ed29bf1 --- /dev/null +++ b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/NotExistingAssemblyLoading.gold @@ -0,0 +1,31 @@ +Method: NotExistingAssemblyLoading.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] NotExistingAssemblyLoading.Program.Main[void..(class.System.String[])] + [ end ] NotExistingAssemblyLoading.Program.Main[void..(class.System.String[])] + +Method: NotExistingAssemblyLoading.Program+<>c..cctor[void..()] + +Trace 0 + [start] NotExistingAssemblyLoading.Program+<>c..cctor[void..()] + [exec]NotExistingAssemblyLoading.Program+<>c..ctor[instance.void..()] + [ end ] NotExistingAssemblyLoading.Program+<>c..cctor[void..()] + +Method: NotExistingAssemblyLoading.Program+<>c..ctor[instance.void..()] + +Trace 0 + [start] NotExistingAssemblyLoading.Program+<>c..ctor[instance.void..()] + [ end ] NotExistingAssemblyLoading.Program+<>c..ctor[instance.void..()] + +Method: NotExistingAssemblyLoading.Program+<>c.
b__0_0[instance.class.System.Reflection.Assembly..(class.System.Object,class.System.ResolveEventArgs)] + +Trace 0 + [start] NotExistingAssemblyLoading.Program+<>c.
b__0_0[instance.class.System.Reflection.Assembly..(class.System.Object,class.System.ResolveEventArgs)] + [ end ] NotExistingAssemblyLoading.Program+<>c.
b__0_0[instance.class.System.Reflection.Assembly..(class.System.Object,class.System.ResolveEventArgs)] + +Method: NotExistingAssemblyLoading.Program+<>c.
b__0_1[instance.class.System.Reflection.Assembly..(class.System.Runtime.Loader.AssemblyLoadContext,class.System.Reflection.AssemblyName)] + +Trace 0 + [start] NotExistingAssemblyLoading.Program+<>c.
b__0_1[instance.class.System.Reflection.Assembly..(class.System.Runtime.Loader.AssemblyLoadContext,class.System.Reflection.AssemblyName)] + [ end ] NotExistingAssemblyLoading.Program+<>c.
b__0_1[instance.class.System.Reflection.Assembly..(class.System.Runtime.Loader.AssemblyLoadContext,class.System.Reflection.AssemblyName)] + diff --git a/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/SystemArrayPooling.gold b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/SystemArrayPooling.gold new file mode 100644 index 000000000..4d58a3f5c --- /dev/null +++ b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/SystemArrayPooling.gold @@ -0,0 +1,6 @@ +Method: SystemArrayPooling.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] SystemArrayPooling.Program.Main[void..(class.System.String[])] + [ end ] SystemArrayPooling.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/TaskTestProject1.gold b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/TaskTestProject1.gold new file mode 100644 index 000000000..419e89a13 --- /dev/null +++ b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/TaskTestProject1.gold @@ -0,0 +1,13 @@ +Method: TaskTestProject1.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] TaskTestProject1.Program.Main[void..(class.System.String[])] + [exec]TaskTestProject1.Program+<>c__DisplayClass0_0..ctor[instance.void..()] + [ end ] TaskTestProject1.Program.Main[void..(class.System.String[])] + +Method: TaskTestProject1.Program+<>c__DisplayClass0_0..ctor[instance.void..()] + +Trace 0 + [start] TaskTestProject1.Program+<>c__DisplayClass0_0..ctor[instance.void..()] + [ end ] TaskTestProject1.Program+<>c__DisplayClass0_0..ctor[instance.void..()] + diff --git a/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/UnsafeFixed.gold b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/UnsafeFixed.gold new file mode 100644 index 000000000..2f0b0664f --- /dev/null +++ b/Procfiler/test_data/gold/macos/ByMethodSplitTestsNoInline/UnsafeFixed.gold @@ -0,0 +1,6 @@ +Method: UnsafeFixed.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] UnsafeFixed.Program.Main[void..(class.System.String[])] + [ end ] UnsafeFixed.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/macos/OcelEventsTest/SimpleTest3.gold b/Procfiler/test_data/gold/macos/OcelEventsTest/SimpleTest3.gold index a97ccbdaa..78fe2eb3e 100644 --- a/Procfiler/test_data/gold/macos/OcelEventsTest/SimpleTest3.gold +++ b/Procfiler/test_data/gold/macos/OcelEventsTest/SimpleTest3.gold @@ -1,50 +1,110 @@ OcelObjectAllocated {"objectId":"1","type":"Type1","attributes":""} OcelObjectAllocated {"objectId":"2","type":"Type1","attributes":""} OcelObjectAllocated {"objectId":"3","type":"Type1","attributes":""} -OcelMergeAllocate {"objectId":"4","type":"Type1","relatedObjectsIds":"1 2 3","attributes":""} -OcelConsumeProduce {"objectId":"4","relatedObjectsIds":"5 6","relatedObjectsTypes":"Type3 Type2","attributes":""} -OcelObjectAllocated {"objectId":"7","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"8","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"9","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"4","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"5","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"6","type":"Type1","attributes":""} +OcelMergeAllocate {"objectId":"7","type":"Type1","relatedObjectsIds":"1 2","attributes":""} +OcelMergeAllocate {"objectId":"8","type":"Type1","relatedObjectsIds":"3 4","attributes":""} +OcelMergeAllocate {"objectId":"9","type":"Type1","relatedObjectsIds":"5 6","attributes":""} OcelMergeAllocate {"objectId":"10","type":"Type1","relatedObjectsIds":"7 8 9","attributes":""} OcelConsumeProduce {"objectId":"10","relatedObjectsIds":"11 12","relatedObjectsTypes":"Type3 Type2","attributes":""} -OcelObjectAllocated {"objectId":"13","type":"Type1","attributes":""} -OcelObjectAllocated {"objectId":"14","type":"Type1","attributes":""} -OcelObjectAllocated {"objectId":"15","type":"Type1","attributes":""} -OcelMergeAllocate {"objectId":"16","type":"Type1","relatedObjectsIds":"13 14 15","attributes":""} -OcelConsumeProduce {"objectId":"16","relatedObjectsIds":"17 18","relatedObjectsTypes":"Type3 Type2","attributes":""} -OcelObjectAllocated {"objectId":"19","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"20","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"21","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"13","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"14","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"15","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"16","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"17","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"18","type":"Type2","attributes":""} +OcelMergeAllocate {"objectId":"19","type":"Type2","relatedObjectsIds":"13 14","attributes":""} +OcelMergeAllocate {"objectId":"20","type":"Type2","relatedObjectsIds":"15 16","attributes":""} +OcelMergeAllocate {"objectId":"21","type":"Type2","relatedObjectsIds":"17 18","attributes":""} OcelMergeAllocate {"objectId":"22","type":"Type1","relatedObjectsIds":"19 20 21","attributes":""} OcelConsumeProduce {"objectId":"22","relatedObjectsIds":"23 24","relatedObjectsTypes":"Type3 Type2","attributes":""} OcelObjectAllocated {"objectId":"25","type":"Type1","attributes":""} OcelObjectAllocated {"objectId":"26","type":"Type1","attributes":""} OcelObjectAllocated {"objectId":"27","type":"Type1","attributes":""} -OcelMergeAllocate {"objectId":"28","type":"Type1","relatedObjectsIds":"25 26 27","attributes":""} -OcelConsumeProduce {"objectId":"28","relatedObjectsIds":"29 30","relatedObjectsTypes":"Type3 Type2","attributes":""} -OcelObjectAllocated {"objectId":"31","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"32","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"33","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"28","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"29","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"30","type":"Type1","attributes":""} +OcelMergeAllocate {"objectId":"31","type":"Type1","relatedObjectsIds":"25 26","attributes":""} +OcelMergeAllocate {"objectId":"32","type":"Type1","relatedObjectsIds":"27 28","attributes":""} +OcelMergeAllocate {"objectId":"33","type":"Type1","relatedObjectsIds":"29 30","attributes":""} OcelMergeAllocate {"objectId":"34","type":"Type1","relatedObjectsIds":"31 32 33","attributes":""} OcelConsumeProduce {"objectId":"34","relatedObjectsIds":"35 36","relatedObjectsTypes":"Type3 Type2","attributes":""} -OcelObjectAllocated {"objectId":"37","type":"Type1","attributes":""} -OcelObjectAllocated {"objectId":"38","type":"Type1","attributes":""} -OcelObjectAllocated {"objectId":"39","type":"Type1","attributes":""} -OcelMergeAllocate {"objectId":"40","type":"Type1","relatedObjectsIds":"37 38 39","attributes":""} -OcelConsumeProduce {"objectId":"40","relatedObjectsIds":"41 42","relatedObjectsTypes":"Type3 Type2","attributes":""} -OcelObjectAllocated {"objectId":"43","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"44","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"45","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"37","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"38","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"39","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"40","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"41","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"42","type":"Type2","attributes":""} +OcelMergeAllocate {"objectId":"43","type":"Type2","relatedObjectsIds":"37 38","attributes":""} +OcelMergeAllocate {"objectId":"44","type":"Type2","relatedObjectsIds":"39 40","attributes":""} +OcelMergeAllocate {"objectId":"45","type":"Type2","relatedObjectsIds":"41 42","attributes":""} OcelMergeAllocate {"objectId":"46","type":"Type1","relatedObjectsIds":"43 44 45","attributes":""} OcelConsumeProduce {"objectId":"46","relatedObjectsIds":"47 48","relatedObjectsTypes":"Type3 Type2","attributes":""} OcelObjectAllocated {"objectId":"49","type":"Type1","attributes":""} OcelObjectAllocated {"objectId":"50","type":"Type1","attributes":""} OcelObjectAllocated {"objectId":"51","type":"Type1","attributes":""} -OcelMergeAllocate {"objectId":"52","type":"Type1","relatedObjectsIds":"49 50 51","attributes":""} -OcelConsumeProduce {"objectId":"52","relatedObjectsIds":"53 54","relatedObjectsTypes":"Type3 Type2","attributes":""} -OcelObjectAllocated {"objectId":"55","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"56","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"57","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"52","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"53","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"54","type":"Type1","attributes":""} +OcelMergeAllocate {"objectId":"55","type":"Type1","relatedObjectsIds":"49 50","attributes":""} +OcelMergeAllocate {"objectId":"56","type":"Type1","relatedObjectsIds":"51 52","attributes":""} +OcelMergeAllocate {"objectId":"57","type":"Type1","relatedObjectsIds":"53 54","attributes":""} OcelMergeAllocate {"objectId":"58","type":"Type1","relatedObjectsIds":"55 56 57","attributes":""} -OcelConsumeProduce {"objectId":"58","relatedObjectsIds":"59 60","relatedObjectsTypes":"Type3 Type2","attributes":""} \ No newline at end of file +OcelConsumeProduce {"objectId":"58","relatedObjectsIds":"59 60","relatedObjectsTypes":"Type3 Type2","attributes":""} +OcelObjectAllocated {"objectId":"61","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"62","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"63","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"64","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"65","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"66","type":"Type2","attributes":""} +OcelMergeAllocate {"objectId":"67","type":"Type2","relatedObjectsIds":"61 62","attributes":""} +OcelMergeAllocate {"objectId":"68","type":"Type2","relatedObjectsIds":"63 64","attributes":""} +OcelMergeAllocate {"objectId":"69","type":"Type2","relatedObjectsIds":"65 66","attributes":""} +OcelMergeAllocate {"objectId":"70","type":"Type1","relatedObjectsIds":"67 68 69","attributes":""} +OcelConsumeProduce {"objectId":"70","relatedObjectsIds":"71 72","relatedObjectsTypes":"Type3 Type2","attributes":""} +OcelObjectAllocated {"objectId":"73","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"74","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"75","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"76","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"77","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"78","type":"Type1","attributes":""} +OcelMergeAllocate {"objectId":"79","type":"Type1","relatedObjectsIds":"73 74","attributes":""} +OcelMergeAllocate {"objectId":"80","type":"Type1","relatedObjectsIds":"75 76","attributes":""} +OcelMergeAllocate {"objectId":"81","type":"Type1","relatedObjectsIds":"77 78","attributes":""} +OcelMergeAllocate {"objectId":"82","type":"Type1","relatedObjectsIds":"79 80 81","attributes":""} +OcelConsumeProduce {"objectId":"82","relatedObjectsIds":"83 84","relatedObjectsTypes":"Type3 Type2","attributes":""} +OcelObjectAllocated {"objectId":"85","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"86","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"87","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"88","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"89","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"90","type":"Type2","attributes":""} +OcelMergeAllocate {"objectId":"91","type":"Type2","relatedObjectsIds":"85 86","attributes":""} +OcelMergeAllocate {"objectId":"92","type":"Type2","relatedObjectsIds":"87 88","attributes":""} +OcelMergeAllocate {"objectId":"93","type":"Type2","relatedObjectsIds":"89 90","attributes":""} +OcelMergeAllocate {"objectId":"94","type":"Type1","relatedObjectsIds":"91 92 93","attributes":""} +OcelConsumeProduce {"objectId":"94","relatedObjectsIds":"95 96","relatedObjectsTypes":"Type3 Type2","attributes":""} +OcelObjectAllocated {"objectId":"97","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"98","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"99","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"100","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"101","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"102","type":"Type1","attributes":""} +OcelMergeAllocate {"objectId":"103","type":"Type1","relatedObjectsIds":"97 98","attributes":""} +OcelMergeAllocate {"objectId":"104","type":"Type1","relatedObjectsIds":"99 100","attributes":""} +OcelMergeAllocate {"objectId":"105","type":"Type1","relatedObjectsIds":"101 102","attributes":""} +OcelMergeAllocate {"objectId":"106","type":"Type1","relatedObjectsIds":"103 104 105","attributes":""} +OcelConsumeProduce {"objectId":"106","relatedObjectsIds":"107 108","relatedObjectsTypes":"Type3 Type2","attributes":""} +OcelObjectAllocated {"objectId":"109","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"110","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"111","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"112","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"113","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"114","type":"Type2","attributes":""} +OcelMergeAllocate {"objectId":"115","type":"Type2","relatedObjectsIds":"109 110","attributes":""} +OcelMergeAllocate {"objectId":"116","type":"Type2","relatedObjectsIds":"111 112","attributes":""} +OcelMergeAllocate {"objectId":"117","type":"Type2","relatedObjectsIds":"113 114","attributes":""} +OcelMergeAllocate {"objectId":"118","type":"Type1","relatedObjectsIds":"115 116 117","attributes":""} +OcelConsumeProduce {"objectId":"118","relatedObjectsIds":"119 120","relatedObjectsTypes":"Type3 Type2","attributes":""} \ No newline at end of file diff --git a/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/ConsoleApp1.gold b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/ConsoleApp1.gold new file mode 100644 index 000000000..568b71ad9 --- /dev/null +++ b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/ConsoleApp1.gold @@ -0,0 +1,31 @@ +Method: ConsoleApp1.Program..ctor[instance.void..()] + +Trace 0 + [start] ConsoleApp1.Program..ctor[instance.void..()] + [ end ] ConsoleApp1.Program..ctor[instance.void..()] +Trace 1 + [start] ConsoleApp1.Program..ctor[instance.void..()] + [ end ] ConsoleApp1.Program..ctor[instance.void..()] + +Method: ConsoleApp1.Program.Main[void..()] + +Trace 0 + [start] ConsoleApp1.Program.Main[void..()] + [exec]ConsoleApp1.Program.Method1[void..()] + [ end ] ConsoleApp1.Program.Main[void..()] + +Method: ConsoleApp1.Program.Method1[void..()] + +Trace 0 + [start] ConsoleApp1.Program.Method1[void..()] + [exec]ConsoleApp1.Program..ctor[instance.void..()] + [exec]ConsoleApp1.Program.Method2[void..()] + [exec]ConsoleApp1.Program..ctor[instance.void..()] + [ end ] ConsoleApp1.Program.Method1[void..()] + +Method: ConsoleApp1.Program.Method2[void..()] + +Trace 0 + [start] ConsoleApp1.Program.Method2[void..()] + [ end ] ConsoleApp1.Program.Method2[void..()] + diff --git a/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/DynamicAssemblyCreation.gold b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/DynamicAssemblyCreation.gold new file mode 100644 index 000000000..c0319364a --- /dev/null +++ b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/DynamicAssemblyCreation.gold @@ -0,0 +1,6 @@ +Method: DynamicAssemblyCreation.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] DynamicAssemblyCreation.Program.Main[void..(class.System.String[])] + [ end ] DynamicAssemblyCreation.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/DynamicAssemblyLoading.gold b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/DynamicAssemblyLoading.gold new file mode 100644 index 000000000..5cc114007 --- /dev/null +++ b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/DynamicAssemblyLoading.gold @@ -0,0 +1,6 @@ +Method: DynamicAssemblyLoading.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] DynamicAssemblyLoading.Program.Main[void..(class.System.String[])] + [ end ] DynamicAssemblyLoading.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/ExceptionTryCatchFinally.gold b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/ExceptionTryCatchFinally.gold new file mode 100644 index 000000000..a133519e8 --- /dev/null +++ b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/ExceptionTryCatchFinally.gold @@ -0,0 +1,20 @@ +Method: ExceptionTryCatchFinally.Program..ctor[instance.void..()] + +Trace 0 + [start] ExceptionTryCatchFinally.Program..ctor[instance.void..()] + [ end ] ExceptionTryCatchFinally.Program..ctor[instance.void..()] + +Method: ExceptionTryCatchFinally.Program.
g__ThrowException|0_0[void..()] + +Trace 0 + [start] ExceptionTryCatchFinally.Program.
g__ThrowException|0_0[void..()] + [ end ] ExceptionTryCatchFinally.Program.
g__ThrowException|0_0[void..()] + +Method: ExceptionTryCatchFinally.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] ExceptionTryCatchFinally.Program.Main[void..(class.System.String[])] + [exec]ExceptionTryCatchFinally.Program.
g__ThrowException|0_0[void..()] + [exec]ExceptionTryCatchFinally.Program..ctor[instance.void..()] + [ end ] ExceptionTryCatchFinally.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/ExceptionTryCatchFinallyWhen.gold b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/ExceptionTryCatchFinallyWhen.gold new file mode 100644 index 000000000..e5b82c86c --- /dev/null +++ b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/ExceptionTryCatchFinallyWhen.gold @@ -0,0 +1,13 @@ +Method: ExceptionTryCatchFinallyWhen.Program.
g__Throw|0_0[void..()] + +Trace 0 + [start] ExceptionTryCatchFinallyWhen.Program.
g__Throw|0_0[void..()] + [ end ] ExceptionTryCatchFinallyWhen.Program.
g__Throw|0_0[void..()] + +Method: ExceptionTryCatchFinallyWhen.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] ExceptionTryCatchFinallyWhen.Program.Main[void..(class.System.String[])] + [exec]ExceptionTryCatchFinallyWhen.Program.
g__Throw|0_0[void..()] + [ end ] ExceptionTryCatchFinallyWhen.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/FileWriteProject.gold b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/FileWriteProject.gold new file mode 100644 index 000000000..439404490 --- /dev/null +++ b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/FileWriteProject.gold @@ -0,0 +1,26 @@ +Method: FileWriteProject.Program.
[void..(class.System.String[])] + +Trace 0 + [start] FileWriteProject.Program.
[void..(class.System.String[])] + [exec]FileWriteProject.Program.Main[class.System.Threading.Tasks.Task..(class.System.String[])] + [ end ] FileWriteProject.Program.
[void..(class.System.String[])] + +Method: FileWriteProject.Program.Main[class.System.Threading.Tasks.Task..(class.System.String[])] + +Trace 0 + [start] FileWriteProject.Program.Main[class.System.Threading.Tasks.Task..(class.System.String[])] + [exec]FileWriteProject.Program+
d__0..ctor[instance.void..()] + [ end ] FileWriteProject.Program.Main[class.System.Threading.Tasks.Task..(class.System.String[])] + +Method: FileWriteProject.Program+
d__0..ctor[instance.void..()] + +Trace 0 + [start] FileWriteProject.Program+
d__0..ctor[instance.void..()] + [ end ] FileWriteProject.Program+
d__0..ctor[instance.void..()] + +Method: FileWriteProject.Program+
d__0.MoveNext[instance.void..()] + +Trace 0 + [start] FileWriteProject.Program+
d__0.MoveNext[instance.void..()] + [ end ] FileWriteProject.Program+
d__0.MoveNext[instance.void..()] + diff --git a/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/FinalizableObject.gold b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/FinalizableObject.gold new file mode 100644 index 000000000..99f103fb9 --- /dev/null +++ b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/FinalizableObject.gold @@ -0,0 +1,209 @@ +Method: FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + +Trace 0 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 1 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 2 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 3 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 4 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 5 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 6 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 7 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 8 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 9 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 10 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 11 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 12 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 13 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 14 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 15 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 16 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 17 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 18 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 19 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 20 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 21 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 22 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 23 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 24 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 25 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 26 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 27 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 28 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 29 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 30 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 31 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 32 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 33 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 34 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 35 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 36 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 37 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 38 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 39 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 40 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 41 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 42 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 43 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 44 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 45 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 46 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 47 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 48 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] +Trace 49 + [start] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + +Method: FinalizableObject.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] FinalizableObject.Program.Main[void..(class.System.String[])] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [exec]FinalizableObject.ClassWithFinalizer..ctor[instance.void..()] + [ end ] FinalizableObject.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/IntensiveThreadPoolUse.gold b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/IntensiveThreadPoolUse.gold new file mode 100644 index 000000000..7f83655d3 --- /dev/null +++ b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/IntensiveThreadPoolUse.gold @@ -0,0 +1,6 @@ +Method: IntensiveThreadPoolUse.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] IntensiveThreadPoolUse.Program.Main[void..(class.System.String[])] + [ end ] IntensiveThreadPoolUse.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/LOHAllocations.gold b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/LOHAllocations.gold new file mode 100644 index 000000000..404678d94 --- /dev/null +++ b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/LOHAllocations.gold @@ -0,0 +1,6 @@ +Method: LOHAllocations.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] LOHAllocations.Program.Main[void..(class.System.String[])] + [ end ] LOHAllocations.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/NotExistingAssemblyLoading.gold b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/NotExistingAssemblyLoading.gold new file mode 100644 index 000000000..b4ed29bf1 --- /dev/null +++ b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/NotExistingAssemblyLoading.gold @@ -0,0 +1,31 @@ +Method: NotExistingAssemblyLoading.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] NotExistingAssemblyLoading.Program.Main[void..(class.System.String[])] + [ end ] NotExistingAssemblyLoading.Program.Main[void..(class.System.String[])] + +Method: NotExistingAssemblyLoading.Program+<>c..cctor[void..()] + +Trace 0 + [start] NotExistingAssemblyLoading.Program+<>c..cctor[void..()] + [exec]NotExistingAssemblyLoading.Program+<>c..ctor[instance.void..()] + [ end ] NotExistingAssemblyLoading.Program+<>c..cctor[void..()] + +Method: NotExistingAssemblyLoading.Program+<>c..ctor[instance.void..()] + +Trace 0 + [start] NotExistingAssemblyLoading.Program+<>c..ctor[instance.void..()] + [ end ] NotExistingAssemblyLoading.Program+<>c..ctor[instance.void..()] + +Method: NotExistingAssemblyLoading.Program+<>c.
b__0_0[instance.class.System.Reflection.Assembly..(class.System.Object,class.System.ResolveEventArgs)] + +Trace 0 + [start] NotExistingAssemblyLoading.Program+<>c.
b__0_0[instance.class.System.Reflection.Assembly..(class.System.Object,class.System.ResolveEventArgs)] + [ end ] NotExistingAssemblyLoading.Program+<>c.
b__0_0[instance.class.System.Reflection.Assembly..(class.System.Object,class.System.ResolveEventArgs)] + +Method: NotExistingAssemblyLoading.Program+<>c.
b__0_1[instance.class.System.Reflection.Assembly..(class.System.Runtime.Loader.AssemblyLoadContext,class.System.Reflection.AssemblyName)] + +Trace 0 + [start] NotExistingAssemblyLoading.Program+<>c.
b__0_1[instance.class.System.Reflection.Assembly..(class.System.Runtime.Loader.AssemblyLoadContext,class.System.Reflection.AssemblyName)] + [ end ] NotExistingAssemblyLoading.Program+<>c.
b__0_1[instance.class.System.Reflection.Assembly..(class.System.Runtime.Loader.AssemblyLoadContext,class.System.Reflection.AssemblyName)] + diff --git a/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/SystemArrayPooling.gold b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/SystemArrayPooling.gold new file mode 100644 index 000000000..4d58a3f5c --- /dev/null +++ b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/SystemArrayPooling.gold @@ -0,0 +1,6 @@ +Method: SystemArrayPooling.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] SystemArrayPooling.Program.Main[void..(class.System.String[])] + [ end ] SystemArrayPooling.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/TaskTestProject1.gold b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/TaskTestProject1.gold new file mode 100644 index 000000000..419e89a13 --- /dev/null +++ b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/TaskTestProject1.gold @@ -0,0 +1,13 @@ +Method: TaskTestProject1.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] TaskTestProject1.Program.Main[void..(class.System.String[])] + [exec]TaskTestProject1.Program+<>c__DisplayClass0_0..ctor[instance.void..()] + [ end ] TaskTestProject1.Program.Main[void..(class.System.String[])] + +Method: TaskTestProject1.Program+<>c__DisplayClass0_0..ctor[instance.void..()] + +Trace 0 + [start] TaskTestProject1.Program+<>c__DisplayClass0_0..ctor[instance.void..()] + [ end ] TaskTestProject1.Program+<>c__DisplayClass0_0..ctor[instance.void..()] + diff --git a/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/UnsafeFixed.gold b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/UnsafeFixed.gold new file mode 100644 index 000000000..2f0b0664f --- /dev/null +++ b/Procfiler/test_data/gold/windows/ByMethodSplitTestsNoInline/UnsafeFixed.gold @@ -0,0 +1,6 @@ +Method: UnsafeFixed.Program.Main[void..(class.System.String[])] + +Trace 0 + [start] UnsafeFixed.Program.Main[void..(class.System.String[])] + [ end ] UnsafeFixed.Program.Main[void..(class.System.String[])] + diff --git a/Procfiler/test_data/gold/windows/OcelEventsTest/SimpleTest3.gold b/Procfiler/test_data/gold/windows/OcelEventsTest/SimpleTest3.gold index a97ccbdaa..78fe2eb3e 100644 --- a/Procfiler/test_data/gold/windows/OcelEventsTest/SimpleTest3.gold +++ b/Procfiler/test_data/gold/windows/OcelEventsTest/SimpleTest3.gold @@ -1,50 +1,110 @@ OcelObjectAllocated {"objectId":"1","type":"Type1","attributes":""} OcelObjectAllocated {"objectId":"2","type":"Type1","attributes":""} OcelObjectAllocated {"objectId":"3","type":"Type1","attributes":""} -OcelMergeAllocate {"objectId":"4","type":"Type1","relatedObjectsIds":"1 2 3","attributes":""} -OcelConsumeProduce {"objectId":"4","relatedObjectsIds":"5 6","relatedObjectsTypes":"Type3 Type2","attributes":""} -OcelObjectAllocated {"objectId":"7","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"8","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"9","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"4","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"5","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"6","type":"Type1","attributes":""} +OcelMergeAllocate {"objectId":"7","type":"Type1","relatedObjectsIds":"1 2","attributes":""} +OcelMergeAllocate {"objectId":"8","type":"Type1","relatedObjectsIds":"3 4","attributes":""} +OcelMergeAllocate {"objectId":"9","type":"Type1","relatedObjectsIds":"5 6","attributes":""} OcelMergeAllocate {"objectId":"10","type":"Type1","relatedObjectsIds":"7 8 9","attributes":""} OcelConsumeProduce {"objectId":"10","relatedObjectsIds":"11 12","relatedObjectsTypes":"Type3 Type2","attributes":""} -OcelObjectAllocated {"objectId":"13","type":"Type1","attributes":""} -OcelObjectAllocated {"objectId":"14","type":"Type1","attributes":""} -OcelObjectAllocated {"objectId":"15","type":"Type1","attributes":""} -OcelMergeAllocate {"objectId":"16","type":"Type1","relatedObjectsIds":"13 14 15","attributes":""} -OcelConsumeProduce {"objectId":"16","relatedObjectsIds":"17 18","relatedObjectsTypes":"Type3 Type2","attributes":""} -OcelObjectAllocated {"objectId":"19","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"20","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"21","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"13","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"14","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"15","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"16","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"17","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"18","type":"Type2","attributes":""} +OcelMergeAllocate {"objectId":"19","type":"Type2","relatedObjectsIds":"13 14","attributes":""} +OcelMergeAllocate {"objectId":"20","type":"Type2","relatedObjectsIds":"15 16","attributes":""} +OcelMergeAllocate {"objectId":"21","type":"Type2","relatedObjectsIds":"17 18","attributes":""} OcelMergeAllocate {"objectId":"22","type":"Type1","relatedObjectsIds":"19 20 21","attributes":""} OcelConsumeProduce {"objectId":"22","relatedObjectsIds":"23 24","relatedObjectsTypes":"Type3 Type2","attributes":""} OcelObjectAllocated {"objectId":"25","type":"Type1","attributes":""} OcelObjectAllocated {"objectId":"26","type":"Type1","attributes":""} OcelObjectAllocated {"objectId":"27","type":"Type1","attributes":""} -OcelMergeAllocate {"objectId":"28","type":"Type1","relatedObjectsIds":"25 26 27","attributes":""} -OcelConsumeProduce {"objectId":"28","relatedObjectsIds":"29 30","relatedObjectsTypes":"Type3 Type2","attributes":""} -OcelObjectAllocated {"objectId":"31","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"32","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"33","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"28","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"29","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"30","type":"Type1","attributes":""} +OcelMergeAllocate {"objectId":"31","type":"Type1","relatedObjectsIds":"25 26","attributes":""} +OcelMergeAllocate {"objectId":"32","type":"Type1","relatedObjectsIds":"27 28","attributes":""} +OcelMergeAllocate {"objectId":"33","type":"Type1","relatedObjectsIds":"29 30","attributes":""} OcelMergeAllocate {"objectId":"34","type":"Type1","relatedObjectsIds":"31 32 33","attributes":""} OcelConsumeProduce {"objectId":"34","relatedObjectsIds":"35 36","relatedObjectsTypes":"Type3 Type2","attributes":""} -OcelObjectAllocated {"objectId":"37","type":"Type1","attributes":""} -OcelObjectAllocated {"objectId":"38","type":"Type1","attributes":""} -OcelObjectAllocated {"objectId":"39","type":"Type1","attributes":""} -OcelMergeAllocate {"objectId":"40","type":"Type1","relatedObjectsIds":"37 38 39","attributes":""} -OcelConsumeProduce {"objectId":"40","relatedObjectsIds":"41 42","relatedObjectsTypes":"Type3 Type2","attributes":""} -OcelObjectAllocated {"objectId":"43","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"44","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"45","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"37","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"38","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"39","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"40","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"41","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"42","type":"Type2","attributes":""} +OcelMergeAllocate {"objectId":"43","type":"Type2","relatedObjectsIds":"37 38","attributes":""} +OcelMergeAllocate {"objectId":"44","type":"Type2","relatedObjectsIds":"39 40","attributes":""} +OcelMergeAllocate {"objectId":"45","type":"Type2","relatedObjectsIds":"41 42","attributes":""} OcelMergeAllocate {"objectId":"46","type":"Type1","relatedObjectsIds":"43 44 45","attributes":""} OcelConsumeProduce {"objectId":"46","relatedObjectsIds":"47 48","relatedObjectsTypes":"Type3 Type2","attributes":""} OcelObjectAllocated {"objectId":"49","type":"Type1","attributes":""} OcelObjectAllocated {"objectId":"50","type":"Type1","attributes":""} OcelObjectAllocated {"objectId":"51","type":"Type1","attributes":""} -OcelMergeAllocate {"objectId":"52","type":"Type1","relatedObjectsIds":"49 50 51","attributes":""} -OcelConsumeProduce {"objectId":"52","relatedObjectsIds":"53 54","relatedObjectsTypes":"Type3 Type2","attributes":""} -OcelObjectAllocated {"objectId":"55","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"56","type":"Type2","attributes":""} -OcelObjectAllocated {"objectId":"57","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"52","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"53","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"54","type":"Type1","attributes":""} +OcelMergeAllocate {"objectId":"55","type":"Type1","relatedObjectsIds":"49 50","attributes":""} +OcelMergeAllocate {"objectId":"56","type":"Type1","relatedObjectsIds":"51 52","attributes":""} +OcelMergeAllocate {"objectId":"57","type":"Type1","relatedObjectsIds":"53 54","attributes":""} OcelMergeAllocate {"objectId":"58","type":"Type1","relatedObjectsIds":"55 56 57","attributes":""} -OcelConsumeProduce {"objectId":"58","relatedObjectsIds":"59 60","relatedObjectsTypes":"Type3 Type2","attributes":""} \ No newline at end of file +OcelConsumeProduce {"objectId":"58","relatedObjectsIds":"59 60","relatedObjectsTypes":"Type3 Type2","attributes":""} +OcelObjectAllocated {"objectId":"61","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"62","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"63","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"64","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"65","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"66","type":"Type2","attributes":""} +OcelMergeAllocate {"objectId":"67","type":"Type2","relatedObjectsIds":"61 62","attributes":""} +OcelMergeAllocate {"objectId":"68","type":"Type2","relatedObjectsIds":"63 64","attributes":""} +OcelMergeAllocate {"objectId":"69","type":"Type2","relatedObjectsIds":"65 66","attributes":""} +OcelMergeAllocate {"objectId":"70","type":"Type1","relatedObjectsIds":"67 68 69","attributes":""} +OcelConsumeProduce {"objectId":"70","relatedObjectsIds":"71 72","relatedObjectsTypes":"Type3 Type2","attributes":""} +OcelObjectAllocated {"objectId":"73","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"74","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"75","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"76","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"77","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"78","type":"Type1","attributes":""} +OcelMergeAllocate {"objectId":"79","type":"Type1","relatedObjectsIds":"73 74","attributes":""} +OcelMergeAllocate {"objectId":"80","type":"Type1","relatedObjectsIds":"75 76","attributes":""} +OcelMergeAllocate {"objectId":"81","type":"Type1","relatedObjectsIds":"77 78","attributes":""} +OcelMergeAllocate {"objectId":"82","type":"Type1","relatedObjectsIds":"79 80 81","attributes":""} +OcelConsumeProduce {"objectId":"82","relatedObjectsIds":"83 84","relatedObjectsTypes":"Type3 Type2","attributes":""} +OcelObjectAllocated {"objectId":"85","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"86","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"87","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"88","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"89","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"90","type":"Type2","attributes":""} +OcelMergeAllocate {"objectId":"91","type":"Type2","relatedObjectsIds":"85 86","attributes":""} +OcelMergeAllocate {"objectId":"92","type":"Type2","relatedObjectsIds":"87 88","attributes":""} +OcelMergeAllocate {"objectId":"93","type":"Type2","relatedObjectsIds":"89 90","attributes":""} +OcelMergeAllocate {"objectId":"94","type":"Type1","relatedObjectsIds":"91 92 93","attributes":""} +OcelConsumeProduce {"objectId":"94","relatedObjectsIds":"95 96","relatedObjectsTypes":"Type3 Type2","attributes":""} +OcelObjectAllocated {"objectId":"97","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"98","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"99","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"100","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"101","type":"Type1","attributes":""} +OcelObjectAllocated {"objectId":"102","type":"Type1","attributes":""} +OcelMergeAllocate {"objectId":"103","type":"Type1","relatedObjectsIds":"97 98","attributes":""} +OcelMergeAllocate {"objectId":"104","type":"Type1","relatedObjectsIds":"99 100","attributes":""} +OcelMergeAllocate {"objectId":"105","type":"Type1","relatedObjectsIds":"101 102","attributes":""} +OcelMergeAllocate {"objectId":"106","type":"Type1","relatedObjectsIds":"103 104 105","attributes":""} +OcelConsumeProduce {"objectId":"106","relatedObjectsIds":"107 108","relatedObjectsTypes":"Type3 Type2","attributes":""} +OcelObjectAllocated {"objectId":"109","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"110","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"111","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"112","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"113","type":"Type2","attributes":""} +OcelObjectAllocated {"objectId":"114","type":"Type2","attributes":""} +OcelMergeAllocate {"objectId":"115","type":"Type2","relatedObjectsIds":"109 110","attributes":""} +OcelMergeAllocate {"objectId":"116","type":"Type2","relatedObjectsIds":"111 112","attributes":""} +OcelMergeAllocate {"objectId":"117","type":"Type2","relatedObjectsIds":"113 114","attributes":""} +OcelMergeAllocate {"objectId":"118","type":"Type1","relatedObjectsIds":"115 116 117","attributes":""} +OcelConsumeProduce {"objectId":"118","relatedObjectsIds":"119 120","relatedObjectsTypes":"Type3 Type2","attributes":""} \ No newline at end of file diff --git a/Procfiler/test_data/source/OcelWithIfs/Program.cs b/Procfiler/test_data/source/OcelWithIfs/Program.cs index e3878cd83..a45916806 100644 --- a/Procfiler/test_data/source/OcelWithIfs/Program.cs +++ b/Procfiler/test_data/source/OcelWithIfs/Program.cs @@ -1,70 +1,106 @@ -using ProcfilerLoggerProvider; +using System.Runtime.CompilerServices; +using ProcfilerLoggerProvider; -namespace OcelWithIfs; - -public static class Program +namespace OcelWithIfs { - public static void Main() + public static class Program { - for (var i = 0; i < 10; ++i) + public static void Main() { - Method(i); + for (var i = 0; i < 10; ++i) + { + Method(i); + } } - } - private static long ourNextId; + private const string Type1 = nameof(Type1); + private const string Type2 = nameof(Type2); + private const string Type3 = nameof(Type3); - private static long NextId() - { - ourNextId++; - return ourNextId; - } + private static void Method(int x) + { + var objects = (x % 2 == 0) switch + { + true => AllocateObjects(x), + false => AllocateObjects2(x) + }; + + var id7 = Utils.Utils.NextId(); + OcelLogger.LogMergeAllocateRaw(new OcelObjectDto(id7, Type1), objects[0], objects[1], objects[2]); + + Barrier(); + + OcelLogger.LogConsumeProduceRaw( + id7, + new OcelObjectDto(Utils.Utils.NextId(), Type3), + new OcelObjectDto(Utils.Utils.NextId(), Type2) + ); + } - private const string Type1 = nameof(Type1); - private const string Type2 = nameof(Type2); - private const string Type3 = nameof(Type3); + [MethodImpl(MethodImplOptions.NoInlining)] + private static void Barrier() + { + } - private static void Method(int x) - { - var objects = (x % 2 == 0) switch + [MethodImpl(MethodImplOptions.NoInlining)] + private static void Barrier1() { - true => AllocateObjects(x), - false => AllocateObjects2(x) - }; + } - var id7 = NextId(); - OcelLogger.LogMergeAllocateRaw(new OcelObjectDto(id7, Type1), objects[0], objects[1], objects[2]); + [MethodImpl(MethodImplOptions.NoInlining)] + private static void Barrier2() + { + } - OcelLogger.LogConsumeProduceRaw(id7, new OcelObjectDto(NextId(), Type3), new OcelObjectDto(NextId(), Type2)); - } + private static List AllocateObjects(int x) + { + var type = x % 2 == 0 ? Type1 : Type2; - private static List AllocateObjects(int x) - { - var id1 = NextId(); - var id2 = NextId(); - var id3 = NextId(); + var ids = Utils.Utils.Allocate(type); + + Barrier1(); - var type = x % 2 == 0 ? Type1 : Type2; + return + [ + OcelLogger.LogMergeAllocateRaw(new OcelObjectDto(Utils.Utils.NextId(), type), ids[..2].ToArray())!.Value, + OcelLogger.LogMergeAllocateRaw(new OcelObjectDto(Utils.Utils.NextId(), type), ids[2..4].ToArray())!.Value, + OcelLogger.LogMergeAllocateRaw(new OcelObjectDto(Utils.Utils.NextId(), type), ids[4..].ToArray())!.Value + ]; + } - OcelLogger.LogObjectAllocatedRaw(new OcelObjectDto(id1, type)); - OcelLogger.LogObjectAllocatedRaw(new OcelObjectDto(id2, type)); - OcelLogger.LogObjectAllocatedRaw(new OcelObjectDto(id3, type)); + private static List AllocateObjects2(int x) + { + var type = x % 2 == 0 ? Type3 : Type2; - return [id1, id2, id3]; + var ids = Utils.Utils.Allocate(type); + + Barrier2(); + + return + [ + OcelLogger.LogMergeAllocateRaw(new OcelObjectDto(Utils.Utils.NextId(), type), ids[..2].ToArray())!.Value, + OcelLogger.LogMergeAllocateRaw(new OcelObjectDto(Utils.Utils.NextId(), type), ids[2..4].ToArray())!.Value, + OcelLogger.LogMergeAllocateRaw(new OcelObjectDto(Utils.Utils.NextId(), type), ids[4..].ToArray())!.Value + ]; + } } +} - private static List AllocateObjects2(int x) +namespace Utils +{ + public static class Utils { - var id4 = NextId(); - var id5 = NextId(); - var id6 = NextId(); - - var type = x % 2 == 0 ? Type3 : Type2; + private static long ourNextId; - OcelLogger.LogObjectAllocatedRaw(new OcelObjectDto(id4, type)); - OcelLogger.LogObjectAllocatedRaw(new OcelObjectDto(id5, type)); - OcelLogger.LogObjectAllocatedRaw(new OcelObjectDto(id6, type)); + public static long NextId() + { + ourNextId++; + return ourNextId; + } - return [id4, id5, id6]; + public static List Allocate(string type) + { + return Enumerable.Range(0, 6).Select(_ => OcelLogger.LogObjectAllocatedRaw(new OcelObjectDto(NextId(), type))!.Value).ToList(); + } } } \ No newline at end of file diff --git a/bxes/src/rust/Cargo.lock b/bxes/src/rust/Cargo.lock index e34c39dcf..c2bd922a0 100644 --- a/bxes/src/rust/Cargo.lock +++ b/bxes/src/rust/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" @@ -19,9 +19,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "adler2" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aes" @@ -36,18 +36,18 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] [[package]] name = "anstream" -version = "0.6.18" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", @@ -60,44 +60,44 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.10" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.2" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.7" +version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", - "once_cell", - "windows-sys 0.59.0", + "once_cell_polyfill", + "windows-sys 0.61.2", ] [[package]] name = "autocfg" -version = "1.3.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "backtrace" @@ -116,15 +116,15 @@ dependencies = [ [[package]] name = "base64ct" -version = "1.6.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +checksum = "0e050f626429857a27ddccb31e0aca21356bfa709c04041aefddac081a8f068a" [[package]] name = "bitflags" -version = "2.6.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "block-buffer" @@ -135,6 +135,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bumpalo" +version = "3.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" + [[package]] name = "bxes" version = "0.1.0" @@ -143,7 +149,7 @@ dependencies = [ "num", "num-derive", "num-traits", - "rand", + "rand 0.8.5", "tempfile", "thiserror", "uuid", @@ -180,12 +186,11 @@ dependencies = [ [[package]] name = "bzip2-sys" -version = "0.1.11+1.0.8" +version = "0.1.13+1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14" dependencies = [ "cc", - "libc", "pkg-config", ] @@ -202,9 +207,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cipher" @@ -227,9 +232,9 @@ dependencies = [ [[package]] name = "colog" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c426b7af8d5e0ad79de6713996632ce31f0d68ba84068fb0d654b396e519df0" +checksum = "df62599ba6adc9c6c04a54278c8209125343dc4775f57b9d76c9a4287e58f2bd" dependencies = [ "colored", "env_logger", @@ -238,17 +243,16 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "colored" -version = "2.2.0" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" +checksum = "fde0e0ec90c9dfb3b4b1a0891a7dcd0e2bffde2f7efed5fe7c9bb00e5bfb915e" dependencies = [ - "lazy_static", "windows-sys 0.59.0", ] @@ -260,33 +264,33 @@ checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" [[package]] name = "cpufeatures" -version = "0.2.13" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crypto-common" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", "typenum", @@ -294,9 +298,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.11" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" dependencies = [ "powerfmt", ] @@ -314,9 +318,9 @@ dependencies = [ [[package]] name = "env_filter" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" +checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" dependencies = [ "log", "regex", @@ -324,14 +328,14 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" dependencies = [ "anstream", "anstyle", "env_filter", - "humantime", + "jiff", "log", ] @@ -343,28 +347,28 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.9" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] name = "fastrand" -version = "2.1.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "flate2" -version = "1.0.33" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" +checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" dependencies = [ "crc32fast", - "miniz_oxide 0.8.0", + "miniz_oxide 0.8.9", ] [[package]] @@ -421,6 +425,18 @@ dependencies = [ "wasi", ] +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", +] + [[package]] name = "gimli" version = "0.29.0" @@ -442,12 +458,6 @@ dependencies = [ "digest", ] -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - [[package]] name = "indexmap" version = "2.4.0" @@ -460,18 +470,18 @@ dependencies = [ [[package]] name = "inout" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ "generic-array", ] [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itoa" @@ -479,20 +489,49 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +[[package]] +name = "jiff" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde", +] + +[[package]] +name = "jiff-static" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "jobserver" -version = "0.1.32" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ + "getrandom 0.3.4", "libc", ] [[package]] -name = "lazy_static" -version = "1.5.0" +name = "js-sys" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" +dependencies = [ + "once_cell", + "wasm-bindgen", +] [[package]] name = "leb128" @@ -502,9 +541,9 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.158" +version = "0.2.179" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "c5a2d376baa530d1238d133232d15e239abad80d05838b4b59354e5268af431f" [[package]] name = "libz-sys" @@ -520,21 +559,21 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.14" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "log" -version = "0.4.25" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "memchr" -version = "2.7.4" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "miniz_oxide" @@ -547,11 +586,12 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.8.0" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", + "simd-adler32", ] [[package]] @@ -601,7 +641,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.111", ] [[package]] @@ -676,9 +716,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.2" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "password-hash" @@ -687,7 +733,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" dependencies = [ "base64ct", - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -721,6 +767,21 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +[[package]] +name = "portable-atomic" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -729,9 +790,9 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ "zerocopy", ] @@ -748,22 +809,28 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "9695f8df41bb4f3d222c95a67532365f569318332d03d5f3f67f37b20e6ebdf0" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.37" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + [[package]] name = "rand" version = "0.8.5" @@ -771,8 +838,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", ] [[package]] @@ -782,7 +859,17 @@ 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_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", ] [[package]] @@ -791,7 +878,16 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.4", ] [[package]] @@ -827,9 +923,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", @@ -839,9 +935,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", @@ -850,9 +946,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.5" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "rustc-demangle" @@ -862,17 +958,23 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustix" -version = "0.38.35" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a85d50532239da68e9addb745ba38ff4612a242c1c7ceea689c4bc7c2f43c36f" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" dependencies = [ "bitflags", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + [[package]] name = "ryu" version = "1.0.18" @@ -896,7 +998,7 @@ checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.111", ] [[package]] @@ -924,9 +1026,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", @@ -939,6 +1041,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "simd-adler32" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" + [[package]] name = "slab" version = "0.4.9" @@ -967,9 +1075,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.76" +version = "2.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578e081a14e0cefc3279b0472138c513f37b41a08d5a3cca9b6e4e8ceb6cd525" +checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" dependencies = [ "proc-macro2", "quote", @@ -978,15 +1086,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.12.0" +version = "3.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" dependencies = [ - "cfg-if", "fastrand", + "getrandom 0.3.4", "once_cell", "rustix", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -1006,14 +1114,14 @@ checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.111", ] [[package]] name = "time" -version = "0.3.36" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", "num-conv", @@ -1024,9 +1132,9 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "tokio" @@ -1057,15 +1165,15 @@ dependencies = [ [[package]] name = "typenum" -version = "1.17.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" [[package]] name = "utf8parse" @@ -1075,34 +1183,37 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.10.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" dependencies = [ - "getrandom", - "rand", + "getrandom 0.3.4", + "js-sys", + "rand 0.9.2", "uuid-macro-internal", + "wasm-bindgen", ] [[package]] name = "uuid-macro-internal" -version = "1.10.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee1cd046f83ea2c4e920d6ee9f7c3537ef928d75dce5d84a87c2c5d6b3999a3a" +checksum = "39d11901c36b3650df7acb0f9ebe624f35b5ac4e1922ecd3c57f444648429594" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.111", ] [[package]] name = "variant_count" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aae2faf80ac463422992abf4de234731279c058aaf33171ca70277c98406b124" +checksum = "a1935e10c6f04d22688d07c0790f2fc0e1b1c5c2c55bc0cc87ed67656e587dd8" dependencies = [ + "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.111", ] [[package]] @@ -1124,14 +1235,65 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] -name = "windows-sys" -version = "0.52.0" +name = "wasip2" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "windows-targets", + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 2.0.111", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + [[package]] name = "windows-sys" version = "0.59.0" @@ -1141,6 +1303,15 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-targets" version = "0.52.6" @@ -1214,25 +1385,30 @@ dependencies = [ "memchr", ] +[[package]] +name = "wit-bindgen" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" + [[package]] name = "zerocopy" -version = "0.7.35" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" dependencies = [ - "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.35" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.111", ] [[package]] @@ -1276,9 +1452,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.13+zstd.1.5.6" +version = "2.0.16+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" dependencies = [ "cc", "pkg-config", diff --git a/bxes/src/rust/bxes/Cargo.toml b/bxes/src/rust/bxes/Cargo.toml index bfca49a71..f32a7c26b 100644 --- a/bxes/src/rust/bxes/Cargo.toml +++ b/bxes/src/rust/bxes/Cargo.toml @@ -5,17 +5,17 @@ edition = "2021" [dependencies] leb128 = "0.2.5" -num = "0.4.1" -num-derive = "0.4.1" -num-traits = "0.2.17" +num = "0.4.3" +num-derive = "0.4.2" +num-traits = "0.2.19" rand = "0.8.5" -tempfile = "3.8.1" -variant_count = "1.1.0" +tempfile = "3.24.0" +variant_count = "1.2.0" zip = "0.6.6" thiserror = "1" [dependencies.uuid] -version = "1.6.1" +version = "1.19.0" features = [ "v4", # Lets you generate random UUIDs "fast-rng", # Use a faster (but still sufficiently random) RNG diff --git a/bxes/src/rust/bxes/src/binary_rw/core.rs b/bxes/src/rust/bxes/src/binary_rw/core.rs index 606324102..b809d6682 100644 --- a/bxes/src/rust/bxes/src/binary_rw/core.rs +++ b/bxes/src/rust/bxes/src/binary_rw/core.rs @@ -1,7 +1,7 @@ //https://github.com/mathias234/binary_rw/blob/master/src/lib.rs use std::{ - borrow::Borrow, - io::{Read, Write}, + borrow::Borrow, + io::{Read, Write}, }; use super::error::BinaryError; @@ -10,48 +10,48 @@ use super::error::BinaryError; pub type Result = std::result::Result; macro_rules! encode { - ($endian:expr, $value:expr, $stream:expr) => { - let data = match $endian { - Endian::Little => $value.to_le_bytes(), - Endian::Big => $value.to_be_bytes(), - }; - return Ok($stream.write(&data)?); + ($endian:expr, $value:expr, $stream:expr) => { + let data = match $endian { + Endian::Little => $value.to_le_bytes(), + Endian::Big => $value.to_be_bytes(), }; + return Ok($stream.write(&data)?); + }; } macro_rules! decode { - ($endian:expr, $value:expr, $kind:ty) => { - let data = match $endian { - Endian::Little => <$kind>::from_le_bytes($value), - Endian::Big => <$kind>::from_be_bytes($value), - }; - return Ok(data); + ($endian:expr, $value:expr, $kind:ty) => { + let data = match $endian { + Endian::Little => <$kind>::from_le_bytes($value), + Endian::Big => <$kind>::from_be_bytes($value), }; + return Ok(data); + }; } /// Variants to describe endianness. #[derive(PartialEq)] pub enum Endian { - /// Big endian. - Big, - /// Little endian. - Little, + /// Big endian. + Big, + /// Little endian. + Little, } impl Default for Endian { - fn default() -> Self { - Self::Big - } + fn default() -> Self { + Self::Big + } } /// Trait for streams that can seek. pub trait SeekStream { - /// Seek to a position. - fn seek(&mut self, to: usize) -> Result; - /// Get the current position. - fn tell(&mut self) -> Result; - /// Get the length of the stream. - fn len(&self) -> Result; + /// Seek to a position. + fn seek(&mut self, to: usize) -> Result; + /// Get the current position. + fn tell(&mut self) -> Result; + /// Get the length of the stream. + fn len(&self) -> Result; } /// Trait for a readable stream. @@ -62,317 +62,317 @@ pub trait WriteStream: Write + SeekStream {} /// Read from a stream. pub struct BinaryReader<'a> { - stream: &'a mut dyn ReadStream, - endian: Endian, + stream: &'a mut dyn ReadStream, + endian: Endian, } impl<'a> Read for BinaryReader<'a> { - fn read(&mut self, buf: &mut [u8]) -> std::io::Result { - self.stream.read(buf) - } + fn read(&mut self, buf: &mut [u8]) -> std::io::Result { + self.stream.read(buf) + } } impl<'a> SeekStream for BinaryReader<'a> { - fn seek(&mut self, to: usize) -> Result { - self.stream.seek(to) - } + fn seek(&mut self, to: usize) -> Result { + self.stream.seek(to) + } - fn tell(&mut self) -> Result { - self.stream.tell() - } + fn tell(&mut self) -> Result { + self.stream.tell() + } - fn len(&self) -> Result { - self.stream.len() - } + fn len(&self) -> Result { + self.stream.len() + } } impl<'a> BinaryReader<'a> { - /// Create a binary reader with the given endianness. - pub fn new(stream: &'a mut impl ReadStream, endian: Endian) -> Self { - Self { stream, endian } - } - - /// Read a length-prefixed `String` from the stream. - pub fn read_string(&mut self) -> Result { - let chars = if cfg!(feature = "wasm32") { - let str_len = self.read_u32()?; - let mut chars: Vec = vec![0; str_len as usize]; - self.stream.read(&mut chars)?; - chars - } else { - let str_len = self.read_usize()?; - let mut chars: Vec = vec![0; str_len]; - self.stream.read(&mut chars)?; - chars - }; - Ok(String::from_utf8(chars)?) - } - - /// Swap endianness to allow for reversing the reading mid stream - pub fn swap_endianness(&mut self) { - if self.endian == Endian::Big { - self.endian = Endian::Little; - } else { - self.endian = Endian::Big; - } - } - - /// Read a character from the stream. - pub fn read_char(&mut self) -> Result { - Ok(std::char::from_u32(self.read_u32()?).ok_or_else(|| BinaryError::InvalidChar)?) - } - - /// Read a `bool` from the stream. - pub fn read_bool(&mut self) -> Result { - let value = self.read_u8()?; - Ok(value > 0) - } - - /// Read a `f32` from the stream. - pub fn read_f32(&mut self) -> Result { - let mut buffer: [u8; 4] = [0; 4]; - self.stream.read(&mut buffer)?; - decode!(self.endian, buffer, f32); - } - - /// Read a `f64` from the stream. - pub fn read_f64(&mut self) -> Result { - let mut buffer: [u8; 8] = [0; 8]; - self.stream.read(&mut buffer)?; - decode!(self.endian, buffer, f64); - } - - /// Read an `isize` from the stream. - #[cfg(target_arch = "wasm32")] - pub fn read_isize(&mut self) -> Result { - let mut buffer: [u8; 4] = [0; 4]; - self.stream.read(&mut buffer)?; - decode!(self.endian, buffer, isize); - } - - /// Read an `isize` from the stream. - #[cfg(not(target_arch = "wasm32"))] - pub fn read_isize(&mut self) -> Result { - let mut buffer: [u8; 8] = [0; 8]; - self.stream.read(&mut buffer)?; - decode!(self.endian, buffer, isize); - } - - /// Read a `usize` from the stream. - #[cfg(target_arch = "wasm32")] - pub fn read_usize(&mut self) -> Result { - let mut buffer: [u8; 4] = [0; 4]; - self.stream.read(&mut buffer)?; - decode!(self.endian, buffer, usize); - } - - /// Read a `usize` from the stream. - #[cfg(not(target_arch = "wasm32"))] - pub fn read_usize(&mut self) -> Result { - let mut buffer: [u8; 8] = [0; 8]; - self.stream.read(&mut buffer)?; - decode!(self.endian, buffer, usize); - } - - /// Read a `u64` from the stream. - pub fn read_u64(&mut self) -> Result { - let mut buffer: [u8; 8] = [0; 8]; - self.stream.read(&mut buffer)?; - decode!(self.endian, buffer, u64); - } - - /// Read an `i64` from the stream. - pub fn read_i64(&mut self) -> Result { - let mut buffer: [u8; 8] = [0; 8]; - self.stream.read(&mut buffer)?; - decode!(self.endian, buffer, i64); - } - - /// Read a `u32` from the stream. - pub fn read_u32(&mut self) -> Result { - let mut buffer: [u8; 4] = [0; 4]; - self.stream.read(&mut buffer)?; - decode!(self.endian, buffer, u32); - } - - /// Read an `i32` from the stream. - pub fn read_i32(&mut self) -> Result { - let mut buffer: [u8; 4] = [0; 4]; - self.stream.read(&mut buffer)?; - decode!(self.endian, buffer, i32); - } - - /// Read a `u16` from the stream. - pub fn read_u16(&mut self) -> Result { - let mut buffer: [u8; 2] = [0; 2]; - self.stream.read(&mut buffer)?; - decode!(self.endian, buffer, u16); - } - - /// Read an `i16` from the stream. - pub fn read_i16(&mut self) -> Result { - let mut buffer: [u8; 2] = [0; 2]; - self.stream.read(&mut buffer)?; - decode!(self.endian, buffer, i16); - } - - /// Read a `u8` from the stream. - pub fn read_u8(&mut self) -> Result { - let mut buffer: [u8; 1] = [0; 1]; - self.stream.read(&mut buffer)?; - decode!(self.endian, buffer, u8); - } - - /// Read an `i8` from the stream. - pub fn read_i8(&mut self) -> Result { - let mut buffer: [u8; 1] = [0; 1]; - self.stream.read(&mut buffer)?; - decode!(self.endian, buffer, i8); - } + /// Create a binary reader with the given endianness. + pub fn new(stream: &'a mut impl ReadStream, endian: Endian) -> Self { + Self { stream, endian } + } + + /// Read a length-prefixed `String` from the stream. + pub fn read_string(&mut self) -> Result { + let chars = if cfg!(feature = "wasm32") { + let str_len = self.read_u32()?; + let mut chars: Vec = vec![0; str_len as usize]; + self.stream.read(&mut chars)?; + chars + } else { + let str_len = self.read_usize()?; + let mut chars: Vec = vec![0; str_len]; + self.stream.read(&mut chars)?; + chars + }; + Ok(String::from_utf8(chars)?) + } + + /// Swap endianness to allow for reversing the reading mid stream + pub fn swap_endianness(&mut self) { + if self.endian == Endian::Big { + self.endian = Endian::Little; + } else { + self.endian = Endian::Big; + } + } + + /// Read a character from the stream. + pub fn read_char(&mut self) -> Result { + Ok(std::char::from_u32(self.read_u32()?).ok_or_else(|| BinaryError::InvalidChar)?) + } + + /// Read a `bool` from the stream. + pub fn read_bool(&mut self) -> Result { + let value = self.read_u8()?; + Ok(value > 0) + } + + /// Read a `f32` from the stream. + pub fn read_f32(&mut self) -> Result { + let mut buffer: [u8; 4] = [0; 4]; + self.stream.read(&mut buffer)?; + decode!(self.endian, buffer, f32); + } + + /// Read a `f64` from the stream. + pub fn read_f64(&mut self) -> Result { + let mut buffer: [u8; 8] = [0; 8]; + self.stream.read(&mut buffer)?; + decode!(self.endian, buffer, f64); + } + + /// Read an `isize` from the stream. + #[cfg(target_arch = "wasm32")] + pub fn read_isize(&mut self) -> Result { + let mut buffer: [u8; 4] = [0; 4]; + self.stream.read(&mut buffer)?; + decode!(self.endian, buffer, isize); + } + + /// Read an `isize` from the stream. + #[cfg(not(target_arch = "wasm32"))] + pub fn read_isize(&mut self) -> Result { + let mut buffer: [u8; 8] = [0; 8]; + self.stream.read(&mut buffer)?; + decode!(self.endian, buffer, isize); + } + + /// Read a `usize` from the stream. + #[cfg(target_arch = "wasm32")] + pub fn read_usize(&mut self) -> Result { + let mut buffer: [u8; 4] = [0; 4]; + self.stream.read(&mut buffer)?; + decode!(self.endian, buffer, usize); + } + + /// Read a `usize` from the stream. + #[cfg(not(target_arch = "wasm32"))] + pub fn read_usize(&mut self) -> Result { + let mut buffer: [u8; 8] = [0; 8]; + self.stream.read(&mut buffer)?; + decode!(self.endian, buffer, usize); + } + + /// Read a `u64` from the stream. + pub fn read_u64(&mut self) -> Result { + let mut buffer: [u8; 8] = [0; 8]; + self.stream.read(&mut buffer)?; + decode!(self.endian, buffer, u64); + } + + /// Read an `i64` from the stream. + pub fn read_i64(&mut self) -> Result { + let mut buffer: [u8; 8] = [0; 8]; + self.stream.read(&mut buffer)?; + decode!(self.endian, buffer, i64); + } + + /// Read a `u32` from the stream. + pub fn read_u32(&mut self) -> Result { + let mut buffer: [u8; 4] = [0; 4]; + self.stream.read(&mut buffer)?; + decode!(self.endian, buffer, u32); + } + + /// Read an `i32` from the stream. + pub fn read_i32(&mut self) -> Result { + let mut buffer: [u8; 4] = [0; 4]; + self.stream.read(&mut buffer)?; + decode!(self.endian, buffer, i32); + } + + /// Read a `u16` from the stream. + pub fn read_u16(&mut self) -> Result { + let mut buffer: [u8; 2] = [0; 2]; + self.stream.read(&mut buffer)?; + decode!(self.endian, buffer, u16); + } + + /// Read an `i16` from the stream. + pub fn read_i16(&mut self) -> Result { + let mut buffer: [u8; 2] = [0; 2]; + self.stream.read(&mut buffer)?; + decode!(self.endian, buffer, i16); + } + + /// Read a `u8` from the stream. + pub fn read_u8(&mut self) -> Result { + let mut buffer: [u8; 1] = [0; 1]; + self.stream.read(&mut buffer)?; + decode!(self.endian, buffer, u8); + } + + /// Read an `i8` from the stream. + pub fn read_i8(&mut self) -> Result { + let mut buffer: [u8; 1] = [0; 1]; + self.stream.read(&mut buffer)?; + decode!(self.endian, buffer, i8); + } } /// Write to a stream. pub struct BinaryWriter<'a> { - stream: &'a mut dyn WriteStream, - endian: Endian, + stream: &'a mut dyn WriteStream, + endian: Endian, } impl<'a> SeekStream for BinaryWriter<'a> { - fn seek(&mut self, to: usize) -> Result { - self.stream.seek(to) - } + fn seek(&mut self, to: usize) -> Result { + self.stream.seek(to) + } - fn tell(&mut self) -> Result { - self.stream.tell() - } + fn tell(&mut self) -> Result { + self.stream.tell() + } - fn len(&self) -> Result { - self.stream.len() - } + fn len(&self) -> Result { + self.stream.len() + } } impl<'a> BinaryWriter<'a> { - /// Create a binary writer with the given endianness. - pub fn new(stream: &'a mut impl WriteStream, endian: Endian) -> Self { - Self { stream, endian } - } - - /// Write a length-prefixed `String` to the stream. - /// - /// The length of the `String` is written as a `usize` - /// unless the `wasm32` feature is enabled - /// in which case the length is a `u32`. - pub fn write_string>(&mut self, value: S) -> Result { - let bytes = value.as_ref().as_bytes(); - if cfg!(feature = "wasm32") { - self.write_u32(bytes.len() as u32)?; - } else { - self.write_usize(bytes.len())?; - } - Ok(self.stream.write(&bytes.to_vec())?) - } - - /// Write a character to the stream. - pub fn write_char>(&mut self, v: V) -> Result { - self.write_u32(*v.borrow() as u32) - } - - /// Write a `bool` to the stream. - pub fn write_bool>(&mut self, value: V) -> Result { - let written = self.write_u8(if *value.borrow() { 1 } else { 0 })?; - Ok(written) - } - - /// Write a `f32` to the stream. - pub fn write_f32>(&mut self, value: V) -> Result { - encode!(self.endian, value.borrow(), self.stream); - } - - /// Write a `f64` to the stream. - pub fn write_f64>(&mut self, value: V) -> Result { - encode!(self.endian, value.borrow(), self.stream); - } - - /// Write an `isize` to the stream. - pub fn write_isize>(&mut self, value: V) -> Result { - encode!(self.endian, value.borrow(), self.stream); - } - - /// Write a `usize` to the stream. - pub fn write_usize>(&mut self, value: V) -> Result { - encode!(self.endian, value.borrow(), self.stream); - } - - /// Write a `u64` to the stream. - pub fn write_u64>(&mut self, value: V) -> Result { - encode!(self.endian, value.borrow(), self.stream); - } - - /// Write an `i64` to the stream. - pub fn write_i64>(&mut self, value: V) -> Result { - encode!(self.endian, value.borrow(), self.stream); - } - - /// Write a `u32` to the stream. - pub fn write_u32>(&mut self, value: V) -> Result { - encode!(self.endian, value.borrow(), self.stream); - } - - /// Write an `i32` to the stream. - pub fn write_i32>(&mut self, value: V) -> Result { - encode!(self.endian, value.borrow(), self.stream); - } - - /// Write a `u16` to the stream. - pub fn write_u16>(&mut self, value: V) -> Result { - encode!(self.endian, value.borrow(), self.stream); - } - - /// Write an `i16` to the stream. - pub fn write_i16>(&mut self, value: V) -> Result { - encode!(self.endian, value.borrow(), self.stream); - } - - /// Write a `u8` to the stream. - pub fn write_u8>(&mut self, value: V) -> Result { - encode!(self.endian, value.borrow(), self.stream); - } - - /// Write an `i8` to the stream. - pub fn write_i8>(&mut self, value: V) -> Result { - encode!(self.endian, value.borrow(), self.stream); - } - - /// Write a byte buffer to the stream. - pub fn write_bytes>(&mut self, data: B) -> Result { - Ok(self.stream.write(data.as_ref())?) - } - - /// Write a byte buffer to the stream. - pub fn write_bytes_with_value(&mut self, count: usize, fill_value: u8) -> Result { - let mut buff = Vec::with_capacity(count) as Vec; - buff.resize(count, fill_value); - Ok(self.write_bytes(buff)?) - } - - /// Swap endianness to allow for reversing the writing mid stream - pub fn swap_endianness(&mut self) { - if self.endian == Endian::Big { - self.endian = Endian::Little; - } else { - self.endian = Endian::Big; - } - } + /// Create a binary writer with the given endianness. + pub fn new(stream: &'a mut impl WriteStream, endian: Endian) -> Self { + Self { stream, endian } + } + + /// Write a length-prefixed `String` to the stream. + /// + /// The length of the `String` is written as a `usize` + /// unless the `wasm32` feature is enabled + /// in which case the length is a `u32`. + pub fn write_string>(&mut self, value: S) -> Result { + let bytes = value.as_ref().as_bytes(); + if cfg!(feature = "wasm32") { + self.write_u32(bytes.len() as u32)?; + } else { + self.write_usize(bytes.len())?; + } + Ok(self.stream.write(&bytes.to_vec())?) + } + + /// Write a character to the stream. + pub fn write_char>(&mut self, v: V) -> Result { + self.write_u32(*v.borrow() as u32) + } + + /// Write a `bool` to the stream. + pub fn write_bool>(&mut self, value: V) -> Result { + let written = self.write_u8(if *value.borrow() { 1 } else { 0 })?; + Ok(written) + } + + /// Write a `f32` to the stream. + pub fn write_f32>(&mut self, value: V) -> Result { + encode!(self.endian, value.borrow(), self.stream); + } + + /// Write a `f64` to the stream. + pub fn write_f64>(&mut self, value: V) -> Result { + encode!(self.endian, value.borrow(), self.stream); + } + + /// Write an `isize` to the stream. + pub fn write_isize>(&mut self, value: V) -> Result { + encode!(self.endian, value.borrow(), self.stream); + } + + /// Write a `usize` to the stream. + pub fn write_usize>(&mut self, value: V) -> Result { + encode!(self.endian, value.borrow(), self.stream); + } + + /// Write a `u64` to the stream. + pub fn write_u64>(&mut self, value: V) -> Result { + encode!(self.endian, value.borrow(), self.stream); + } + + /// Write an `i64` to the stream. + pub fn write_i64>(&mut self, value: V) -> Result { + encode!(self.endian, value.borrow(), self.stream); + } + + /// Write a `u32` to the stream. + pub fn write_u32>(&mut self, value: V) -> Result { + encode!(self.endian, value.borrow(), self.stream); + } + + /// Write an `i32` to the stream. + pub fn write_i32>(&mut self, value: V) -> Result { + encode!(self.endian, value.borrow(), self.stream); + } + + /// Write a `u16` to the stream. + pub fn write_u16>(&mut self, value: V) -> Result { + encode!(self.endian, value.borrow(), self.stream); + } + + /// Write an `i16` to the stream. + pub fn write_i16>(&mut self, value: V) -> Result { + encode!(self.endian, value.borrow(), self.stream); + } + + /// Write a `u8` to the stream. + pub fn write_u8>(&mut self, value: V) -> Result { + encode!(self.endian, value.borrow(), self.stream); + } + + /// Write an `i8` to the stream. + pub fn write_i8>(&mut self, value: V) -> Result { + encode!(self.endian, value.borrow(), self.stream); + } + + /// Write a byte buffer to the stream. + pub fn write_bytes>(&mut self, data: B) -> Result { + Ok(self.stream.write(data.as_ref())?) + } + + /// Write a byte buffer to the stream. + pub fn write_bytes_with_value(&mut self, count: usize, fill_value: u8) -> Result { + let mut buff = Vec::with_capacity(count) as Vec; + buff.resize(count, fill_value); + Ok(self.write_bytes(buff)?) + } + + /// Swap endianness to allow for reversing the writing mid stream + pub fn swap_endianness(&mut self) { + if self.endian == Endian::Big { + self.endian = Endian::Little; + } else { + self.endian = Endian::Big; + } + } } /// Trait for encoding to binary. pub trait Encode { - /// Encode self into the binary writer. - fn encode(&self, writer: &mut BinaryWriter) -> Result<()>; + /// Encode self into the binary writer. + fn encode(&self, writer: &mut BinaryWriter) -> Result<()>; } /// Trait for decoding from binary. pub trait Decode { - /// Decode from the binary reader into self. - fn decode(&mut self, reader: &mut BinaryReader) -> Result<()>; + /// Decode from the binary reader into self. + fn decode(&mut self, reader: &mut BinaryReader) -> Result<()>; } diff --git a/bxes/src/rust/bxes/src/binary_rw/cursor_stream.rs b/bxes/src/rust/bxes/src/binary_rw/cursor_stream.rs index 3e4c2a7d7..7b909971a 100644 --- a/bxes/src/rust/bxes/src/binary_rw/cursor_stream.rs +++ b/bxes/src/rust/bxes/src/binary_rw/cursor_stream.rs @@ -1,38 +1,40 @@ -use crate::binary_rw::core::{ReadStream, SeekStream}; -use crate::binary_rw::error::BinaryError; +use crate::binary_rw::{ + core::{ReadStream, SeekStream}, + error::BinaryError, +}; use std::io::{Cursor, Error, ErrorKind, Read, Seek, SeekFrom}; pub struct CursorStream<'a> { - cursor: Cursor<&'a [u8]>, + cursor: Cursor<&'a [u8]>, } impl<'a> CursorStream<'a> { - pub fn new(cursor: Cursor<&'a [u8]>) -> Self { - Self { cursor } - } + pub fn new(cursor: Cursor<&'a [u8]>) -> Self { + Self { cursor } + } } impl<'a> Read for CursorStream<'a> { - fn read(&mut self, buffer: &mut [u8]) -> std::io::Result { - self.cursor.read(buffer) - } + fn read(&mut self, buffer: &mut [u8]) -> std::io::Result { + self.cursor.read(buffer) + } } impl<'a> SeekStream for CursorStream<'a> { - fn seek(&mut self, to: usize) -> crate::binary_rw::core::Result { - match self.cursor.seek(SeekFrom::Start(to as u64)) { - Ok(result) => Ok(result as usize), - Err(_err) => Err(BinaryError::ReadPastEof), - } + fn seek(&mut self, to: usize) -> crate::binary_rw::core::Result { + match self.cursor.seek(SeekFrom::Start(to as u64)) { + Ok(result) => Ok(result as usize), + Err(_err) => Err(BinaryError::ReadPastEof), } + } - fn tell(&mut self) -> crate::binary_rw::core::Result { - Ok(self.cursor.position() as usize) - } + fn tell(&mut self) -> crate::binary_rw::core::Result { + Ok(self.cursor.position() as usize) + } - fn len(&self) -> crate::binary_rw::core::Result { - Ok(self.cursor.get_ref().len()) - } + fn len(&self) -> crate::binary_rw::core::Result { + Ok(self.cursor.get_ref().len()) + } } impl<'a> ReadStream for CursorStream<'a> {} diff --git a/bxes/src/rust/bxes/src/binary_rw/error.rs b/bxes/src/rust/bxes/src/binary_rw/error.rs index 2ac8af5a5..57483af26 100644 --- a/bxes/src/rust/bxes/src/binary_rw/error.rs +++ b/bxes/src/rust/bxes/src/binary_rw/error.rs @@ -2,19 +2,19 @@ use thiserror::Error; #[derive(Debug, Error)] pub enum BinaryError { - /// Error generated attempted to read past the end of file. - #[error("attempt to read past EOF")] - ReadPastEof, - /// Error generated trying to read the char type. - #[error("invalid character read from stream")] - InvalidChar, - /// Error generated converting between integers. - #[error(transparent)] - TryFromInt(#[from] std::num::TryFromIntError), - /// Error generated converting to UTF-8. - #[error(transparent)] - Utf8Error(#[from] std::string::FromUtf8Error), - /// Error generated by input / output. - #[error(transparent)] - Io(#[from] std::io::Error), + /// Error generated attempted to read past the end of file. + #[error("attempt to read past EOF")] + ReadPastEof, + /// Error generated trying to read the char type. + #[error("invalid character read from stream")] + InvalidChar, + /// Error generated converting between integers. + #[error(transparent)] + TryFromInt(#[from] std::num::TryFromIntError), + /// Error generated converting to UTF-8. + #[error(transparent)] + Utf8Error(#[from] std::string::FromUtf8Error), + /// Error generated by input / output. + #[error(transparent)] + Io(#[from] std::io::Error), } diff --git a/bxes/src/rust/bxes/src/binary_rw/file_stream.rs b/bxes/src/rust/bxes/src/binary_rw/file_stream.rs index 4c7c1270f..075b342c1 100644 --- a/bxes/src/rust/bxes/src/binary_rw/file_stream.rs +++ b/bxes/src/rust/bxes/src/binary_rw/file_stream.rs @@ -1,90 +1,88 @@ //https://github.com/mathias234/binary_rw/blob/master/src/stream/file.rs -use std::fs::{File, Metadata, OpenOptions}; -use std::io::prelude::*; -use std::io::{Cursor, Error, ErrorKind, Read, SeekFrom, Write}; -use std::path::Path; +use std::{ + fs::{File, Metadata, OpenOptions}, + io::{prelude::*, Cursor, Error, ErrorKind, Read, SeekFrom, Write}, + path::Path, +}; -use super::core::{ReadStream, SeekStream, WriteStream}; -use super::error::BinaryError; +use super::{ + core::{ReadStream, SeekStream, WriteStream}, + error::BinaryError, +}; /// Stream that wraps a file. pub struct FileStream { - file: File, - metadata: std::result::Result, + file: File, + metadata: std::result::Result, } impl FileStream { - /// Create a file stream. - pub fn new(file: File) -> Self { - Self { - metadata: file.metadata(), - file, - } + /// Create a file stream. + pub fn new(file: File) -> Self { + Self { + metadata: file.metadata(), + file, } + } - /// Create a file stream in write-only mode. - /// - /// If the file exists it is truncated, if it does not - /// exist it will be created. - pub fn create>(path: P) -> crate::binary_rw::core::Result { - Ok(FileStream::new(File::create(path.as_ref())?)) - } + /// Create a file stream in write-only mode. + /// + /// If the file exists it is truncated, if it does not + /// exist it will be created. + pub fn create>(path: P) -> crate::binary_rw::core::Result { + Ok(FileStream::new(File::create(path.as_ref())?)) + } - /// Attempts to open a file stream in read-only mode. - pub fn open>(path: P) -> crate::binary_rw::core::Result { - Ok(FileStream::new(File::open(path.as_ref())?)) - } + /// Attempts to open a file stream in read-only mode. + pub fn open>(path: P) -> crate::binary_rw::core::Result { + Ok(FileStream::new(File::open(path.as_ref())?)) + } - /// Attempts to open a file stream with read and write modes enabled. - pub fn write>(path: P) -> crate::binary_rw::core::Result { - Ok(FileStream::new( - OpenOptions::new().read(true).write(true).open(path)?, - )) - } + /// Attempts to open a file stream with read and write modes enabled. + pub fn write>(path: P) -> crate::binary_rw::core::Result { + Ok(FileStream::new(OpenOptions::new().read(true).write(true).open(path)?)) + } - /// Attempts to get the metadata for file - pub fn metadata(&self) -> std::io::Result<&Metadata> { - match self.metadata.as_ref() { - Ok(v) => Ok(v), - Err(e) => Err(std::io::Error::new(e.kind(), "Unable to get metadata")), - } + /// Attempts to get the metadata for file + pub fn metadata(&self) -> std::io::Result<&Metadata> { + match self.metadata.as_ref() { + Ok(v) => Ok(v), + Err(e) => Err(std::io::Error::new(e.kind(), "Unable to get metadata")), } + } } impl SeekStream for FileStream { - fn seek(&mut self, to: usize) -> crate::binary_rw::core::Result { - Ok(self.file.seek(SeekFrom::Start(to as u64))? as usize) - } + fn seek(&mut self, to: usize) -> crate::binary_rw::core::Result { + Ok(self.file.seek(SeekFrom::Start(to as u64))? as usize) + } - fn tell(&mut self) -> crate::binary_rw::core::Result { - Ok(self.file.seek(SeekFrom::Current(0))? as usize) - } + fn tell(&mut self) -> crate::binary_rw::core::Result { + Ok(self.file.seek(SeekFrom::Current(0))? as usize) + } - fn len(&self) -> crate::binary_rw::core::Result { - Ok(self.metadata()?.len().try_into()?) - } + fn len(&self) -> crate::binary_rw::core::Result { + Ok(self.metadata()?.len().try_into()?) + } } impl Read for FileStream { - fn read(&mut self, buffer: &mut [u8]) -> std::io::Result { - if self.tell().unwrap() + buffer.len() > self.metadata()?.len() as usize { - return Err(Error::new( - ErrorKind::UnexpectedEof, - BinaryError::ReadPastEof, - )); - } - Ok(self.file.read(buffer)?) + fn read(&mut self, buffer: &mut [u8]) -> std::io::Result { + if self.tell().unwrap() + buffer.len() > self.metadata()?.len() as usize { + return Err(Error::new(ErrorKind::UnexpectedEof, BinaryError::ReadPastEof)); } + Ok(self.file.read(buffer)?) + } } impl Write for FileStream { - fn write(&mut self, bytes: &[u8]) -> std::io::Result { - self.file.write(bytes) - } + fn write(&mut self, bytes: &[u8]) -> std::io::Result { + self.file.write(bytes) + } - fn flush(&mut self) -> std::io::Result<()> { - self.file.flush() - } + fn flush(&mut self) -> std::io::Result<()> { + self.file.flush() + } } impl ReadStream for FileStream {} diff --git a/bxes/src/rust/bxes/src/models/domain/bxes_artifact.rs b/bxes/src/rust/bxes/src/models/domain/bxes_artifact.rs index e770c1368..a54c0fc4c 100644 --- a/bxes/src/rust/bxes/src/models/domain/bxes_artifact.rs +++ b/bxes/src/rust/bxes/src/models/domain/bxes_artifact.rs @@ -1,52 +1,54 @@ use crate::models::domain::bxes_value::BxesValue; -use std::hash::{Hash, Hasher}; -use std::rc::Rc; +use std::{ + hash::{Hash, Hasher}, + rc::Rc, +}; #[derive(Debug, Clone)] pub struct BxesArtifact { - pub items: Vec, + pub items: Vec, } impl Hash for BxesArtifact { - fn hash(&self, state: &mut H) { - for item in &self.items { - item.hash(state); - } + fn hash(&self, state: &mut H) { + for item in &self.items { + item.hash(state); } + } } impl PartialEq for BxesArtifact { - fn eq(&self, other: &Self) -> bool { - if self.items.len() != other.items.len() { - return false; - } - - for (self_item, other_item) in self.items.iter().zip(&other.items) { - if !self_item.eq(&other_item) { - return false; - } - } - - true + fn eq(&self, other: &Self) -> bool { + if self.items.len() != other.items.len() { + return false; } + + for (self_item, other_item) in self.items.iter().zip(&other.items) { + if !self_item.eq(&other_item) { + return false; + } + } + + true + } } #[derive(Clone, Debug)] pub struct BxesArtifactItem { - pub model: Rc>, - pub instance: Rc>, - pub transition: Rc>, + pub model: Rc>, + pub instance: Rc>, + pub transition: Rc>, } impl Hash for BxesArtifactItem { - fn hash(&self, state: &mut H) { - self.instance.hash(state); - self.transition.hash(state); - } + fn hash(&self, state: &mut H) { + self.instance.hash(state); + self.transition.hash(state); + } } impl PartialEq for BxesArtifactItem { - fn eq(&self, other: &Self) -> bool { - self.instance == other.instance && self.transition == other.transition - } + fn eq(&self, other: &Self) -> bool { + self.instance == other.instance && self.transition == other.transition + } } diff --git a/bxes/src/rust/bxes/src/models/domain/bxes_driver.rs b/bxes/src/rust/bxes/src/models/domain/bxes_driver.rs index 578fa0c6e..e2713eb26 100644 --- a/bxes/src/rust/bxes/src/models/domain/bxes_driver.rs +++ b/bxes/src/rust/bxes/src/models/domain/bxes_driver.rs @@ -1,65 +1,65 @@ use crate::models::domain::bxes_value::BxesValue; -use std::hash::{Hash, Hasher}; -use std::rc::Rc; +use std::{ + hash::{Hash, Hasher}, + rc::Rc, +}; #[derive(Debug, Clone)] pub struct BxesDrivers { - pub drivers: Vec, + pub drivers: Vec, } impl Hash for BxesDrivers { - fn hash(&self, state: &mut H) { - for driver in &self.drivers { - driver.hash(state); - } + fn hash(&self, state: &mut H) { + for driver in &self.drivers { + driver.hash(state); } + } } impl PartialEq for BxesDrivers { - fn eq(&self, other: &Self) -> bool { - if self.drivers.len() != other.drivers.len() { - return false; - } - - for (self_driver, other_driver) in self.drivers.iter().zip(&other.drivers) { - if !self_driver.eq(other_driver) { - return false; - } - } + fn eq(&self, other: &Self) -> bool { + if self.drivers.len() != other.drivers.len() { + return false; + } - return true; + for (self_driver, other_driver) in self.drivers.iter().zip(&other.drivers) { + if !self_driver.eq(other_driver) { + return false; + } } + + return true; + } } #[derive(Clone, Debug)] pub struct BxesDriver { - pub amount: BxesValue, - pub name: Rc>, - pub driver_type: Rc>, + pub amount: BxesValue, + pub name: Rc>, + pub driver_type: Rc>, } impl BxesDriver { - pub fn amount(&self) -> f64 { - if let BxesValue::Float64(amount) = self.amount { - return amount; - } - - panic!("Expected f64 BxesValue, got {:?}", self.amount) + pub fn amount(&self) -> f64 { + if let BxesValue::Float64(amount) = self.amount { + return amount; } + + panic!("Expected f64 BxesValue, got {:?}", self.amount) + } } impl Hash for BxesDriver { - fn hash(&self, state: &mut H) { - self.amount.hash(state); - self.name.hash(state); - self.driver_type.hash(state); - } + fn hash(&self, state: &mut H) { + self.amount.hash(state); + self.name.hash(state); + self.driver_type.hash(state); + } } impl PartialEq for BxesDriver { - fn eq(&self, other: &Self) -> bool { - self.amount == other.amount - && self.name == other.name - && self.driver_type == other.driver_type - } + fn eq(&self, other: &Self) -> bool { + self.amount == other.amount && self.name == other.name && self.driver_type == other.driver_type + } } diff --git a/bxes/src/rust/bxes/src/models/domain/bxes_event_log.rs b/bxes/src/rust/bxes/src/models/domain/bxes_event_log.rs index 2deeb985f..87589c614 100644 --- a/bxes/src/rust/bxes/src/models/domain/bxes_event_log.rs +++ b/bxes/src/rust/bxes/src/models/domain/bxes_event_log.rs @@ -1,81 +1,79 @@ -use crate::models::domain::bxes_log_metadata::BxesEventLogMetadata; -use crate::models::domain::bxes_value::BxesValue; -use crate::models::domain::utils::compare_list_of_attributes; +use crate::models::domain::{bxes_log_metadata::BxesEventLogMetadata, bxes_value::BxesValue, utils::compare_list_of_attributes}; use std::rc::Rc; #[derive(Debug)] pub struct BxesEventLog { - pub version: u32, - pub metadata: BxesEventLogMetadata, - pub variants: Vec, + pub version: u32, + pub metadata: BxesEventLogMetadata, + pub variants: Vec, } impl PartialEq for BxesEventLog { - fn eq(&self, other: &Self) -> bool { - if self.version != other.version { - return false; - } - - if !self.metadata.eq(&other.metadata) { - return false; - } + fn eq(&self, other: &Self) -> bool { + if self.version != other.version { + return false; + } - for (self_variant, other_variant) in self.variants.iter().zip(&other.variants) { - if !self_variant.eq(&other_variant) { - return false; - } - } + if !self.metadata.eq(&other.metadata) { + return false; + } - return true; + for (self_variant, other_variant) in self.variants.iter().zip(&other.variants) { + if !self_variant.eq(&other_variant) { + return false; + } } + + return true; + } } #[derive(Debug)] pub struct BxesTraceVariant { - pub traces_count: u32, - pub metadata: Vec<(Rc>, Rc>)>, - pub events: Vec, + pub traces_count: u32, + pub metadata: Vec<(Rc>, Rc>)>, + pub events: Vec, } impl PartialEq for BxesTraceVariant { - fn eq(&self, other: &Self) -> bool { - if self.traces_count != other.traces_count { - return false; - } - - if self.events.len() != other.events.len() { - return false; - } + fn eq(&self, other: &Self) -> bool { + if self.traces_count != other.traces_count { + return false; + } - for (self_event, other_event) in self.events.iter().zip(&other.events) { - if !self_event.eq(&other_event) { - return false; - } - } + if self.events.len() != other.events.len() { + return false; + } - return true; + for (self_event, other_event) in self.events.iter().zip(&other.events) { + if !self_event.eq(&other_event) { + return false; + } } + + return true; + } } #[derive(Debug, Clone)] pub struct BxesEvent { - pub name: Rc>, - pub timestamp: i64, - pub attributes: Option>, Rc>)>>, + pub name: Rc>, + pub timestamp: i64, + pub attributes: Option>, Rc>)>>, } impl PartialEq for BxesEvent { - fn eq(&self, other: &Self) -> bool { - if !self.compare_events_by_properties(other) { - return false; - } - - compare_list_of_attributes(&self.attributes, &other.attributes) + fn eq(&self, other: &Self) -> bool { + if !self.compare_events_by_properties(other) { + return false; } + + compare_list_of_attributes(&self.attributes, &other.attributes) + } } impl BxesEvent { - fn compare_events_by_properties(&self, other: &Self) -> bool { - self.name == other.name && self.timestamp == other.timestamp - } + fn compare_events_by_properties(&self, other: &Self) -> bool { + self.name == other.name && self.timestamp == other.timestamp + } } diff --git a/bxes/src/rust/bxes/src/models/domain/bxes_lifecycle.rs b/bxes/src/rust/bxes/src/models/domain/bxes_lifecycle.rs index e1b987305..6ffb0dd78 100644 --- a/bxes/src/rust/bxes/src/models/domain/bxes_lifecycle.rs +++ b/bxes/src/rust/bxes/src/models/domain/bxes_lifecycle.rs @@ -3,48 +3,48 @@ use variant_count::VariantCount; #[derive(Clone, Debug, PartialEq, Eq)] pub enum Lifecycle { - Braf(BrafLifecycle), - Standard(StandardLifecycle), + Braf(BrafLifecycle), + Standard(StandardLifecycle), } #[derive(FromPrimitive, ToPrimitive, Clone, Debug, PartialEq, Eq, Hash, VariantCount)] pub enum BrafLifecycle { - Unspecified = 0, - Closed = 1, - ClosedCancelled = 2, - ClosedCancelledAborted = 3, - ClosedCancelledError = 4, - ClosedCancelledExited = 5, - ClosedCancelledObsolete = 6, - ClosedCancelledTerminated = 7, - Completed = 8, - CompletedFailed = 9, - CompletedSuccess = 10, - Open = 11, - OpenNotRunning = 12, - OpenNotRunningAssigned = 13, - OpenNotRunningReserved = 14, - OpenNotRunningSuspendedAssigned = 15, - OpenNotRunningSuspendedReserved = 16, - OpenRunning = 17, - OpenRunningInProgress = 18, - OpenRunningSuspended = 19, + Unspecified = 0, + Closed = 1, + ClosedCancelled = 2, + ClosedCancelledAborted = 3, + ClosedCancelledError = 4, + ClosedCancelledExited = 5, + ClosedCancelledObsolete = 6, + ClosedCancelledTerminated = 7, + Completed = 8, + CompletedFailed = 9, + CompletedSuccess = 10, + Open = 11, + OpenNotRunning = 12, + OpenNotRunningAssigned = 13, + OpenNotRunningReserved = 14, + OpenNotRunningSuspendedAssigned = 15, + OpenNotRunningSuspendedReserved = 16, + OpenRunning = 17, + OpenRunningInProgress = 18, + OpenRunningSuspended = 19, } #[derive(FromPrimitive, ToPrimitive, Clone, Debug, PartialEq, Eq, Hash, VariantCount)] pub enum StandardLifecycle { - Unspecified = 0, - Assign = 1, - AteAbort = 2, - Autoskip = 3, - Complete = 4, - ManualSkip = 5, - PiAbort = 6, - ReAssign = 7, - Resume = 8, - Schedule = 9, - Start = 10, - Suspend = 11, - Unknown = 12, - Withdraw = 13, + Unspecified = 0, + Assign = 1, + AteAbort = 2, + Autoskip = 3, + Complete = 4, + ManualSkip = 5, + PiAbort = 6, + ReAssign = 7, + Resume = 8, + Schedule = 9, + Start = 10, + Suspend = 11, + Unknown = 12, + Withdraw = 13, } diff --git a/bxes/src/rust/bxes/src/models/domain/bxes_log_metadata.rs b/bxes/src/rust/bxes/src/models/domain/bxes_log_metadata.rs index 9a775bfe3..4d4805719 100644 --- a/bxes/src/rust/bxes/src/models/domain/bxes_log_metadata.rs +++ b/bxes/src/rust/bxes/src/models/domain/bxes_log_metadata.rs @@ -1,5 +1,4 @@ -use std::hash::Hash; -use std::rc::Rc; +use std::{hash::Hash, rc::Rc}; use num_derive::{FromPrimitive, ToPrimitive}; use variant_count::VariantCount; @@ -8,34 +7,34 @@ use crate::models::domain::bxes_value::BxesValue; #[derive(Debug, PartialEq, Eq)] pub struct BxesEventLogMetadata { - pub extensions: Option>, - pub classifiers: Option>, - pub properties: Option>, Rc>)>>, - pub globals: Option>, + pub extensions: Option>, + pub classifiers: Option>, + pub properties: Option>, Rc>)>>, + pub globals: Option>, } #[derive(Debug, PartialEq, Eq)] pub struct BxesExtension { - pub name: Rc>, - pub prefix: Rc>, - pub uri: Rc>, + pub name: Rc>, + pub prefix: Rc>, + pub uri: Rc>, } #[derive(Debug, PartialEq, Eq)] pub struct BxesClassifier { - pub name: Rc>, - pub keys: Vec>>, + pub name: Rc>, + pub keys: Vec>>, } #[derive(Debug, FromPrimitive, ToPrimitive, VariantCount, PartialEq, Eq)] pub enum BxesGlobalKind { - Event = 0, - Trace = 1, - Log = 2, + Event = 0, + Trace = 1, + Log = 2, } #[derive(Debug, PartialEq, Eq)] pub struct BxesGlobal { - pub entity_kind: BxesGlobalKind, - pub globals: Vec<(Rc>, Rc>)>, + pub entity_kind: BxesGlobalKind, + pub globals: Vec<(Rc>, Rc>)>, } diff --git a/bxes/src/rust/bxes/src/models/domain/bxes_value.rs b/bxes/src/rust/bxes/src/models/domain/bxes_value.rs index 7955807ad..c1f7c1176 100644 --- a/bxes/src/rust/bxes/src/models/domain/bxes_value.rs +++ b/bxes/src/rust/bxes/src/models/domain/bxes_value.rs @@ -1,75 +1,79 @@ -use crate::models::domain::bxes_artifact::BxesArtifact; -use crate::models::domain::bxes_driver::BxesDrivers; -use crate::models::domain::bxes_lifecycle::{BrafLifecycle, StandardLifecycle}; -use crate::models::domain::software_event_type::SoftwareEventType; -use std::hash::{Hash, Hasher}; -use std::rc::Rc; +use crate::models::domain::{ + bxes_artifact::BxesArtifact, + bxes_driver::BxesDrivers, + bxes_lifecycle::{BrafLifecycle, StandardLifecycle}, + software_event_type::SoftwareEventType, +}; +use std::{ + hash::{Hash, Hasher}, + rc::Rc, +}; #[derive(Clone, Debug)] pub enum BxesValue { - Null, - Int32(i32), - Int64(i64), - Uint32(u32), - Uint64(u64), - Float32(f32), - Float64(f64), - String(Rc>), - Bool(bool), - Timestamp(i64), - BrafLifecycle(BrafLifecycle), - StandardLifecycle(StandardLifecycle), - Artifact(BxesArtifact), - Drivers(BxesDrivers), - Guid(uuid::Uuid), - SoftwareEventType(SoftwareEventType), + Null, + Int32(i32), + Int64(i64), + Uint32(u32), + Uint64(u64), + Float32(f32), + Float64(f64), + String(Rc>), + Bool(bool), + Timestamp(i64), + BrafLifecycle(BrafLifecycle), + StandardLifecycle(StandardLifecycle), + Artifact(BxesArtifact), + Drivers(BxesDrivers), + Guid(uuid::Uuid), + SoftwareEventType(SoftwareEventType), } impl Hash for BxesValue { - fn hash(&self, state: &mut H) { - match self { - BxesValue::Null => state.write_u8(0), - BxesValue::Int32(value) => state.write_i32(*value), - BxesValue::Int64(value) => state.write_i64(*value), - BxesValue::Uint32(value) => state.write_u32(*value), - BxesValue::Uint64(value) => state.write_u64(*value), - BxesValue::Float32(value) => state.write(value.to_le_bytes().as_slice()), - BxesValue::Float64(value) => state.write(value.to_le_bytes().as_slice()), - BxesValue::String(value) => state.write(value.as_bytes()), - BxesValue::Bool(value) => state.write(if *value { &[1] } else { &[0] }), - BxesValue::Timestamp(value) => state.write_i64(*value), - BxesValue::BrafLifecycle(value) => value.hash(state), - BxesValue::StandardLifecycle(value) => value.hash(state), - BxesValue::Artifact(artifacts) => artifacts.hash(state), - BxesValue::Drivers(drivers) => drivers.hash(state), - BxesValue::Guid(guid) => guid.hash(state), - BxesValue::SoftwareEventType(event_type) => event_type.hash(state), - } + fn hash(&self, state: &mut H) { + match self { + BxesValue::Null => state.write_u8(0), + BxesValue::Int32(value) => state.write_i32(*value), + BxesValue::Int64(value) => state.write_i64(*value), + BxesValue::Uint32(value) => state.write_u32(*value), + BxesValue::Uint64(value) => state.write_u64(*value), + BxesValue::Float32(value) => state.write(value.to_le_bytes().as_slice()), + BxesValue::Float64(value) => state.write(value.to_le_bytes().as_slice()), + BxesValue::String(value) => state.write(value.as_bytes()), + BxesValue::Bool(value) => state.write(if *value { &[1] } else { &[0] }), + BxesValue::Timestamp(value) => state.write_i64(*value), + BxesValue::BrafLifecycle(value) => value.hash(state), + BxesValue::StandardLifecycle(value) => value.hash(state), + BxesValue::Artifact(artifacts) => artifacts.hash(state), + BxesValue::Drivers(drivers) => drivers.hash(state), + BxesValue::Guid(guid) => guid.hash(state), + BxesValue::SoftwareEventType(event_type) => event_type.hash(state), } + } } impl PartialEq for BxesValue { - fn eq(&self, other: &Self) -> bool { - match (self, other) { - (Self::Null, Self::Null) => true, - (Self::Int32(left), Self::Int32(right)) => left == right, - (Self::Int64(left), Self::Int64(right)) => left == right, - (Self::Uint32(left), Self::Uint32(right)) => left == right, - (Self::Uint64(left), Self::Uint64(right)) => left == right, - (Self::Float32(left), Self::Float32(right)) => left == right, - (Self::Float64(left), Self::Float64(right)) => left == right, - (Self::String(left), Self::String(right)) => left == right, - (Self::Bool(left), Self::Bool(right)) => left == right, - (Self::Timestamp(left), Self::Timestamp(right)) => left == right, - (Self::BrafLifecycle(left), Self::BrafLifecycle(right)) => left == right, - (Self::StandardLifecycle(left), Self::StandardLifecycle(right)) => left == right, - (Self::Artifact(left), Self::Artifact(right)) => left == right, - (Self::Drivers(left), Self::Drivers(right)) => left == right, - (Self::Guid(left), Self::Guid(right)) => left == right, - (Self::SoftwareEventType(left), Self::SoftwareEventType(right)) => left == right, - _ => false, - } + fn eq(&self, other: &Self) -> bool { + match (self, other) { + (Self::Null, Self::Null) => true, + (Self::Int32(left), Self::Int32(right)) => left == right, + (Self::Int64(left), Self::Int64(right)) => left == right, + (Self::Uint32(left), Self::Uint32(right)) => left == right, + (Self::Uint64(left), Self::Uint64(right)) => left == right, + (Self::Float32(left), Self::Float32(right)) => left == right, + (Self::Float64(left), Self::Float64(right)) => left == right, + (Self::String(left), Self::String(right)) => left == right, + (Self::Bool(left), Self::Bool(right)) => left == right, + (Self::Timestamp(left), Self::Timestamp(right)) => left == right, + (Self::BrafLifecycle(left), Self::BrafLifecycle(right)) => left == right, + (Self::StandardLifecycle(left), Self::StandardLifecycle(right)) => left == right, + (Self::Artifact(left), Self::Artifact(right)) => left == right, + (Self::Drivers(left), Self::Drivers(right)) => left == right, + (Self::Guid(left), Self::Guid(right)) => left == right, + (Self::SoftwareEventType(left), Self::SoftwareEventType(right)) => left == right, + _ => false, } + } } impl Eq for BxesValue {} diff --git a/bxes/src/rust/bxes/src/models/domain/software_event_type.rs b/bxes/src/rust/bxes/src/models/domain/software_event_type.rs index c421f983f..f54ee085d 100644 --- a/bxes/src/rust/bxes/src/models/domain/software_event_type.rs +++ b/bxes/src/rust/bxes/src/models/domain/software_event_type.rs @@ -3,11 +3,11 @@ use variant_count::VariantCount; #[derive(FromPrimitive, ToPrimitive, VariantCount, Clone, Debug, Hash, PartialEq, Eq)] pub enum SoftwareEventType { - Unspecified = 0, - Call = 1, - Return = 2, - Throws = 3, - Handle = 4, - Calling = 5, - Returning = 6, + Unspecified = 0, + Call = 1, + Return = 2, + Throws = 3, + Handle = 4, + Calling = 5, + Returning = 6, } diff --git a/bxes/src/rust/bxes/src/models/domain/type_ids.rs b/bxes/src/rust/bxes/src/models/domain/type_ids.rs index 9448ba530..6a3a3939f 100644 --- a/bxes/src/rust/bxes/src/models/domain/type_ids.rs +++ b/bxes/src/rust/bxes/src/models/domain/type_ids.rs @@ -1,44 +1,44 @@ -use num_derive::{FromPrimitive, ToPrimitive}; use crate::models::domain::bxes_value::BxesValue; +use num_derive::{FromPrimitive, ToPrimitive}; use variant_count::VariantCount; #[derive(FromPrimitive, ToPrimitive, VariantCount, Debug, PartialEq, Eq, Hash, Clone)] pub enum TypeIds { - Null = 0, - I32 = 1, - I64 = 2, - U32 = 3, - U64 = 4, - F32 = 5, - F64 = 6, - String = 7, - Bool = 8, - Timestamp = 9, - BrafLifecycle = 10, - StandardLifecycle = 11, - Artifact = 12, - Drivers = 13, - Guid = 14, - SoftwareEventType = 15, + Null = 0, + I32 = 1, + I64 = 2, + U32 = 3, + U64 = 4, + F32 = 5, + F64 = 6, + String = 7, + Bool = 8, + Timestamp = 9, + BrafLifecycle = 10, + StandardLifecycle = 11, + Artifact = 12, + Drivers = 13, + Guid = 14, + SoftwareEventType = 15, } pub fn get_type_id(value: &BxesValue) -> TypeIds { - match value { - BxesValue::Null => TypeIds::Null, - BxesValue::Int32(_) => TypeIds::I32, - BxesValue::Int64(_) => TypeIds::I64, - BxesValue::Uint32(_) => TypeIds::U32, - BxesValue::Uint64(_) => TypeIds::U64, - BxesValue::Float32(_) => TypeIds::F32, - BxesValue::Float64(_) => TypeIds::F64, - BxesValue::String(_) => TypeIds::String, - BxesValue::Bool(_) => TypeIds::Bool, - BxesValue::Timestamp(_) => TypeIds::Timestamp, - BxesValue::BrafLifecycle(_) => TypeIds::BrafLifecycle, - BxesValue::StandardLifecycle(_) => TypeIds::StandardLifecycle, - BxesValue::Artifact(_) => TypeIds::Artifact, - BxesValue::Drivers(_) => TypeIds::Drivers, - BxesValue::Guid(_) => TypeIds::Guid, - BxesValue::SoftwareEventType(_) => TypeIds::SoftwareEventType, - } + match value { + BxesValue::Null => TypeIds::Null, + BxesValue::Int32(_) => TypeIds::I32, + BxesValue::Int64(_) => TypeIds::I64, + BxesValue::Uint32(_) => TypeIds::U32, + BxesValue::Uint64(_) => TypeIds::U64, + BxesValue::Float32(_) => TypeIds::F32, + BxesValue::Float64(_) => TypeIds::F64, + BxesValue::String(_) => TypeIds::String, + BxesValue::Bool(_) => TypeIds::Bool, + BxesValue::Timestamp(_) => TypeIds::Timestamp, + BxesValue::BrafLifecycle(_) => TypeIds::BrafLifecycle, + BxesValue::StandardLifecycle(_) => TypeIds::StandardLifecycle, + BxesValue::Artifact(_) => TypeIds::Artifact, + BxesValue::Drivers(_) => TypeIds::Drivers, + BxesValue::Guid(_) => TypeIds::Guid, + BxesValue::SoftwareEventType(_) => TypeIds::SoftwareEventType, + } } diff --git a/bxes/src/rust/bxes/src/models/domain/utils.rs b/bxes/src/rust/bxes/src/models/domain/utils.rs index d7079d39c..98d738b80 100644 --- a/bxes/src/rust/bxes/src/models/domain/utils.rs +++ b/bxes/src/rust/bxes/src/models/domain/utils.rs @@ -2,37 +2,37 @@ use crate::models::domain::bxes_value::BxesValue; use std::{collections::HashSet, rc::Rc}; pub fn compare_list_of_attributes( - first_attributes: &Option>, Rc>)>>, - second_attributes: &Option>, Rc>)>>, + first_attributes: &Option>, Rc>)>>, + second_attributes: &Option>, Rc>)>>, ) -> bool { - if first_attributes.is_none() && second_attributes.is_none() { - return true; - } + if first_attributes.is_none() && second_attributes.is_none() { + return true; + } - if let Some(self_attributes) = first_attributes.as_ref() { - if let Some(other_attributes) = second_attributes.as_ref() { - if self_attributes.len() != other_attributes.len() { - return false; - } + if let Some(self_attributes) = first_attributes.as_ref() { + if let Some(other_attributes) = second_attributes.as_ref() { + if self_attributes.len() != other_attributes.len() { + return false; + } - let first_set = self_attributes - .iter() - .collect::>, Rc>)>>(); + let first_set = self_attributes + .iter() + .collect::>, Rc>)>>(); - let second_set = other_attributes - .iter() - .collect::>, Rc>)>>(); + let second_set = other_attributes + .iter() + .collect::>, Rc>)>>(); - return first_set.eq(&second_set); - } + return first_set.eq(&second_set); } + } - return false; + return false; } pub fn attributes_equals( - first_attribute: &(Rc>, Rc>), - second_attribute: &(Rc>, Rc>), + first_attribute: &(Rc>, Rc>), + second_attribute: &(Rc>, Rc>), ) -> bool { - first_attribute.0.eq(&second_attribute.0) && first_attribute.1.eq(&second_attribute.1) + first_attribute.0.eq(&second_attribute.0) && first_attribute.1.eq(&second_attribute.1) } diff --git a/bxes/src/rust/bxes/src/models/system_models.rs b/bxes/src/rust/bxes/src/models/system_models.rs index a82441071..493c61789 100644 --- a/bxes/src/rust/bxes/src/models/system_models.rs +++ b/bxes/src/rust/bxes/src/models/system_models.rs @@ -2,25 +2,25 @@ use crate::models::domain::type_ids::TypeIds; #[derive(Debug, PartialEq, Eq, Hash, Clone)] pub struct ValueAttributeDescriptor { - pub type_id: TypeIds, - pub name: String, + pub type_id: TypeIds, + pub name: String, } impl ValueAttributeDescriptor { - pub fn new(type_id: TypeIds, name: String) -> Self { - Self { type_id, name } - } + pub fn new(type_id: TypeIds, name: String) -> Self { + Self { type_id, name } + } } #[derive(Debug, PartialEq, Eq, Clone)] pub struct SystemMetadata { - pub values_attrs: Option>, + pub values_attrs: Option>, } impl SystemMetadata { - pub fn new(value_attributes: Option>) -> Self { - Self { - values_attrs: value_attributes, - } + pub fn new(value_attributes: Option>) -> Self { + Self { + values_attrs: value_attributes, } + } } diff --git a/bxes/src/rust/bxes/src/read/errors.rs b/bxes/src/rust/bxes/src/read/errors.rs index 01b7a2e52..05a295c76 100644 --- a/bxes/src/rust/bxes/src/read/errors.rs +++ b/bxes/src/rust/bxes/src/read/errors.rs @@ -3,110 +3,103 @@ use std::string::FromUtf8Error; #[derive(Debug)] pub enum BxesReadError { - FailedToOpenFile(String), - FailedToReadValue(FailedToReadValueError), - FailedToReadPos(String), - FailedToCreateUtf8String(FromUtf8Error), - FailedToParseTypeId(u8), - FailedToIndexValue(usize), - FailedToIndexKeyValue(usize), - LifecycleOfEventOutOfRange, - EventAttributeKeyIsNotAString, - VersionsMismatchError(VersionsMismatchError), - FailedToExtractArchive, - TooManyFilesInArchive, - FailedToCreateTempDir, - InvalidArchive(String), - ExpectedString(BxesValue), - Leb128ReadError(String), - ValueAttributeNameIsNotAString, + FailedToOpenFile(String), + FailedToReadValue(FailedToReadValueError), + FailedToReadPos(String), + FailedToCreateUtf8String(FromUtf8Error), + FailedToParseTypeId(u8), + FailedToIndexValue(usize), + FailedToIndexKeyValue(usize), + LifecycleOfEventOutOfRange, + EventAttributeKeyIsNotAString, + VersionsMismatchError(VersionsMismatchError), + FailedToExtractArchive, + TooManyFilesInArchive, + FailedToCreateTempDir, + InvalidArchive(String), + ExpectedString(BxesValue), + Leb128ReadError(String), + ValueAttributeNameIsNotAString, } impl ToString for BxesReadError { - fn to_string(&self) -> String { - match self { - BxesReadError::FailedToOpenFile(value) => format!("Failed to open file {}", value), - BxesReadError::FailedToReadValue(err) => { - format!("Failed to read value: {}", err.to_string()) - } - BxesReadError::FailedToReadPos(error_message) => { - format!("Failed to read pos from stream: {}", error_message) - } - BxesReadError::FailedToCreateUtf8String(err) => { - format!("Failed to create string: {}", err.to_string()) - } - BxesReadError::FailedToParseTypeId(type_id) => { - format!("Failed to parse type id: {}", type_id) - } - BxesReadError::FailedToIndexValue(index) => { - format!("Failed to find bxes value for index: {}", index) - } - BxesReadError::FailedToIndexKeyValue(index) => { - format!("Failed to find kv pair for index: {}", index) - } - BxesReadError::LifecycleOfEventOutOfRange => "LifecycleOfEventOutOfRange".to_string(), - BxesReadError::EventAttributeKeyIsNotAString => { - "EventAttributeKeyIsNotAString".to_string() - } - BxesReadError::VersionsMismatchError(err) => err.to_string(), - BxesReadError::FailedToExtractArchive => "FailedToExtractArchive".to_string(), - BxesReadError::TooManyFilesInArchive => "TooManyFilesInArchive".to_string(), - BxesReadError::FailedToCreateTempDir => "FailedToCreateTempDir".to_string(), - BxesReadError::InvalidArchive(message) => format!("Invalid bxes archive: {}", message), - BxesReadError::ExpectedString(value) => { - format!("Expected string value, found: {:?}", value) - } - BxesReadError::Leb128ReadError(message) => { - format!("Failed to read LEB128 encoded value: {}", message) - } - BxesReadError::ValueAttributeNameIsNotAString => { - "Value attribute name was not a string".to_string() - } - } + fn to_string(&self) -> String { + match self { + BxesReadError::FailedToOpenFile(value) => format!("Failed to open file {}", value), + BxesReadError::FailedToReadValue(err) => { + format!("Failed to read value: {}", err.to_string()) + } + BxesReadError::FailedToReadPos(error_message) => { + format!("Failed to read pos from stream: {}", error_message) + } + BxesReadError::FailedToCreateUtf8String(err) => { + format!("Failed to create string: {}", err.to_string()) + } + BxesReadError::FailedToParseTypeId(type_id) => { + format!("Failed to parse type id: {}", type_id) + } + BxesReadError::FailedToIndexValue(index) => { + format!("Failed to find bxes value for index: {}", index) + } + BxesReadError::FailedToIndexKeyValue(index) => { + format!("Failed to find kv pair for index: {}", index) + } + BxesReadError::LifecycleOfEventOutOfRange => "LifecycleOfEventOutOfRange".to_string(), + BxesReadError::EventAttributeKeyIsNotAString => "EventAttributeKeyIsNotAString".to_string(), + BxesReadError::VersionsMismatchError(err) => err.to_string(), + BxesReadError::FailedToExtractArchive => "FailedToExtractArchive".to_string(), + BxesReadError::TooManyFilesInArchive => "TooManyFilesInArchive".to_string(), + BxesReadError::FailedToCreateTempDir => "FailedToCreateTempDir".to_string(), + BxesReadError::InvalidArchive(message) => format!("Invalid bxes archive: {}", message), + BxesReadError::ExpectedString(value) => { + format!("Expected string value, found: {:?}", value) + } + BxesReadError::Leb128ReadError(message) => { + format!("Failed to read LEB128 encoded value: {}", message) + } + BxesReadError::ValueAttributeNameIsNotAString => "Value attribute name was not a string".to_string(), } + } } #[derive(Debug)] pub struct FailedToReadValueError { - pub offset: usize, - pub message: String, + pub offset: usize, + pub message: String, } impl ToString for FailedToReadValueError { - fn to_string(&self) -> String { - format!( - "Failed to read value at offset {}, error: {}", - self.offset, self.message - ) - } + fn to_string(&self) -> String { + format!("Failed to read value at offset {}, error: {}", self.offset, self.message) + } } impl FailedToReadValueError { - pub fn new(offset: usize, message: String) -> Self { - Self { offset, message } - } + pub fn new(offset: usize, message: String) -> Self { + Self { offset, message } + } } #[derive(Debug)] pub struct VersionsMismatchError { - previous_version: u32, - current_version: u32, + previous_version: u32, + current_version: u32, } impl ToString for VersionsMismatchError { - fn to_string(&self) -> String { - format!( - "Versions mismatch: previous version: {}, current version: {}", - self.previous_version, self.current_version - ) - } + fn to_string(&self) -> String { + format!( + "Versions mismatch: previous version: {}, current version: {}", + self.previous_version, self.current_version + ) + } } impl VersionsMismatchError { - pub fn new(previous_version: u32, current_version: u32) -> Self { - Self { - previous_version, - current_version, - } + pub fn new(previous_version: u32, current_version: u32) -> Self { + Self { + previous_version, + current_version, } + } } diff --git a/bxes/src/rust/bxes/src/read/multiple_files_bxes_reader.rs b/bxes/src/rust/bxes/src/read/multiple_files_bxes_reader.rs index 0b322d22c..1f55a95d5 100644 --- a/bxes/src/rust/bxes/src/read/multiple_files_bxes_reader.rs +++ b/bxes/src/rust/bxes/src/read/multiple_files_bxes_reader.rs @@ -1,127 +1,118 @@ -use crate::models::domain::bxes_event_log::{BxesEventLog, BxesTraceVariant}; -use crate::models::domain::bxes_log_metadata::BxesEventLogMetadata; -use crate::read::read_context::{ReadContext, ReadMetadata}; -use crate::utils::buffered_stream::BufferedReadFileStream; use crate::{ - binary_rw::core::{BinaryReader, Endian}, - constants::*, + binary_rw::core::{BinaryReader, Endian}, + constants::*, + models::domain::{ + bxes_event_log::{BxesEventLog, BxesTraceVariant}, + bxes_log_metadata::BxesEventLogMetadata, + }, + read::read_context::{ReadContext, ReadMetadata}, + utils::buffered_stream::BufferedReadFileStream, }; use std::path::Path; -use std::ptr::read; use super::{errors::*, read_utils::*}; -pub fn read_bxes_multiple_files( - directory_path: &str, -) -> Result { - let mut read_metadata = ReadMetadata::empty(); - let mut context = ReadContext::new_without_reader(&mut read_metadata); - - let mut stream = open_file(directory_path, SYSTEM_METADATA_FILE_NAME)?; - let mut reader = BinaryReader::new(&mut stream, Endian::Little); - context.set_reader(&mut reader); - let mut version = read_system_metadata(&mut context)?; - - let mut stream = open_file(directory_path, VALUES_FILE_NAME)?; - let mut reader = BinaryReader::new(&mut stream, Endian::Little); - context.set_reader(&mut reader); - read_values(&mut context, &mut version)?; - - let mut stream = open_file(directory_path, KEY_VALUES_FILE_NAME)?; - let mut reader = BinaryReader::new(&mut stream, Endian::Little); - context.set_reader(&mut reader); - read_key_values(&mut context, &mut version)?; - - let mut stream = open_file(directory_path, METADATA_FILE_NAME)?; - let mut reader = BinaryReader::new(&mut stream, Endian::Little); - context.set_reader(&mut reader); - let metadata = read_metadata_file(&mut context, &mut version)?; - - let mut stream = open_file(directory_path, VARIANTS_FILE_NAME)?; - let mut reader = BinaryReader::new(&mut stream, Endian::Little); - context.set_reader(&mut reader); - let variants = read_variants(&mut context, &mut version)?; - - let log = BxesEventLog { - version, - metadata, - variants, - }; - - Ok(BxesEventLogReadResult { - log, - system_metadata: context.metadata.system_metadata.clone().unwrap(), - }) +pub fn read_bxes_multiple_files(directory_path: &str) -> Result { + let mut read_metadata = ReadMetadata::empty(); + let mut context = ReadContext::new_without_reader(&mut read_metadata); + + let mut stream = open_file(directory_path, SYSTEM_METADATA_FILE_NAME)?; + let mut reader = BinaryReader::new(&mut stream, Endian::Little); + context.set_reader(&mut reader); + let mut version = read_system_metadata(&mut context)?; + + let mut stream = open_file(directory_path, VALUES_FILE_NAME)?; + let mut reader = BinaryReader::new(&mut stream, Endian::Little); + context.set_reader(&mut reader); + read_values(&mut context, &mut version)?; + + let mut stream = open_file(directory_path, KEY_VALUES_FILE_NAME)?; + let mut reader = BinaryReader::new(&mut stream, Endian::Little); + context.set_reader(&mut reader); + read_key_values(&mut context, &mut version)?; + + let mut stream = open_file(directory_path, METADATA_FILE_NAME)?; + let mut reader = BinaryReader::new(&mut stream, Endian::Little); + context.set_reader(&mut reader); + let metadata = read_metadata_file(&mut context, &mut version)?; + + let mut stream = open_file(directory_path, VARIANTS_FILE_NAME)?; + let mut reader = BinaryReader::new(&mut stream, Endian::Little); + context.set_reader(&mut reader); + let variants = read_variants(&mut context, &mut version)?; + + let log = BxesEventLog { + version, + metadata, + variants, + }; + + Ok(BxesEventLogReadResult { + log, + system_metadata: context.metadata.system_metadata.clone().unwrap(), + }) } fn read_version(previous_version: &mut u32, reader: &mut BinaryReader) -> Option { - let current_version = try_read_u32(reader); - if current_version.is_err() { - return Some(current_version.err().unwrap()); - } - - let current_version = current_version.ok().unwrap(); - if *previous_version != current_version { - Some(BxesReadError::VersionsMismatchError( - VersionsMismatchError::new(*previous_version, current_version), - )) - } else { - *previous_version = current_version; - None - } + let current_version = try_read_u32(reader); + if current_version.is_err() { + return Some(current_version.err().unwrap()); + } + + let current_version = current_version.ok().unwrap(); + if *previous_version != current_version { + Some(BxesReadError::VersionsMismatchError(VersionsMismatchError::new( + *previous_version, + current_version, + ))) + } else { + *previous_version = current_version; + None + } } fn read_system_metadata(context: &mut ReadContext) -> Result { - let version = try_read_u32(context.reader.as_mut().unwrap())?; - try_read_system_metadata(context)?; + let version = try_read_u32(context.reader.as_mut().unwrap())?; + try_read_system_metadata(context)?; - Ok(version) + Ok(version) } fn read_values(context: &mut ReadContext, version: &mut u32) -> Result<(), BxesReadError> { - if let Some(error) = read_version(version, context.reader.as_mut().unwrap()) { - return Err(error); - } + if let Some(error) = read_version(version, context.reader.as_mut().unwrap()) { + return Err(error); + } - try_read_values(context) + try_read_values(context) } fn read_key_values(context: &mut ReadContext, version: &mut u32) -> Result<(), BxesReadError> { - if let Some(error) = read_version(version, context.reader.as_mut().unwrap()) { - return Err(error); - } + if let Some(error) = read_version(version, context.reader.as_mut().unwrap()) { + return Err(error); + } - try_read_key_values(context) + try_read_key_values(context) } -fn read_metadata_file( - context: &mut ReadContext, - version: &mut u32, -) -> Result { - if let Some(error) = read_version(version, context.reader.as_mut().unwrap()) { - return Err(error); - } +fn read_metadata_file(context: &mut ReadContext, version: &mut u32) -> Result { + if let Some(error) = read_version(version, context.reader.as_mut().unwrap()) { + return Err(error); + } - try_read_event_log_metadata(context) + try_read_event_log_metadata(context) } -fn read_variants( - context: &mut ReadContext, - version: &mut u32, -) -> Result, BxesReadError> { - if let Some(error) = read_version(version, context.reader.as_mut().unwrap()) { - return Err(error); - } +fn read_variants(context: &mut ReadContext, version: &mut u32) -> Result, BxesReadError> { + if let Some(error) = read_version(version, context.reader.as_mut().unwrap()) { + return Err(error); + } - try_read_traces_variants(context) + try_read_traces_variants(context) } -fn open_file( - directory_path: &str, - file_name: &str, -) -> Result { - let directory_path = Path::new(directory_path); - let file_path = directory_path.join(file_name); - let file_path = file_path.to_str().unwrap(); - try_open_file_stream(file_path) +fn open_file(directory_path: &str, file_name: &str) -> Result { + let directory_path = Path::new(directory_path); + let file_path = directory_path.join(file_name); + let file_path = file_path.to_str().unwrap(); + try_open_file_stream(file_path) } diff --git a/bxes/src/rust/bxes/src/read/read_context.rs b/bxes/src/rust/bxes/src/read/read_context.rs index 998a1fed0..fc21c24a6 100644 --- a/bxes/src/rust/bxes/src/read/read_context.rs +++ b/bxes/src/rust/bxes/src/read/read_context.rs @@ -1,45 +1,43 @@ -use crate::binary_rw::core::BinaryReader; -use crate::models::domain::bxes_value::BxesValue; -use crate::models::system_models::SystemMetadata; +use crate::{ + binary_rw::core::BinaryReader, + models::{domain::bxes_value::BxesValue, system_models::SystemMetadata}, +}; use std::rc::Rc; pub struct ReadMetadata { - pub values: Option>>>, - pub kv_pairs: Option>, - pub system_metadata: Option, + pub values: Option>>>, + pub kv_pairs: Option>, + pub system_metadata: Option, } impl ReadMetadata { - pub fn empty() -> Self { - Self { - values: None, - kv_pairs: None, - system_metadata: None, - } + pub fn empty() -> Self { + Self { + values: None, + kv_pairs: None, + system_metadata: None, } + } } pub struct ReadContext<'a, 'b> { - pub reader: Option<&'a mut BinaryReader<'a>>, - pub metadata: &'b mut ReadMetadata, + pub reader: Option<&'a mut BinaryReader<'a>>, + pub metadata: &'b mut ReadMetadata, } impl<'a, 'b> ReadContext<'a, 'b> { - pub fn new(reader: &'a mut BinaryReader<'a>, metadata: &'b mut ReadMetadata) -> Self { - Self { - reader: Some(reader), - metadata, - } + pub fn new(reader: &'a mut BinaryReader<'a>, metadata: &'b mut ReadMetadata) -> Self { + Self { + reader: Some(reader), + metadata, } + } - pub fn new_without_reader(metadata: &'b mut ReadMetadata) -> Self { - Self { - reader: None, - metadata, - } - } + pub fn new_without_reader(metadata: &'b mut ReadMetadata) -> Self { + Self { reader: None, metadata } + } - pub fn set_reader(&mut self, reader: &'a mut BinaryReader<'a>) { - self.reader = Some(reader); - } + pub fn set_reader(&mut self, reader: &'a mut BinaryReader<'a>) { + self.reader = Some(reader); + } } diff --git a/bxes/src/rust/bxes/src/read/read_utils.rs b/bxes/src/rust/bxes/src/read/read_utils.rs index 9ecdaf8ed..8c65c07fa 100644 --- a/bxes/src/rust/bxes/src/read/read_utils.rs +++ b/bxes/src/rust/bxes/src/read/read_utils.rs @@ -1,685 +1,601 @@ use num_traits::{FromPrimitive, ToPrimitive}; -use std::io::{Cursor, Seek}; -use std::{fs::File, io::Read, rc::Rc}; +use std::{ + fs::File, + io::{Cursor, Read, Seek}, + rc::Rc, +}; use tempfile::TempDir; use uuid::Uuid; use zip::ZipArchive; use super::errors::*; -use crate::models::domain::bxes_artifact::{BxesArtifact, BxesArtifactItem}; -use crate::models::domain::bxes_driver::{BxesDriver, BxesDrivers}; -use crate::models::domain::bxes_event_log::{BxesEvent, BxesEventLog, BxesTraceVariant}; -use crate::models::domain::bxes_lifecycle::{BrafLifecycle, StandardLifecycle}; -use crate::models::domain::bxes_log_metadata::{ - BxesClassifier, BxesEventLogMetadata, BxesExtension, BxesGlobal, BxesGlobalKind, -}; -use crate::models::domain::bxes_value::BxesValue; -use crate::models::domain::software_event_type::SoftwareEventType; -use crate::models::domain::type_ids::{get_type_id, TypeIds}; -use crate::models::system_models::{SystemMetadata, ValueAttributeDescriptor}; -use crate::read::errors::BxesReadError::ValueAttributeNameIsNotAString; -use crate::read::read_context::ReadContext; use crate::{ - binary_rw::{ - core::{BinaryReader, SeekStream}, - file_stream::FileStream, + binary_rw::{ + core::{BinaryReader, SeekStream}, + file_stream::FileStream, + }, + models::{ + domain::{ + bxes_artifact::{BxesArtifact, BxesArtifactItem}, + bxes_driver::{BxesDriver, BxesDrivers}, + bxes_event_log::{BxesEvent, BxesEventLog, BxesTraceVariant}, + bxes_lifecycle::{BrafLifecycle, StandardLifecycle}, + bxes_log_metadata::{BxesClassifier, BxesEventLogMetadata, BxesExtension, BxesGlobal, BxesGlobalKind}, + bxes_value::BxesValue, + software_event_type::SoftwareEventType, + type_ids::{get_type_id, TypeIds}, }, - utils::buffered_stream::BufferedReadFileStream, + system_models::{SystemMetadata, ValueAttributeDescriptor}, + }, + read::{errors::BxesReadError::ValueAttributeNameIsNotAString, read_context::ReadContext}, + utils::buffered_stream::BufferedReadFileStream, }; #[derive(Debug)] pub struct BxesEventLogReadResult { - pub log: BxesEventLog, - pub system_metadata: SystemMetadata, + pub log: BxesEventLog, + pub system_metadata: SystemMetadata, } -pub fn try_read_event_log_metadata( - context: &mut ReadContext, -) -> Result { - let properties = try_read_attributes(context, false)?; - let extensions = try_read_extensions(context)?; - let globals = try_read_globals(context)?; - let classifiers = try_read_classifiers(context)?; +pub fn try_read_event_log_metadata(context: &mut ReadContext) -> Result { + let properties = try_read_attributes(context, false)?; + let extensions = try_read_extensions(context)?; + let globals = try_read_globals(context)?; + let classifiers = try_read_classifiers(context)?; - Ok(BxesEventLogMetadata { - extensions, - classifiers, - properties, - globals, - }) + Ok(BxesEventLogMetadata { + extensions, + classifiers, + properties, + globals, + }) } pub fn try_read_system_metadata(context: &mut ReadContext) -> Result<(), BxesReadError> { - context.metadata.system_metadata = Some(SystemMetadata { - values_attrs: try_read_value_attributes(context)?, - }); - - Ok(()) -} - -fn try_read_value_attributes( - context: &mut ReadContext, -) -> Result>, BxesReadError> { - let reader = context.reader.as_mut().unwrap(); - let count = try_read_u32(reader)?; - if count == 0 { - Ok(None) - } else { - let mut values_attributes = vec![]; - for _ in 0..count { - let type_id = try_read_type_id(reader)?; - let name_type_id = try_read_type_id(reader)?; - - if name_type_id == TypeIds::String { - let name = try_read_string(reader)?; - values_attributes.push(ValueAttributeDescriptor::new(type_id, name)); - } else { - return Err(ValueAttributeNameIsNotAString); - } - } - - Ok(Some(values_attributes)) + context.metadata.system_metadata = Some(SystemMetadata { + values_attrs: try_read_value_attributes(context)?, + }); + + Ok(()) +} + +fn try_read_value_attributes(context: &mut ReadContext) -> Result>, BxesReadError> { + let reader = context.reader.as_mut().unwrap(); + let count = try_read_u32(reader)?; + if count == 0 { + Ok(None) + } else { + let mut values_attributes = vec![]; + for _ in 0..count { + let type_id = try_read_type_id(reader)?; + let name_type_id = try_read_type_id(reader)?; + + if name_type_id == TypeIds::String { + let name = try_read_string(reader)?; + values_attributes.push(ValueAttributeDescriptor::new(type_id, name)); + } else { + return Err(ValueAttributeNameIsNotAString); + } } + + Ok(Some(values_attributes)) + } } -pub fn try_read_classifiers( - context: &mut ReadContext, -) -> Result>, BxesReadError> { - let count = try_read_u32(context.reader.as_mut().unwrap())?; - if count == 0 { - Ok(None) - } else { - let mut classifiers = vec![]; - - for _ in 0..count { - let index = try_read_u32(context.reader.as_mut().unwrap())? as usize; - let name = context - .metadata - .values - .as_ref() - .unwrap() - .get(index) - .unwrap() - .clone(); - - let keys_count = try_read_u32(context.reader.as_mut().unwrap())?; - let mut keys = vec![]; - for _ in 0..keys_count { - let index = try_read_u32(context.reader.as_mut().unwrap())? as usize; - let key_value = context - .metadata - .values - .as_ref() - .unwrap() - .get(index) - .unwrap(); - keys.push(key_value.clone()); - } - - classifiers.push(BxesClassifier { name, keys }); - } +pub fn try_read_classifiers(context: &mut ReadContext) -> Result>, BxesReadError> { + let count = try_read_u32(context.reader.as_mut().unwrap())?; + if count == 0 { + Ok(None) + } else { + let mut classifiers = vec![]; + + for _ in 0..count { + let index = try_read_u32(context.reader.as_mut().unwrap())? as usize; + let name = context.metadata.values.as_ref().unwrap().get(index).unwrap().clone(); - Ok(Some(classifiers)) + let keys_count = try_read_u32(context.reader.as_mut().unwrap())?; + let mut keys = vec![]; + for _ in 0..keys_count { + let index = try_read_u32(context.reader.as_mut().unwrap())? as usize; + let key_value = context.metadata.values.as_ref().unwrap().get(index).unwrap(); + keys.push(key_value.clone()); + } + + classifiers.push(BxesClassifier { name, keys }); } + + Ok(Some(classifiers)) + } } -pub fn try_read_globals( - context: &mut ReadContext, -) -> Result>, BxesReadError> { - let count = try_read_u32(context.reader.as_mut().unwrap())?; - if count == 0 { - Ok(None) - } else { - let mut globals = vec![]; - - for _ in 0..count { - let entity_kind = - BxesGlobalKind::from_u8(try_read_u8(context.reader.as_mut().unwrap())?).unwrap(); - let globals_count = try_read_u32(context.reader.as_mut().unwrap())?; - let mut entity_globals = vec![]; - - for _ in 0..globals_count { - entity_globals.push(try_read_kv_pair(context, false)?); - } - - globals.push(BxesGlobal { - entity_kind, - globals: entity_globals, - }); - } +pub fn try_read_globals(context: &mut ReadContext) -> Result>, BxesReadError> { + let count = try_read_u32(context.reader.as_mut().unwrap())?; + if count == 0 { + Ok(None) + } else { + let mut globals = vec![]; + + for _ in 0..count { + let entity_kind = BxesGlobalKind::from_u8(try_read_u8(context.reader.as_mut().unwrap())?).unwrap(); + let globals_count = try_read_u32(context.reader.as_mut().unwrap())?; + let mut entity_globals = vec![]; - Ok(Some(globals)) + for _ in 0..globals_count { + entity_globals.push(try_read_kv_pair(context, false)?); + } + + globals.push(BxesGlobal { + entity_kind, + globals: entity_globals, + }); } + + Ok(Some(globals)) + } } -pub fn try_read_extensions( - context: &mut ReadContext, -) -> Result>, BxesReadError> { - let count = try_read_u32(context.reader.as_mut().unwrap())?; - if count == 0 { - Ok(None) - } else { - let mut extensions = vec![]; - - for _ in 0..count { - let index = try_read_u32(context.reader.as_mut().unwrap())? as usize; - let name = context - .metadata - .values - .as_ref() - .unwrap() - .get(index) - .unwrap() - .clone(); - - let index = try_read_u32(context.reader.as_mut().unwrap())? as usize; - let prefix = context - .metadata - .values - .as_ref() - .unwrap() - .get(index) - .unwrap() - .clone(); - - let index = try_read_u32(context.reader.as_mut().unwrap())? as usize; - let uri = context - .metadata - .values - .as_ref() - .unwrap() - .get(index) - .unwrap() - .clone(); - - extensions.push(BxesExtension { name, prefix, uri }) - } +pub fn try_read_extensions(context: &mut ReadContext) -> Result>, BxesReadError> { + let count = try_read_u32(context.reader.as_mut().unwrap())?; + if count == 0 { + Ok(None) + } else { + let mut extensions = vec![]; - Ok(Some(extensions)) + for _ in 0..count { + let index = try_read_u32(context.reader.as_mut().unwrap())? as usize; + let name = context.metadata.values.as_ref().unwrap().get(index).unwrap().clone(); + + let index = try_read_u32(context.reader.as_mut().unwrap())? as usize; + let prefix = context.metadata.values.as_ref().unwrap().get(index).unwrap().clone(); + + let index = try_read_u32(context.reader.as_mut().unwrap())? as usize; + let uri = context.metadata.values.as_ref().unwrap().get(index).unwrap().clone(); + + extensions.push(BxesExtension { name, prefix, uri }) } + + Ok(Some(extensions)) + } } pub fn try_read_leb128(reader: &mut BinaryReader) -> Result { - match leb128::read::unsigned(reader) { - Ok(value) => Ok(value as u32), - Err(err) => Err(BxesReadError::Leb128ReadError(err.to_string())), - } + match leb128::read::unsigned(reader) { + Ok(value) => Ok(value as u32), + Err(err) => Err(BxesReadError::Leb128ReadError(err.to_string())), + } } pub fn string_or_err(value: &BxesValue) -> Result>, BxesReadError> { - if let BxesValue::String(string) = value { - Ok(string.clone()) - } else { - Err(BxesReadError::ExpectedString(value.clone())) - } + if let BxesValue::String(string) = value { + Ok(string.clone()) + } else { + Err(BxesReadError::ExpectedString(value.clone())) + } } pub fn owned_string_or_err(value: &BxesValue) -> Result { - if let BxesValue::String(string) = value { - Ok(string.as_ref().as_ref().to_owned()) - } else { - Err(BxesReadError::ExpectedString(value.clone())) - } + if let BxesValue::String(string) = value { + Ok(string.as_ref().as_ref().to_owned()) + } else { + Err(BxesReadError::ExpectedString(value.clone())) + } } -pub fn try_read_traces_variants( - context: &mut ReadContext, -) -> Result, BxesReadError> { - let mut variants = vec![]; - let variant_count = try_read_u32(context.reader.as_mut().unwrap())?; +pub fn try_read_traces_variants(context: &mut ReadContext) -> Result, BxesReadError> { + let mut variants = vec![]; + let variant_count = try_read_u32(context.reader.as_mut().unwrap())?; - for _ in 0..variant_count { - variants.push(try_read_trace_variant(context)?); - } + for _ in 0..variant_count { + variants.push(try_read_trace_variant(context)?); + } - Ok(variants) + Ok(variants) } -pub fn try_read_trace_variant( - context: &mut ReadContext, -) -> Result { - let traces_count = try_read_u32(context.reader.as_mut().unwrap())?; +pub fn try_read_trace_variant(context: &mut ReadContext) -> Result { + let traces_count = try_read_u32(context.reader.as_mut().unwrap())?; - let variant_metadata = try_read_trace_variant_metadata(context)?; - let events = try_read_trace_variant_events(context)?; + let variant_metadata = try_read_trace_variant_metadata(context)?; + let events = try_read_trace_variant_events(context)?; - Ok(BxesTraceVariant { - traces_count, - metadata: variant_metadata, - events, - }) + Ok(BxesTraceVariant { + traces_count, + metadata: variant_metadata, + events, + }) } -pub fn try_read_trace_variant_metadata( - context: &mut ReadContext, -) -> Result>, Rc>)>, BxesReadError> { - let mut variant_metadata = vec![]; - let metadata_count = try_read_u32(context.reader.as_mut().unwrap())?; - for _ in 0..metadata_count { - variant_metadata.push(try_read_kv_pair(context, false)?); - } +pub fn try_read_trace_variant_metadata(context: &mut ReadContext) -> Result>, Rc>)>, BxesReadError> { + let mut variant_metadata = vec![]; + let metadata_count = try_read_u32(context.reader.as_mut().unwrap())?; + for _ in 0..metadata_count { + variant_metadata.push(try_read_kv_pair(context, false)?); + } - Ok(variant_metadata) + Ok(variant_metadata) } -pub fn try_read_trace_variant_events( - context: &mut ReadContext, -) -> Result, BxesReadError> { - let events_count = try_read_u32(context.reader.as_mut().unwrap())?; - let mut events = vec![]; +pub fn try_read_trace_variant_events(context: &mut ReadContext) -> Result, BxesReadError> { + let events_count = try_read_u32(context.reader.as_mut().unwrap())?; + let mut events = vec![]; - for _ in 0..events_count { - events.push(try_read_event(context)?); - } + for _ in 0..events_count { + events.push(try_read_event(context)?); + } - Ok(events) + Ok(events) } fn try_read_event(context: &mut ReadContext) -> Result { - let name_index = try_read_leb128(context.reader.as_mut().unwrap())? as usize; - let name = context.metadata.values.as_ref().unwrap().get(name_index); - - if name.is_none() { - return Err(BxesReadError::FailedToIndexValue(name_index)); - } - - let timestamp = try_read_i64(context.reader.as_mut().unwrap())?; - - Ok(BxesEvent { - name: name.unwrap().clone(), - timestamp, - attributes: try_read_event_attributes(context)?, - }) -} - -fn try_read_event_attributes( - context: &mut ReadContext, -) -> Result>, Rc>)>>, BxesReadError> { - let mut attributes = None; - let value_attrs_len = if let Some(attrs) = context - .metadata - .system_metadata - .as_ref() - .unwrap() - .values_attrs - .as_ref() - { - attrs.len() - } else { - 0 - }; - - if value_attrs_len > 0 { - for i in 0..value_attrs_len { - let value = try_read_bxes_value(context)?; - let metadata = context.metadata.system_metadata.as_ref().unwrap(); - let value_attrs = metadata.values_attrs.as_ref().unwrap(); - let descriptor = value_attrs.get(i).unwrap(); - - let key = BxesValue::String(Rc::new(Box::new(descriptor.name.clone()))); - let key = Rc::new(Box::new(key)); - - let value_type_id = get_type_id(&value); - let null_type_id = TypeIds::Null; - - if value_type_id != null_type_id || descriptor.type_id == null_type_id { - if attributes.is_none() { - attributes = Some(vec![]); - } - - attributes - .as_mut() - .unwrap() - .push((key, Rc::new(Box::new(value)))); - } + let name_index = try_read_leb128(context.reader.as_mut().unwrap())? as usize; + let name = context.metadata.values.as_ref().unwrap().get(name_index); + + if name.is_none() { + return Err(BxesReadError::FailedToIndexValue(name_index)); + } + + let timestamp = try_read_i64(context.reader.as_mut().unwrap())?; + + Ok(BxesEvent { + name: name.unwrap().clone(), + timestamp, + attributes: try_read_event_attributes(context)?, + }) +} + +fn try_read_event_attributes(context: &mut ReadContext) -> Result>, Rc>)>>, BxesReadError> { + let mut attributes = None; + let value_attrs_len = if let Some(attrs) = context.metadata.system_metadata.as_ref().unwrap().values_attrs.as_ref() { + attrs.len() + } else { + 0 + }; + + if value_attrs_len > 0 { + for i in 0..value_attrs_len { + let value = try_read_bxes_value(context)?; + let metadata = context.metadata.system_metadata.as_ref().unwrap(); + let value_attrs = metadata.values_attrs.as_ref().unwrap(); + let descriptor = value_attrs.get(i).unwrap(); + + let key = BxesValue::String(Rc::new(Box::new(descriptor.name.clone()))); + let key = Rc::new(Box::new(key)); + + let value_type_id = get_type_id(&value); + let null_type_id = TypeIds::Null; + + if value_type_id != null_type_id || descriptor.type_id == null_type_id { + if attributes.is_none() { + attributes = Some(vec![]); } + + attributes.as_mut().unwrap().push((key, Rc::new(Box::new(value)))); + } } + } - try_fill_attributes(context, true, &mut attributes)?; + try_fill_attributes(context, true, &mut attributes)?; - Ok(attributes) + Ok(attributes) } pub fn try_fill_attributes( - context: &mut ReadContext, - leb_128: bool, - attributes: &mut Option>, Rc>)>>, + context: &mut ReadContext, + leb_128: bool, + attributes: &mut Option>, Rc>)>>, ) -> Result<(), BxesReadError> { - let attributes_count = try_read_count(context, leb_128)?; - if attributes_count > 0 && attributes.is_none() { - *attributes = Some(vec![]); - } + let attributes_count = try_read_count(context, leb_128)?; + if attributes_count > 0 && attributes.is_none() { + *attributes = Some(vec![]); + } - for _ in 0..attributes_count { - attributes - .as_mut() - .unwrap() - .push(try_read_kv_pair(context, leb_128)?); - } + for _ in 0..attributes_count { + attributes.as_mut().unwrap().push(try_read_kv_pair(context, leb_128)?); + } - Ok(()) + Ok(()) } fn try_read_attributes( - context: &mut ReadContext, - leb_128: bool, + context: &mut ReadContext, + leb_128: bool, ) -> Result>, Rc>)>>, BxesReadError> { - let attributes_count = try_read_count(context, leb_128)?; - if attributes_count == 0 { - Ok(None) - } else { - let mut attributes = vec![]; - for _ in 0..attributes_count { - let pair = try_read_kv_pair(context, leb_128)?; - attributes.push(pair); - } - - Ok(Some(attributes)) + let attributes_count = try_read_count(context, leb_128)?; + if attributes_count == 0 { + Ok(None) + } else { + let mut attributes = vec![]; + for _ in 0..attributes_count { + let pair = try_read_kv_pair(context, leb_128)?; + attributes.push(pair); } + + Ok(Some(attributes)) + } } fn try_read_count(context: &mut ReadContext, leb_128: bool) -> Result { - if leb_128 { - try_read_leb128(context.reader.as_mut().unwrap()) - } else { - try_read_u32(context.reader.as_mut().unwrap()) - } + if leb_128 { + try_read_leb128(context.reader.as_mut().unwrap()) + } else { + try_read_u32(context.reader.as_mut().unwrap()) + } } -fn try_read_kv_pair( - context: &mut ReadContext, - leb_128: bool, -) -> Result<(Rc>, Rc>), BxesReadError> { - let kv_index = try_read_count(context, leb_128)? as usize; +fn try_read_kv_pair(context: &mut ReadContext, leb_128: bool) -> Result<(Rc>, Rc>), BxesReadError> { + let kv_index = try_read_count(context, leb_128)? as usize; - let kv_pair = match context.metadata.kv_pairs.as_ref().unwrap().get(kv_index) { - None => return Err(BxesReadError::FailedToIndexKeyValue(kv_index)), - Some(pair) => pair, - }; + let kv_pair = match context.metadata.kv_pairs.as_ref().unwrap().get(kv_index) { + None => return Err(BxesReadError::FailedToIndexKeyValue(kv_index)), + Some(pair) => pair, + }; - let key_index = kv_pair.0 as usize; - let key = match context.metadata.values.as_ref().unwrap().get(key_index) { - None => return Err(BxesReadError::FailedToIndexValue(key_index)), - Some(value) => value, - }; + let key_index = kv_pair.0 as usize; + let key = match context.metadata.values.as_ref().unwrap().get(key_index) { + None => return Err(BxesReadError::FailedToIndexValue(key_index)), + Some(value) => value, + }; - let value_index = kv_pair.1 as usize; - let value = match context.metadata.values.as_ref().unwrap().get(value_index) { - None => return Err(BxesReadError::FailedToIndexValue(value_index)), - Some(value) => value, - }; + let value_index = kv_pair.1 as usize; + let value = match context.metadata.values.as_ref().unwrap().get(value_index) { + None => return Err(BxesReadError::FailedToIndexValue(value_index)), + Some(value) => value, + }; - Ok((key.clone(), value.clone())) + Ok((key.clone(), value.clone())) } pub fn try_read_key_values(context: &mut ReadContext) -> Result<(), BxesReadError> { - let reader = context.reader.as_mut().unwrap(); - if context.metadata.kv_pairs.is_none() { - context.metadata.kv_pairs = Some(vec![]); - } + let reader = context.reader.as_mut().unwrap(); + if context.metadata.kv_pairs.is_none() { + context.metadata.kv_pairs = Some(vec![]); + } - let key_values_count = try_read_u32(reader)?; - for _ in 0..key_values_count { - context - .metadata - .kv_pairs - .as_mut() - .unwrap() - .push((try_read_leb128(reader)?, try_read_leb128(reader)?)); - } + let key_values_count = try_read_u32(reader)?; + for _ in 0..key_values_count { + context + .metadata + .kv_pairs + .as_mut() + .unwrap() + .push((try_read_leb128(reader)?, try_read_leb128(reader)?)); + } - Ok(()) + Ok(()) } pub fn try_read_values(context: &mut ReadContext) -> Result<(), BxesReadError> { - let reader = context.reader.as_mut().unwrap(); + let reader = context.reader.as_mut().unwrap(); - if context.metadata.values.is_none() { - context.metadata.values = Some(vec![]); - } + if context.metadata.values.is_none() { + context.metadata.values = Some(vec![]); + } - let values_count = try_read_u32(reader)?; - for _ in 0..values_count { - let value = try_read_bxes_value(context)?; - context - .metadata - .values - .as_mut() - .unwrap() - .push(Rc::new(Box::new(value))); - } + let values_count = try_read_u32(reader)?; + for _ in 0..values_count { + let value = try_read_bxes_value(context)?; + context.metadata.values.as_mut().unwrap().push(Rc::new(Box::new(value))); + } - Ok(()) + Ok(()) } fn try_read_bxes_value(context: &mut ReadContext) -> Result { - let reader = context.reader.as_mut().unwrap(); - - match try_read_type_id(reader)? { - TypeIds::Null => Ok(BxesValue::Null), - TypeIds::I32 => Ok(BxesValue::Int32(try_read_i32(reader)?)), - TypeIds::I64 => Ok(BxesValue::Int64(try_read_i64(reader)?)), - TypeIds::U32 => Ok(BxesValue::Uint32(try_read_u32(reader)?)), - TypeIds::U64 => Ok(BxesValue::Uint64(try_read_u64(reader)?)), - TypeIds::F32 => Ok(BxesValue::Float32(try_read_f32(reader)?)), - TypeIds::F64 => Ok(BxesValue::Float64(try_read_f64(reader)?)), - TypeIds::Bool => Ok(BxesValue::Bool(try_read_bool(reader)?)), - TypeIds::String => Ok(BxesValue::String(Rc::new(Box::new(try_read_string( - reader, - )?)))), - TypeIds::Timestamp => Ok(BxesValue::Timestamp(try_read_i64(reader)?)), - TypeIds::BrafLifecycle => Ok(BxesValue::BrafLifecycle(try_read_braf_lifecycle(reader)?)), - TypeIds::StandardLifecycle => Ok(BxesValue::StandardLifecycle( - try_read_standard_lifecycle(reader)?, - )), - TypeIds::Guid => Ok(BxesValue::Guid(try_read_guid(reader)?)), - TypeIds::Artifact => Ok(BxesValue::Artifact(try_read_artifact(context)?)), - TypeIds::Drivers => Ok(BxesValue::Drivers(try_read_drivers(context)?)), - TypeIds::SoftwareEventType => Ok(BxesValue::SoftwareEventType( - try_read_software_event_type(reader)?, - )), - } + let reader = context.reader.as_mut().unwrap(); + + match try_read_type_id(reader)? { + TypeIds::Null => Ok(BxesValue::Null), + TypeIds::I32 => Ok(BxesValue::Int32(try_read_i32(reader)?)), + TypeIds::I64 => Ok(BxesValue::Int64(try_read_i64(reader)?)), + TypeIds::U32 => Ok(BxesValue::Uint32(try_read_u32(reader)?)), + TypeIds::U64 => Ok(BxesValue::Uint64(try_read_u64(reader)?)), + TypeIds::F32 => Ok(BxesValue::Float32(try_read_f32(reader)?)), + TypeIds::F64 => Ok(BxesValue::Float64(try_read_f64(reader)?)), + TypeIds::Bool => Ok(BxesValue::Bool(try_read_bool(reader)?)), + TypeIds::String => Ok(BxesValue::String(Rc::new(Box::new(try_read_string(reader)?)))), + TypeIds::Timestamp => Ok(BxesValue::Timestamp(try_read_i64(reader)?)), + TypeIds::BrafLifecycle => Ok(BxesValue::BrafLifecycle(try_read_braf_lifecycle(reader)?)), + TypeIds::StandardLifecycle => Ok(BxesValue::StandardLifecycle(try_read_standard_lifecycle(reader)?)), + TypeIds::Guid => Ok(BxesValue::Guid(try_read_guid(reader)?)), + TypeIds::Artifact => Ok(BxesValue::Artifact(try_read_artifact(context)?)), + TypeIds::Drivers => Ok(BxesValue::Drivers(try_read_drivers(context)?)), + TypeIds::SoftwareEventType => Ok(BxesValue::SoftwareEventType(try_read_software_event_type(reader)?)), + } } fn try_read_type_id(reader: &mut BinaryReader) -> Result { - let type_id_byte = try_read_u8(reader)?; - match TypeIds::from_u8(type_id_byte) { - None => Err(BxesReadError::FailedToParseTypeId(type_id_byte)), - Some(id) => Ok(id), - } + let type_id_byte = try_read_u8(reader)?; + match TypeIds::from_u8(type_id_byte) { + None => Err(BxesReadError::FailedToParseTypeId(type_id_byte)), + Some(id) => Ok(id), + } } pub fn try_read_drivers(context: &mut ReadContext) -> Result { - let reader = context.reader.as_mut().unwrap(); - let drivers_count = try_read_u32(reader)?; - let mut drivers = vec![]; + let reader = context.reader.as_mut().unwrap(); + let drivers_count = try_read_u32(reader)?; + let mut drivers = vec![]; - for _ in 0..drivers_count { - drivers.push(try_read_driver(context)?); - } + for _ in 0..drivers_count { + drivers.push(try_read_driver(context)?); + } - Ok(BxesDrivers { drivers }) + Ok(BxesDrivers { drivers }) } pub fn try_read_driver(context: &mut ReadContext) -> Result { - let amount = try_read_f64(context.reader.as_mut().unwrap())?; - let name_index = try_read_u32(context.reader.as_mut().unwrap())? as usize; - let driver_type_index = try_read_u32(context.reader.as_mut().unwrap())? as usize; + let amount = try_read_f64(context.reader.as_mut().unwrap())?; + let name_index = try_read_u32(context.reader.as_mut().unwrap())? as usize; + let driver_type_index = try_read_u32(context.reader.as_mut().unwrap())? as usize; - Ok(BxesDriver { - amount: BxesValue::Float64(amount), - name: context.metadata.values.as_ref().unwrap()[name_index].clone(), - driver_type: context.metadata.values.as_ref().unwrap()[driver_type_index].clone(), - }) + Ok(BxesDriver { + amount: BxesValue::Float64(amount), + name: context.metadata.values.as_ref().unwrap()[name_index].clone(), + driver_type: context.metadata.values.as_ref().unwrap()[driver_type_index].clone(), + }) } pub fn try_read_artifact(context: &mut ReadContext) -> Result { - let artifacts_count = try_read_u32(context.reader.as_mut().unwrap())?; - let mut artifacts = vec![]; + let artifacts_count = try_read_u32(context.reader.as_mut().unwrap())?; + let mut artifacts = vec![]; - for _ in 0..artifacts_count { - artifacts.push(try_read_artifact_item(context)?); - } + for _ in 0..artifacts_count { + artifacts.push(try_read_artifact_item(context)?); + } - Ok(BxesArtifact { items: artifacts }) + Ok(BxesArtifact { items: artifacts }) } -pub fn try_read_artifact_item( - context: &mut ReadContext, -) -> Result { - let model_index = try_read_u32(context.reader.as_mut().unwrap())? as usize; - let instance_index = try_read_u32(context.reader.as_mut().unwrap())? as usize; - let transition_index = try_read_u32(context.reader.as_mut().unwrap())? as usize; +pub fn try_read_artifact_item(context: &mut ReadContext) -> Result { + let model_index = try_read_u32(context.reader.as_mut().unwrap())? as usize; + let instance_index = try_read_u32(context.reader.as_mut().unwrap())? as usize; + let transition_index = try_read_u32(context.reader.as_mut().unwrap())? as usize; - Ok(BxesArtifactItem { - model: context.metadata.values.as_ref().unwrap()[model_index].clone(), - instance: context.metadata.values.as_ref().unwrap()[instance_index].clone(), - transition: context.metadata.values.as_ref().unwrap()[transition_index].clone(), - }) + Ok(BxesArtifactItem { + model: context.metadata.values.as_ref().unwrap()[model_index].clone(), + instance: context.metadata.values.as_ref().unwrap()[instance_index].clone(), + transition: context.metadata.values.as_ref().unwrap()[transition_index].clone(), + }) } pub fn try_read_guid(reader: &mut BinaryReader) -> Result { - try_read(try_tell_pos(reader)?, || { - let mut buf = [0; 16]; - reader.read(&mut buf)?; + try_read(try_tell_pos(reader)?, || { + let mut buf = [0; 16]; + reader.read(&mut buf)?; - Ok(Uuid::from_slice_le(&buf).unwrap()) - }) + Ok(Uuid::from_slice_le(&buf).unwrap()) + }) } -pub fn try_read_software_event_type( - reader: &mut BinaryReader, -) -> Result { - try_read_enum::(reader) +pub fn try_read_software_event_type(reader: &mut BinaryReader) -> Result { + try_read_enum::(reader) } pub fn try_read_i32(reader: &mut BinaryReader) -> Result { - try_read(try_tell_pos(reader)?, || reader.read_i32()) + try_read(try_tell_pos(reader)?, || reader.read_i32()) } pub fn try_read_i64(reader: &mut BinaryReader) -> Result { - try_read(try_tell_pos(reader)?, || reader.read_i64()) + try_read(try_tell_pos(reader)?, || reader.read_i64()) } pub fn try_read_u32(reader: &mut BinaryReader) -> Result { - try_read(try_tell_pos(reader)?, || reader.read_u32()) + try_read(try_tell_pos(reader)?, || reader.read_u32()) } pub fn try_read_u64(reader: &mut BinaryReader) -> Result { - try_read(try_tell_pos(reader)?, || reader.read_u64()) + try_read(try_tell_pos(reader)?, || reader.read_u64()) } pub fn try_read_f32(reader: &mut BinaryReader) -> Result { - try_read(try_tell_pos(reader)?, || reader.read_f32()) + try_read(try_tell_pos(reader)?, || reader.read_f32()) } pub fn try_read_f64(reader: &mut BinaryReader) -> Result { - try_read(try_tell_pos(reader)?, || reader.read_f64()) + try_read(try_tell_pos(reader)?, || reader.read_f64()) } pub fn try_read_bool(reader: &mut BinaryReader) -> Result { - try_read(try_tell_pos(reader)?, || reader.read_bool()) + try_read(try_tell_pos(reader)?, || reader.read_bool()) } pub fn try_read_u8(reader: &mut BinaryReader) -> Result { - try_read(try_tell_pos(reader)?, || reader.read_u8()) + try_read(try_tell_pos(reader)?, || reader.read_u8()) } fn try_read_string(reader: &mut BinaryReader) -> Result { - let string_length = try_read_u64(reader)?; - let bytes = try_read_bytes(reader, string_length as usize)?; + let string_length = try_read_u64(reader)?; + let bytes = try_read_bytes(reader, string_length as usize)?; - match String::from_utf8(bytes) { - Ok(string) => Ok(string), - Err(err) => Err(BxesReadError::FailedToCreateUtf8String(err)), - } + match String::from_utf8(bytes) { + Ok(string) => Ok(string), + Err(err) => Err(BxesReadError::FailedToCreateUtf8String(err)), + } } fn try_read_bytes(reader: &mut BinaryReader, length: usize) -> Result, BxesReadError> { - let offset = try_tell_pos(reader)?; - let mut buf = vec![0; length]; - match reader.read(&mut buf) { - Ok(_) => Ok(buf), - Err(err) => Err(BxesReadError::FailedToReadValue( - FailedToReadValueError::new(offset, err.to_string()), - )), - } + let offset = try_tell_pos(reader)?; + let mut buf = vec![0; length]; + match reader.read(&mut buf) { + Ok(_) => Ok(buf), + Err(err) => Err(BxesReadError::FailedToReadValue(FailedToReadValueError::new( + offset, + err.to_string(), + ))), + } } fn try_read_braf_lifecycle(reader: &mut BinaryReader) -> Result { - try_read_enum::(reader) + try_read_enum::(reader) } fn try_read_enum(reader: &mut BinaryReader) -> Result { - let offset = try_tell_pos(reader)?; - match reader.read_u8() { - Ok(byte) => Ok(T::from_u8(byte).unwrap()), - Err(err) => Err(BxesReadError::FailedToReadValue( - FailedToReadValueError::new(offset, err.to_string()), - )), - } + let offset = try_tell_pos(reader)?; + match reader.read_u8() { + Ok(byte) => Ok(T::from_u8(byte).unwrap()), + Err(err) => Err(BxesReadError::FailedToReadValue(FailedToReadValueError::new( + offset, + err.to_string(), + ))), + } } -fn try_read_standard_lifecycle( - reader: &mut BinaryReader, -) -> Result { - try_read_enum::(reader) +fn try_read_standard_lifecycle(reader: &mut BinaryReader) -> Result { + try_read_enum::(reader) } pub fn try_extract_archive_bytes(bytes: &[u8]) -> Result { - try_extract_archive_internal(Cursor::new(bytes)) + try_extract_archive_internal(Cursor::new(bytes)) } pub fn try_extract_archive(path: &str) -> Result { - let fs = match File::open(path) { - Ok(fs) => fs, - Err(err) => return Err(BxesReadError::FailedToOpenFile(err.to_string())), - }; + let fs = match File::open(path) { + Ok(fs) => fs, + Err(err) => return Err(BxesReadError::FailedToOpenFile(err.to_string())), + }; - try_extract_archive_internal(fs) + try_extract_archive_internal(fs) } fn try_extract_archive_internal(stream: impl Read + Seek) -> Result { - let mut archive = match ZipArchive::new(stream) { - Ok(archive) => archive, - Err(err) => return Err(BxesReadError::FailedToOpenFile(err.to_string())), - }; + let mut archive = match ZipArchive::new(stream) { + Ok(archive) => archive, + Err(err) => return Err(BxesReadError::FailedToOpenFile(err.to_string())), + }; - let temp_dir = match TempDir::new() { - Ok(temp_dir) => temp_dir, - Err(_) => return Err(BxesReadError::FailedToCreateTempDir), - }; + let temp_dir = match TempDir::new() { + Ok(temp_dir) => temp_dir, + Err(_) => return Err(BxesReadError::FailedToCreateTempDir), + }; - match archive.extract(temp_dir.path()) { - Ok(_) => {} - Err(_) => return Err(BxesReadError::FailedToExtractArchive), - }; + match archive.extract(temp_dir.path()) { + Ok(_) => {} + Err(_) => return Err(BxesReadError::FailedToExtractArchive), + }; - return Ok(temp_dir); + return Ok(temp_dir); } pub fn try_open_file_stream(path: &str) -> Result { - match FileStream::open(path) { - Ok(fs) => Ok(BufferedReadFileStream::new(fs, 1024 * 8)), - Err(err) => Err(BxesReadError::FailedToOpenFile(err.to_string())), - } + match FileStream::open(path) { + Ok(fs) => Ok(BufferedReadFileStream::new(fs, 1024 * 8)), + Err(err) => Err(BxesReadError::FailedToOpenFile(err.to_string())), + } } -fn try_read( - reader_pos: usize, - mut read_func: impl FnMut() -> crate::binary_rw::core::Result, -) -> Result { - match read_func() { - Ok(value) => Ok(value), - Err(err) => Err(BxesReadError::FailedToReadValue( - FailedToReadValueError::new(reader_pos, err.to_string()), - )), - } +fn try_read(reader_pos: usize, mut read_func: impl FnMut() -> crate::binary_rw::core::Result) -> Result { + match read_func() { + Ok(value) => Ok(value), + Err(err) => Err(BxesReadError::FailedToReadValue(FailedToReadValueError::new( + reader_pos, + err.to_string(), + ))), + } } fn try_tell_pos(reader: &mut BinaryReader) -> Result { - match reader.tell() { - Ok(pos) => Ok(pos), - Err(err) => Err(BxesReadError::FailedToReadPos(err.to_string())), - } + match reader.tell() { + Ok(pos) => Ok(pos), + Err(err) => Err(BxesReadError::FailedToReadPos(err.to_string())), + } } diff --git a/bxes/src/rust/bxes/src/read/single_file_bxes_reader.rs b/bxes/src/rust/bxes/src/read/single_file_bxes_reader.rs index 216241a9d..d276aa720 100644 --- a/bxes/src/rust/bxes/src/read/single_file_bxes_reader.rs +++ b/bxes/src/rust/bxes/src/read/single_file_bxes_reader.rs @@ -2,62 +2,59 @@ use std::fs; use tempfile::TempDir; -use crate::binary_rw::core::{BinaryReader, Endian}; -use crate::models::domain::bxes_event_log::BxesEventLog; -use crate::read::read_context::{ReadContext, ReadMetadata}; +use crate::{ + binary_rw::core::{BinaryReader, Endian}, + models::domain::bxes_event_log::BxesEventLog, + read::read_context::{ReadContext, ReadMetadata}, +}; use super::{errors::BxesReadError, read_utils::*}; pub fn read_bxes_from_archive_bytes(bytes: &[u8]) -> Result { - let extracted_files_dir = try_extract_archive_bytes(bytes)?; - read_bxes_internal(extracted_files_dir) + let extracted_files_dir = try_extract_archive_bytes(bytes)?; + read_bxes_internal(extracted_files_dir) } pub fn read_bxes(path: &str) -> Result { - let extracted_files_dir = try_extract_archive(path)?; - read_bxes_internal(extracted_files_dir) + let extracted_files_dir = try_extract_archive(path)?; + read_bxes_internal(extracted_files_dir) } -fn read_bxes_internal( - extracted_files_dir: TempDir, -) -> Result { - let extracted_files_dir = extracted_files_dir.path(); - - let files = fs::read_dir(extracted_files_dir) - .unwrap() - .into_iter() - .map(|r| r.unwrap().path().to_str().unwrap().to_string()) - .collect::>(); - - if files.len() != 1 { - return Err(BxesReadError::InvalidArchive(format!( - "Expected one file, got {:?}", - files - ))); - } - - let mut stream = try_open_file_stream(files[0].as_str())?; - let mut reader = BinaryReader::new(&mut stream, Endian::Little); - let version = try_read_u32(&mut reader)?; - - let mut read_metadata = ReadMetadata::empty(); - let mut context = ReadContext::new(&mut reader, &mut read_metadata); - try_read_system_metadata(&mut context)?; - - try_read_values(&mut context)?; - try_read_key_values(&mut context)?; - - let metadata = try_read_event_log_metadata(&mut context)?; - let variants = try_read_traces_variants(&mut context)?; - - let log = BxesEventLog { - version, - metadata, - variants, - }; - - Ok(BxesEventLogReadResult { - log, - system_metadata: context.metadata.system_metadata.clone().unwrap(), - }) +fn read_bxes_internal(extracted_files_dir: TempDir) -> Result { + let extracted_files_dir = extracted_files_dir.path(); + + let files = fs::read_dir(extracted_files_dir) + .unwrap() + .into_iter() + .map(|r| r.unwrap().path().to_str().unwrap().to_string()) + .collect::>(); + + if files.len() != 1 { + return Err(BxesReadError::InvalidArchive(format!("Expected one file, got {:?}", files))); + } + + let mut stream = try_open_file_stream(files[0].as_str())?; + let mut reader = BinaryReader::new(&mut stream, Endian::Little); + let version = try_read_u32(&mut reader)?; + + let mut read_metadata = ReadMetadata::empty(); + let mut context = ReadContext::new(&mut reader, &mut read_metadata); + try_read_system_metadata(&mut context)?; + + try_read_values(&mut context)?; + try_read_key_values(&mut context)?; + + let metadata = try_read_event_log_metadata(&mut context)?; + let variants = try_read_traces_variants(&mut context)?; + + let log = BxesEventLog { + version, + metadata, + variants, + }; + + Ok(BxesEventLogReadResult { + log, + system_metadata: context.metadata.system_metadata.clone().unwrap(), + }) } diff --git a/bxes/src/rust/bxes/src/utils/buffered_stream.rs b/bxes/src/rust/bxes/src/utils/buffered_stream.rs index 60ccc43f1..73dd6ec6f 100644 --- a/bxes/src/rust/bxes/src/utils/buffered_stream.rs +++ b/bxes/src/rust/bxes/src/utils/buffered_stream.rs @@ -1,166 +1,164 @@ use std::io::{Read, Write}; use crate::binary_rw::{ - core::{ReadStream, SeekStream, WriteStream}, - file_stream::FileStream, + core::{ReadStream, SeekStream, WriteStream}, + file_stream::FileStream, }; pub struct BufferedReadFileStream { - stream: FileStream, - buffer: Vec, - occupied_size: usize, - next_buffer_index: usize, - file_length_bytes: usize, - total_read_bytes: usize, + stream: FileStream, + buffer: Vec, + occupied_size: usize, + next_buffer_index: usize, + file_length_bytes: usize, + total_read_bytes: usize, } impl BufferedReadFileStream { - pub fn new(stream: FileStream, buffer_size: usize) -> Self { - let length = stream.len().ok().unwrap(); - Self { - stream, - buffer: vec![0; buffer_size], - occupied_size: 0, - next_buffer_index: 0, - file_length_bytes: length, - total_read_bytes: 0, - } + pub fn new(stream: FileStream, buffer_size: usize) -> Self { + let length = stream.len().ok().unwrap(); + Self { + stream, + buffer: vec![0; buffer_size], + occupied_size: 0, + next_buffer_index: 0, + file_length_bytes: length, + total_read_bytes: 0, } + } - pub fn total_read_bytes(&self) -> usize { - self.total_read_bytes - } + pub fn total_read_bytes(&self) -> usize { + self.total_read_bytes + } } impl ReadStream for BufferedReadFileStream {} impl Read for BufferedReadFileStream { - fn read(&mut self, buf: &mut [u8]) -> std::io::Result { - let mut out_buff_index = 0; - - loop { - if out_buff_index >= buf.len() { - break; - } - - let to_read = buf.len() - out_buff_index; - if self.next_buffer_index + to_read <= self.occupied_size { - for i in 0..to_read { - buf[out_buff_index] = self.buffer[self.next_buffer_index + i]; - out_buff_index += 1; - } - - self.next_buffer_index += to_read; - break; - } else { - let read_bytes = self.occupied_size - self.next_buffer_index; - for i in 0..read_bytes { - buf[out_buff_index] = self.buffer[self.next_buffer_index + i]; - out_buff_index += 1; - } - - let current_pos = self.stream.tell().ok().unwrap(); - let remained_bytes_in_file = self.file_length_bytes - current_pos; - self.next_buffer_index = 0; - - if remained_bytes_in_file < self.buffer.len() { - self.occupied_size = remained_bytes_in_file; - self.stream - .read_exact(&mut self.buffer[0..remained_bytes_in_file])?; - } else { - self.occupied_size = self.buffer.len(); - self.stream.read_exact(&mut self.buffer)?; - } - } + fn read(&mut self, buf: &mut [u8]) -> std::io::Result { + let mut out_buff_index = 0; + + loop { + if out_buff_index >= buf.len() { + break; + } + + let to_read = buf.len() - out_buff_index; + if self.next_buffer_index + to_read <= self.occupied_size { + for i in 0..to_read { + buf[out_buff_index] = self.buffer[self.next_buffer_index + i]; + out_buff_index += 1; + } + + self.next_buffer_index += to_read; + break; + } else { + let read_bytes = self.occupied_size - self.next_buffer_index; + for i in 0..read_bytes { + buf[out_buff_index] = self.buffer[self.next_buffer_index + i]; + out_buff_index += 1; } - self.total_read_bytes += buf.len(); - Ok(buf.len()) + let current_pos = self.stream.tell().ok().unwrap(); + let remained_bytes_in_file = self.file_length_bytes - current_pos; + self.next_buffer_index = 0; + + if remained_bytes_in_file < self.buffer.len() { + self.occupied_size = remained_bytes_in_file; + self.stream.read_exact(&mut self.buffer[0..remained_bytes_in_file])?; + } else { + self.occupied_size = self.buffer.len(); + self.stream.read_exact(&mut self.buffer)?; + } + } } + + self.total_read_bytes += buf.len(); + Ok(buf.len()) + } } impl SeekStream for BufferedReadFileStream { - fn seek(&mut self, to: usize) -> crate::binary_rw::core::Result { - self.next_buffer_index = 0; - self.occupied_size = 0; + fn seek(&mut self, to: usize) -> crate::binary_rw::core::Result { + self.next_buffer_index = 0; + self.occupied_size = 0; - self.stream.seek(to) - } + self.stream.seek(to) + } - fn tell(&mut self) -> crate::binary_rw::core::Result { - //reduce the number of sys calls - Ok(self.total_read_bytes) - } + fn tell(&mut self) -> crate::binary_rw::core::Result { + //reduce the number of sys calls + Ok(self.total_read_bytes) + } - fn len(&self) -> crate::binary_rw::core::Result { - self.stream.len() - } + fn len(&self) -> crate::binary_rw::core::Result { + self.stream.len() + } } pub struct BufferedWriteFileStream { - stream: FileStream, - buffer: Vec, - written_bytes_count: usize, + stream: FileStream, + buffer: Vec, + written_bytes_count: usize, } impl BufferedWriteFileStream { - pub fn new(stream: FileStream, buffer_size: usize) -> Self { - Self { - stream, - buffer: vec![0; buffer_size], - written_bytes_count: 0, - } + pub fn new(stream: FileStream, buffer_size: usize) -> Self { + Self { + stream, + buffer: vec![0; buffer_size], + written_bytes_count: 0, } + } } impl WriteStream for BufferedWriteFileStream {} impl SeekStream for BufferedWriteFileStream { - fn seek(&mut self, to: usize) -> crate::binary_rw::core::Result { - self.flush()?; - self.stream.seek(to) - } - - fn tell(&mut self) -> crate::binary_rw::core::Result { - self.stream.tell() - } - - fn len(&self) -> crate::binary_rw::core::Result { - self.stream.len() - } + fn seek(&mut self, to: usize) -> crate::binary_rw::core::Result { + self.flush()?; + self.stream.seek(to) + } + + fn tell(&mut self) -> crate::binary_rw::core::Result { + self.stream.tell() + } + + fn len(&self) -> crate::binary_rw::core::Result { + self.stream.len() + } } impl Write for BufferedWriteFileStream { - fn write(&mut self, buf: &[u8]) -> std::io::Result { - if buf.len() > self.buffer.len() { - self.flush()?; - self.stream.write(buf)?; - } else { - let remained_space = self.buffer.len() - self.written_bytes_count; - if buf.len() > remained_space { - self.flush()?; - self.written_bytes_count = buf.len(); - for i in 0..buf.len() { - self.buffer[i] = buf[i]; - } - } else { - for i in 0..buf.len() { - self.buffer[self.written_bytes_count + i] = buf[i]; - } - - self.written_bytes_count += buf.len(); - } + fn write(&mut self, buf: &[u8]) -> std::io::Result { + if buf.len() > self.buffer.len() { + self.flush()?; + self.stream.write(buf)?; + } else { + let remained_space = self.buffer.len() - self.written_bytes_count; + if buf.len() > remained_space { + self.flush()?; + self.written_bytes_count = buf.len(); + for i in 0..buf.len() { + self.buffer[i] = buf[i]; + } + } else { + for i in 0..buf.len() { + self.buffer[self.written_bytes_count + i] = buf[i]; } - Ok(buf.len()) + self.written_bytes_count += buf.len(); + } } - fn flush(&mut self) -> std::io::Result<()> { - if self.written_bytes_count != 0 { - self.written_bytes_count = 0; - self.stream - .write(&self.buffer[0..self.written_bytes_count])?; - } + Ok(buf.len()) + } - self.stream.flush() + fn flush(&mut self) -> std::io::Result<()> { + if self.written_bytes_count != 0 { + self.written_bytes_count = 0; + self.stream.write(&self.buffer[0..self.written_bytes_count])?; } + + self.stream.flush() + } } diff --git a/bxes/src/rust/bxes/src/writer/errors.rs b/bxes/src/rust/bxes/src/writer/errors.rs index 3b1eee6ea..15615efbb 100644 --- a/bxes/src/rust/bxes/src/writer/errors.rs +++ b/bxes/src/rust/bxes/src/writer/errors.rs @@ -1,35 +1,34 @@ use std::{fmt::Display, rc::Rc}; -use crate::binary_rw::error::BinaryError; -use crate::models::domain::bxes_value::BxesValue; +use crate::{binary_rw::error::BinaryError, models::domain::bxes_value::BxesValue}; #[derive(Debug)] pub enum BxesWriteError { - FailedToOpenFileForWriting(String), - WriteError(BinaryError), - FailedToGetWriterPosition(String), - FailedToSeek(String), - FailedToFindKeyValueIndex((Rc>, Rc>)), - FailedToFindValueIndex(Rc>), - FailedToCreateTempFile, - FailedToCreateArchive, - LebWriteError(String), - Default(String), + FailedToOpenFileForWriting(String), + WriteError(BinaryError), + FailedToGetWriterPosition(String), + FailedToSeek(String), + FailedToFindKeyValueIndex((Rc>, Rc>)), + FailedToFindValueIndex(Rc>), + FailedToCreateTempFile, + FailedToCreateArchive, + LebWriteError(String), + Default(String), } impl ToString for BxesWriteError { - fn to_string(&self) -> String { - match self { - BxesWriteError::FailedToOpenFileForWriting(err) => err.to_owned(), - BxesWriteError::WriteError(err) => err.to_string(), - BxesWriteError::FailedToGetWriterPosition(err) => err.to_owned(), - BxesWriteError::FailedToSeek(err) => err.to_owned(), - BxesWriteError::FailedToFindKeyValueIndex(value) => format!("{:?}", value), - BxesWriteError::FailedToFindValueIndex(value) => format!("{:?}", value), - BxesWriteError::FailedToCreateTempFile => "FailedToCreateTempFile".to_string(), - BxesWriteError::FailedToCreateArchive => "FailedToCreateArchive".to_string(), - BxesWriteError::LebWriteError(err) => err.to_string(), - BxesWriteError::Default(err) => err.to_owned(), - } + fn to_string(&self) -> String { + match self { + BxesWriteError::FailedToOpenFileForWriting(err) => err.to_owned(), + BxesWriteError::WriteError(err) => err.to_string(), + BxesWriteError::FailedToGetWriterPosition(err) => err.to_owned(), + BxesWriteError::FailedToSeek(err) => err.to_owned(), + BxesWriteError::FailedToFindKeyValueIndex(value) => format!("{:?}", value), + BxesWriteError::FailedToFindValueIndex(value) => format!("{:?}", value), + BxesWriteError::FailedToCreateTempFile => "FailedToCreateTempFile".to_string(), + BxesWriteError::FailedToCreateArchive => "FailedToCreateArchive".to_string(), + BxesWriteError::LebWriteError(err) => err.to_string(), + BxesWriteError::Default(err) => err.to_owned(), } + } } diff --git a/bxes/src/rust/bxes/src/writer/multiple_file_bxes_writer.rs b/bxes/src/rust/bxes/src/writer/multiple_file_bxes_writer.rs index 33ea2a873..b6af238b8 100644 --- a/bxes/src/rust/bxes/src/writer/multiple_file_bxes_writer.rs +++ b/bxes/src/rust/bxes/src/writer/multiple_file_bxes_writer.rs @@ -1,78 +1,68 @@ -use crate::writer::writer_utils::{try_write_system_metadata, BxesLogWriteData}; use crate::{ - binary_rw::core::{BinaryWriter, Endian}, - constants, + binary_rw::core::{BinaryWriter, Endian}, + constants, + writer::writer_utils::{try_write_system_metadata, BxesLogWriteData}, }; use std::{cell::RefCell, path::Path, rc::Rc}; use super::{ - errors::BxesWriteError, - write_context::BxesWriteContext, - writer_utils::{ - try_open_write, try_write_key_values, try_write_log_metadata, try_write_u32_no_type_id, - try_write_values, try_write_variants, - }, + errors::BxesWriteError, + write_context::BxesWriteContext, + writer_utils::{ + try_open_write, try_write_key_values, try_write_log_metadata, try_write_u32_no_type_id, try_write_values, try_write_variants, + }, }; -type WriterFunc = - dyn Fn(&BxesLogWriteData, Rc>) -> Result<(), BxesWriteError>; +type WriterFunc = dyn Fn(&BxesLogWriteData, Rc>) -> Result<(), BxesWriteError>; -pub fn write_bxes_multiple_files( - data: &BxesLogWriteData, - directory_path: &str, -) -> Result<(), BxesWriteError> { - let context = BxesWriteContext::empty(data.system_metadata.values_attrs.clone()); +pub fn write_bxes_multiple_files(data: &BxesLogWriteData, directory_path: &str) -> Result<(), BxesWriteError> { + let context = BxesWriteContext::empty(data.system_metadata.values_attrs.clone()); - let writer = |file_path: &'static str, action: Box| { - execute_with_writer(&data, directory_path, file_path, &context, action) - }; + let writer = |file_path: &'static str, action: Box| execute_with_writer(&data, directory_path, file_path, &context, action); - writer( - constants::SYSTEM_METADATA_FILE_NAME, - Box::new(|data, context| try_write_system_metadata(&data.system_metadata, context)), - )?; + writer( + constants::SYSTEM_METADATA_FILE_NAME, + Box::new(|data, context| try_write_system_metadata(&data.system_metadata, context)), + )?; - writer( - constants::VALUES_FILE_NAME, - Box::new(|data, context| try_write_values(&data.log, context)), - )?; + writer( + constants::VALUES_FILE_NAME, + Box::new(|data, context| try_write_values(&data.log, context)), + )?; - writer( - constants::KEY_VALUES_FILE_NAME, - Box::new(|data, context| try_write_key_values(&data.log, context)), - )?; + writer( + constants::KEY_VALUES_FILE_NAME, + Box::new(|data, context| try_write_key_values(&data.log, context)), + )?; - writer( - constants::METADATA_FILE_NAME, - Box::new(|data, context| try_write_log_metadata(&data.log, context)), - )?; + writer( + constants::METADATA_FILE_NAME, + Box::new(|data, context| try_write_log_metadata(&data.log, context)), + )?; - writer( - constants::VARIANTS_FILE_NAME, - Box::new(|data, context| try_write_variants(&data.log, context)), - ) + writer( + constants::VARIANTS_FILE_NAME, + Box::new(|data, context| try_write_variants(&data.log, context)), + ) } fn execute_with_writer<'a, T>( - data: &'a BxesLogWriteData, - directory_path: &'a str, - file_name: &'static str, - context: &'a BxesWriteContext<'_>, - action: T, + data: &'a BxesLogWriteData, + directory_path: &'a str, + file_name: &'static str, + context: &'a BxesWriteContext<'_>, + action: T, ) -> Result<(), BxesWriteError> where - T: Fn(&BxesLogWriteData, Rc>) -> Result<(), BxesWriteError>, + T: Fn(&BxesLogWriteData, Rc>) -> Result<(), BxesWriteError>, { - let directory_path = Path::new(directory_path); - let file_path = directory_path.join(file_name); - let file_path = file_path.to_str().unwrap(); + let directory_path = Path::new(directory_path); + let file_path = directory_path.join(file_name); + let file_path = file_path.to_str().unwrap(); - let mut file_stream = try_open_write(file_path)?; - let mut writer = BinaryWriter::new(&mut file_stream, Endian::Little); + let mut file_stream = try_open_write(file_path)?; + let mut writer = BinaryWriter::new(&mut file_stream, Endian::Little); - try_write_u32_no_type_id(&mut writer, data.log.version)?; - action( - data, - Rc::new(RefCell::new(context.with_writer(&mut writer))), - ) + try_write_u32_no_type_id(&mut writer, data.log.version)?; + action(data, Rc::new(RefCell::new(context.with_writer(&mut writer)))) } diff --git a/bxes/src/rust/bxes/src/writer/single_file_bxes_writer.rs b/bxes/src/rust/bxes/src/writer/single_file_bxes_writer.rs index b0c8f6c07..7c3b72ff7 100644 --- a/bxes/src/rust/bxes/src/writer/single_file_bxes_writer.rs +++ b/bxes/src/rust/bxes/src/writer/single_file_bxes_writer.rs @@ -1,75 +1,72 @@ -use std::fs::File; -use std::io::Read; -use std::{cell::RefCell, rc::Rc}; +use std::{cell::RefCell, fs::File, io::Read, rc::Rc}; use tempfile::NamedTempFile; -use crate::binary_rw::core::{BinaryWriter, Endian}; -use crate::writer::writer_utils::{try_write_system_metadata, BxesLogWriteData}; +use crate::{ + binary_rw::core::{BinaryWriter, Endian}, + writer::writer_utils::{try_write_system_metadata, BxesLogWriteData}, +}; use super::{ - errors::BxesWriteError, - write_context::BxesWriteContext, - writer_utils::{ - compress_to_archive, try_open_write, try_write_key_values, try_write_log_metadata, - try_write_values, try_write_variants, try_write_version, - }, + errors::BxesWriteError, + write_context::BxesWriteContext, + writer_utils::{ + compress_to_archive, try_open_write, try_write_key_values, try_write_log_metadata, try_write_values, try_write_variants, + try_write_version, + }, }; pub fn write_bxes(path: &str, data: &BxesLogWriteData) -> Result<(), BxesWriteError> { - let temp_file = create_temp_file()?; - let raw_log_path = temp_file.path().to_str().unwrap(); + let temp_file = create_temp_file()?; + let raw_log_path = temp_file.path().to_str().unwrap(); - write_bxes_to_temp_file(data, raw_log_path)?; - compress_to_archive(raw_log_path, path)?; + write_bxes_to_temp_file(data, raw_log_path)?; + compress_to_archive(raw_log_path, path)?; - Ok(()) + Ok(()) } pub fn write_bxes_to_bytes(data: &BxesLogWriteData) -> Result, BxesWriteError> { - let temp_file = create_temp_file()?; - let raw_log_path = temp_file.path().to_str().unwrap(); + let temp_file = create_temp_file()?; + let raw_log_path = temp_file.path().to_str().unwrap(); - write_bxes_to_temp_file(data, raw_log_path)?; - let archive_temp_file = create_temp_file()?; - let archive_path = archive_temp_file.path().to_str().unwrap(); + write_bxes_to_temp_file(data, raw_log_path)?; + let archive_temp_file = create_temp_file()?; + let archive_path = archive_temp_file.path().to_str().unwrap(); - compress_to_archive(raw_log_path, archive_path)?; + compress_to_archive(raw_log_path, archive_path)?; - let mut bytes = vec![]; + let mut bytes = vec![]; - match File::open(archive_path) { - Ok(mut file) => match file.read_to_end(&mut bytes) { - Ok(_) => Ok(bytes), - Err(err) => Err(BxesWriteError::Default(err.to_string())), - }, - Err(err) => Err(BxesWriteError::Default(err.to_string())), - } + match File::open(archive_path) { + Ok(mut file) => match file.read_to_end(&mut bytes) { + Ok(_) => Ok(bytes), + Err(err) => Err(BxesWriteError::Default(err.to_string())), + }, + Err(err) => Err(BxesWriteError::Default(err.to_string())), + } } fn create_temp_file() -> Result { - match NamedTempFile::new() { - Ok(file) => Ok(file), - Err(_) => Err(BxesWriteError::FailedToCreateTempFile), - } + match NamedTempFile::new() { + Ok(file) => Ok(file), + Err(_) => Err(BxesWriteError::FailedToCreateTempFile), + } } -fn write_bxes_to_temp_file( - data: &BxesLogWriteData, - raw_log_path: &str, -) -> Result<(), BxesWriteError> { - let mut stream = try_open_write(raw_log_path)?; - let mut writer = BinaryWriter::new(&mut stream, Endian::Little); +fn write_bxes_to_temp_file(data: &BxesLogWriteData, raw_log_path: &str) -> Result<(), BxesWriteError> { + let mut stream = try_open_write(raw_log_path)?; + let mut writer = BinaryWriter::new(&mut stream, Endian::Little); - let context = BxesWriteContext::new(&mut writer, data.system_metadata.values_attrs.clone()); - let context = Rc::new(RefCell::new(context)); + let context = BxesWriteContext::new(&mut writer, data.system_metadata.values_attrs.clone()); + let context = Rc::new(RefCell::new(context)); - let log = &data.log; - try_write_version(context.borrow_mut().writer.as_mut().unwrap(), log.version)?; - try_write_system_metadata(&data.system_metadata, context.clone())?; - try_write_values(log, context.clone())?; - try_write_key_values(log, context.clone())?; - try_write_log_metadata(log, context.clone())?; - try_write_variants(log, context.clone())?; + let log = &data.log; + try_write_version(context.borrow_mut().writer.as_mut().unwrap(), log.version)?; + try_write_system_metadata(&data.system_metadata, context.clone())?; + try_write_values(log, context.clone())?; + try_write_key_values(log, context.clone())?; + try_write_log_metadata(log, context.clone())?; + try_write_variants(log, context.clone())?; - Ok(()) + Ok(()) } diff --git a/bxes/src/rust/bxes/src/writer/write_context.rs b/bxes/src/rust/bxes/src/writer/write_context.rs index 410dc72b9..e59f0c4b9 100644 --- a/bxes/src/rust/bxes/src/writer/write_context.rs +++ b/bxes/src/rust/bxes/src/writer/write_context.rs @@ -1,59 +1,58 @@ -use std::collections::HashSet; -use std::{cell::RefCell, collections::HashMap, rc::Rc}; +use std::{ + cell::RefCell, + collections::{HashMap, HashSet}, + rc::Rc, +}; -use crate::binary_rw::core::BinaryWriter; -use crate::models::domain::bxes_value::BxesValue; -use crate::models::system_models::ValueAttributeDescriptor; +use crate::{ + binary_rw::core::BinaryWriter, + models::{domain::bxes_value::BxesValue, system_models::ValueAttributeDescriptor}, +}; pub struct BxesWriteContext<'b> { - pub values_indices: Rc>, usize>>>, - pub kv_indices: Rc>, Rc>), usize>>>, - pub writer: Option<&'b mut BinaryWriter<'b>>, - pub value_attributes: Option>, - pub value_attributes_set: Option>, + pub values_indices: Rc>, usize>>>, + pub kv_indices: Rc>, Rc>), usize>>>, + pub writer: Option<&'b mut BinaryWriter<'b>>, + pub value_attributes: Option>, + pub value_attributes_set: Option>, } impl<'b> BxesWriteContext<'b> { - pub fn empty(value_attributes: Option>) -> Self { - Self { - values_indices: Rc::new(RefCell::new(HashMap::new())), - kv_indices: Rc::new(RefCell::new(HashMap::new())), - writer: None, - value_attributes_set: Self::create_value_attributes_set(value_attributes.as_ref()), - value_attributes, - } + pub fn empty(value_attributes: Option>) -> Self { + Self { + values_indices: Rc::new(RefCell::new(HashMap::new())), + kv_indices: Rc::new(RefCell::new(HashMap::new())), + writer: None, + value_attributes_set: Self::create_value_attributes_set(value_attributes.as_ref()), + value_attributes, } + } - fn create_value_attributes_set( - value_attributes: Option<&Vec>, - ) -> Option> { - if let Some(attributes) = value_attributes { - Some(attributes.iter().map(|d| d.clone()).collect()) - } else { - None - } + fn create_value_attributes_set(value_attributes: Option<&Vec>) -> Option> { + if let Some(attributes) = value_attributes { + Some(attributes.iter().map(|d| d.clone()).collect()) + } else { + None } + } - pub fn new( - writer: &'b mut BinaryWriter<'b>, - value_attributes: Option>, - ) -> Self { - Self { - values_indices: Rc::new(RefCell::new(HashMap::new())), - kv_indices: Rc::new(RefCell::new(HashMap::new())), - writer: Some(writer), - value_attributes_set: Self::create_value_attributes_set(value_attributes.as_ref()), - value_attributes, - } + pub fn new(writer: &'b mut BinaryWriter<'b>, value_attributes: Option>) -> Self { + Self { + values_indices: Rc::new(RefCell::new(HashMap::new())), + kv_indices: Rc::new(RefCell::new(HashMap::new())), + writer: Some(writer), + value_attributes_set: Self::create_value_attributes_set(value_attributes.as_ref()), + value_attributes, } + } - pub fn with_writer<'c>(&self, writer: &'c mut BinaryWriter<'c>) -> BxesWriteContext<'c> { - BxesWriteContext { - values_indices: self.values_indices.clone(), - kv_indices: self.kv_indices.clone(), - writer: Some(writer), - value_attributes: self.value_attributes.clone(), - value_attributes_set: self.value_attributes_set.clone(), - } + pub fn with_writer<'c>(&self, writer: &'c mut BinaryWriter<'c>) -> BxesWriteContext<'c> { + BxesWriteContext { + values_indices: self.values_indices.clone(), + kv_indices: self.kv_indices.clone(), + writer: Some(writer), + value_attributes: self.value_attributes.clone(), + value_attributes_set: self.value_attributes_set.clone(), } + } } diff --git a/bxes/src/rust/bxes/src/writer/writer_utils.rs b/bxes/src/rust/bxes/src/writer/writer_utils.rs index ca6eb6950..67bc15cc7 100644 --- a/bxes/src/rust/bxes/src/writer/writer_utils.rs +++ b/bxes/src/rust/bxes/src/writer/writer_utils.rs @@ -1,961 +1,764 @@ -use std::collections::HashMap; use std::{ - cell::RefCell, - fs::{self, File}, - io::Write, - path::Path, - rc::Rc, + cell::RefCell, + collections::HashMap, + fs::{self, File}, + io::Write, + path::Path, + rc::Rc, }; use num_traits::ToPrimitive; use zip::{write::FileOptions, ZipWriter}; -use crate::binary_rw::{ +use crate::{ + binary_rw::{ core::{BinaryWriter, SeekStream}, file_stream::FileStream, + }, + models::{ + domain::{ + bxes_artifact::BxesArtifact, + bxes_driver::BxesDrivers, + bxes_event_log::{BxesEvent, BxesEventLog}, + bxes_lifecycle::{BrafLifecycle, Lifecycle, StandardLifecycle}, + bxes_log_metadata::{BxesClassifier, BxesExtension, BxesGlobal}, + bxes_value::BxesValue, + software_event_type::SoftwareEventType, + type_ids::{get_type_id, TypeIds}, + }, + system_models::{SystemMetadata, ValueAttributeDescriptor}, + }, + read::read_utils::string_or_err, }; -use crate::models::domain::bxes_artifact::BxesArtifact; -use crate::models::domain::bxes_driver::BxesDrivers; -use crate::models::domain::bxes_event_log::{BxesEvent, BxesEventLog}; -use crate::models::domain::bxes_lifecycle::{BrafLifecycle, Lifecycle, StandardLifecycle}; -use crate::models::domain::bxes_log_metadata::{BxesClassifier, BxesExtension, BxesGlobal}; -use crate::models::domain::bxes_value::BxesValue; -use crate::models::domain::software_event_type::SoftwareEventType; -use crate::models::domain::type_ids::{get_type_id, TypeIds}; -use crate::models::system_models::{SystemMetadata, ValueAttributeDescriptor}; -use crate::read::read_utils::string_or_err; use super::{errors::BxesWriteError, write_context::BxesWriteContext}; pub struct BxesLogWriteData { - pub log: BxesEventLog, - pub system_metadata: SystemMetadata, + pub log: BxesEventLog, + pub system_metadata: SystemMetadata, } -pub fn try_write_system_metadata( - system_metadata: &SystemMetadata, - context: Rc>, -) -> Result<(), BxesWriteError> { - try_write_values_attributes(system_metadata.values_attrs.as_ref(), context) +pub fn try_write_system_metadata(system_metadata: &SystemMetadata, context: Rc>) -> Result<(), BxesWriteError> { + try_write_values_attributes(system_metadata.values_attrs.as_ref(), context) } fn try_write_values_attributes( - value_attributes: Option<&Vec>, - context: Rc>, + value_attributes: Option<&Vec>, + context: Rc>, ) -> Result<(), BxesWriteError> { - if let Some(value_attributes) = value_attributes { - write_collection_and_count( - context.clone(), - false, - value_attributes.len() as u32, - || { - for attr in value_attributes { - try_write_u8_no_type_id( - context.borrow_mut().writer.as_mut().unwrap(), - attr.type_id.to_u8().unwrap(), - )?; - try_write_string( - context.borrow_mut().writer.as_mut().unwrap(), - attr.name.as_str(), - )?; - } - - Ok(()) - }, - ) - } else { - try_write_u32_no_type_id(context.borrow_mut().writer.as_mut().unwrap(), 0) - } + if let Some(value_attributes) = value_attributes { + write_collection_and_count(context.clone(), false, value_attributes.len() as u32, || { + for attr in value_attributes { + try_write_u8_no_type_id(context.borrow_mut().writer.as_mut().unwrap(), attr.type_id.to_u8().unwrap())?; + try_write_string(context.borrow_mut().writer.as_mut().unwrap(), attr.name.as_str())?; + } + + Ok(()) + }) + } else { + try_write_u32_no_type_id(context.borrow_mut().writer.as_mut().unwrap(), 0) + } } -pub fn try_write_variants( - log: &BxesEventLog, - context: Rc>, -) -> Result<(), BxesWriteError> { - write_collection_and_count(context.clone(), false, log.variants.len() as u32, || { - for variant in &log.variants { - try_write_u32_no_type_id( - context.borrow_mut().writer.as_mut().unwrap(), - variant.traces_count, - )?; - - try_write_attributes(context.clone(), Some(&variant.metadata), false)?; - - write_collection_and_count( - context.clone(), - false, - variant.events.len() as u32, - || { - for event in &variant.events { - try_write_event(event, context.clone())?; - } - - Ok(()) - }, - )?; +pub fn try_write_variants(log: &BxesEventLog, context: Rc>) -> Result<(), BxesWriteError> { + write_collection_and_count(context.clone(), false, log.variants.len() as u32, || { + for variant in &log.variants { + try_write_u32_no_type_id(context.borrow_mut().writer.as_mut().unwrap(), variant.traces_count)?; + + try_write_attributes(context.clone(), Some(&variant.metadata), false)?; + + write_collection_and_count(context.clone(), false, variant.events.len() as u32, || { + for event in &variant.events { + try_write_event(event, context.clone())?; } Ok(()) - }) + })?; + } + + Ok(()) + }) } -pub fn try_write_event( - event: &BxesEvent, - context: Rc>, -) -> Result<(), BxesWriteError> { - let exists = context - .borrow() - .values_indices - .borrow() - .contains_key(&event.name); - - if exists { - let index = *context - .borrow() - .values_indices - .borrow() - .get(&event.name) - .unwrap(); - - try_write_leb_128(context.borrow_mut().writer.as_mut().unwrap(), index as u32)?; - } else { - return Err(BxesWriteError::FailedToFindValueIndex(event.name.clone())); - }; +pub fn try_write_event(event: &BxesEvent, context: Rc>) -> Result<(), BxesWriteError> { + let exists = context.borrow().values_indices.borrow().contains_key(&event.name); - try_write_i64_no_type_id( - context.borrow_mut().writer.as_mut().unwrap(), - event.timestamp, - )?; + if exists { + let index = *context.borrow().values_indices.borrow().get(&event.name).unwrap(); - try_write_event_attributes(event, context.clone()) + try_write_leb_128(context.borrow_mut().writer.as_mut().unwrap(), index as u32)?; + } else { + return Err(BxesWriteError::FailedToFindValueIndex(event.name.clone())); + }; + + try_write_i64_no_type_id(context.borrow_mut().writer.as_mut().unwrap(), event.timestamp)?; + + try_write_event_attributes(event, context.clone()) } -fn try_write_event_attributes( - event: &BxesEvent, - context: Rc>, -) -> Result<(), BxesWriteError> { - let value_attrs_count = try_write_event_value_attributes(event, context.clone())?; - try_write_event_default_attributes(event, context.clone(), value_attrs_count)?; +fn try_write_event_attributes(event: &BxesEvent, context: Rc>) -> Result<(), BxesWriteError> { + let value_attrs_count = try_write_event_value_attributes(event, context.clone())?; + try_write_event_default_attributes(event, context.clone(), value_attrs_count)?; - Ok(()) + Ok(()) } fn try_write_event_default_attributes( - event: &BxesEvent, - context: Rc>, - value_attrs_count: usize, -) -> Result<(), BxesWriteError> { - let default_attrs_count = count(event.attributes.as_ref()) - value_attrs_count as u32; - write_collection_and_count(context.clone(), true, default_attrs_count, || { - if let Some(attributes) = event.attributes.as_ref() { - for (key, value) in attributes { - let should_write = if let Some(set) = context.borrow().value_attributes_set.as_ref() - { - let desc = ValueAttributeDescriptor { - name: string_or_err(&key).ok().unwrap().as_ref().as_ref().clone(), - type_id: get_type_id(&value), - }; - - !set.contains(&desc) - } else { - true - }; - - if should_write { - try_write_kv_index(context.clone(), &(key.clone(), value.clone()), true)?; - } - } + event: &BxesEvent, + context: Rc>, + value_attrs_count: usize, +) -> Result<(), BxesWriteError> { + let default_attrs_count = count(event.attributes.as_ref()) - value_attrs_count as u32; + write_collection_and_count(context.clone(), true, default_attrs_count, || { + if let Some(attributes) = event.attributes.as_ref() { + for (key, value) in attributes { + let should_write = if let Some(set) = context.borrow().value_attributes_set.as_ref() { + let desc = ValueAttributeDescriptor { + name: string_or_err(&key).ok().unwrap().as_ref().as_ref().clone(), + type_id: get_type_id(&value), + }; + + !set.contains(&desc) + } else { + true + }; + + if should_write { + try_write_kv_index(context.clone(), &(key.clone(), value.clone()), true)?; } + } + } - Ok(()) - }) + Ok(()) + }) } -fn try_write_event_value_attributes( - event: &BxesEvent, - context: Rc>, -) -> Result { - let mut value_attributes_count = 0usize; - let mut attrs_to_write = vec![]; +fn try_write_event_value_attributes(event: &BxesEvent, context: Rc>) -> Result { + let mut value_attributes_count = 0usize; + let mut attrs_to_write = vec![]; - let map = if let Some(attributes) = event.attributes.as_ref() { - let mut map = HashMap::new(); - for event_attribute in attributes { - if let BxesValue::String(string) = event_attribute.0.as_ref().as_ref() { - map.insert(string.as_ref().as_ref(), &event_attribute.1); - } - } + let map = if let Some(attributes) = event.attributes.as_ref() { + let mut map = HashMap::new(); + for event_attribute in attributes { + if let BxesValue::String(string) = event_attribute.0.as_ref().as_ref() { + map.insert(string.as_ref().as_ref(), &event_attribute.1); + } + } - Some(map) - } else { - None - }; - - if let Some(value_attributes) = context.borrow().value_attributes.as_ref() { - for value_attribute in value_attributes { - if let Some(map) = map.as_ref() { - if let Some(found_attribute) = map.get(&value_attribute.name) { - attrs_to_write.push(found_attribute.as_ref().as_ref()); - value_attributes_count += 1; - continue; - } - } - - attrs_to_write.push(&BxesValue::Null); + Some(map) + } else { + None + }; + + if let Some(value_attributes) = context.borrow().value_attributes.as_ref() { + for value_attribute in value_attributes { + if let Some(map) = map.as_ref() { + if let Some(found_attribute) = map.get(&value_attribute.name) { + attrs_to_write.push(found_attribute.as_ref().as_ref()); + value_attributes_count += 1; + continue; } - } + } - for attr in &attrs_to_write { - try_write_value(&mut context.borrow_mut(), attr)?; + attrs_to_write.push(&BxesValue::Null); } + } - Ok(value_attributes_count) + for attr in &attrs_to_write { + try_write_value(&mut context.borrow_mut(), attr)?; + } + + Ok(value_attributes_count) } -fn is_value_attribute( - attribute: &(Rc>, Rc>), - desc: &ValueAttributeDescriptor, -) -> bool { - let key = string_or_err(&attribute.0.as_ref().as_ref()).ok().unwrap(); - key.as_ref().as_ref() == &desc.name && get_type_id(&attribute.1) == desc.type_id +fn is_value_attribute(attribute: &(Rc>, Rc>), desc: &ValueAttributeDescriptor) -> bool { + let key = string_or_err(&attribute.0.as_ref().as_ref()).ok().unwrap(); + key.as_ref().as_ref() == &desc.name && get_type_id(&attribute.1) == desc.type_id } -pub fn try_write_log_metadata( - log: &BxesEventLog, - context: Rc>, -) -> Result<(), BxesWriteError> { - try_write_properties(context.clone(), log.metadata.properties.as_ref())?; - try_write_extensions(context.clone(), log.metadata.extensions.as_ref())?; - try_write_globals(context.clone(), log.metadata.globals.as_ref())?; - try_write_classifiers(context.clone(), log.metadata.classifiers.as_ref()) +pub fn try_write_log_metadata(log: &BxesEventLog, context: Rc>) -> Result<(), BxesWriteError> { + try_write_properties(context.clone(), log.metadata.properties.as_ref())?; + try_write_extensions(context.clone(), log.metadata.extensions.as_ref())?; + try_write_globals(context.clone(), log.metadata.globals.as_ref())?; + try_write_classifiers(context.clone(), log.metadata.classifiers.as_ref()) } struct BinaryWriterWrapper<'a, 'b> { - writer: &'a mut BinaryWriter<'b>, + writer: &'a mut BinaryWriter<'b>, } impl<'a, 'b> Write for BinaryWriterWrapper<'a, 'b> { - fn write(&mut self, buf: &[u8]) -> std::io::Result { - match self.writer.write_bytes(buf) { - Ok(written) => Ok(written), - Err(err) => Err(std::io::Error::new( - std::io::ErrorKind::Other, - err.to_string(), - )), - } + fn write(&mut self, buf: &[u8]) -> std::io::Result { + match self.writer.write_bytes(buf) { + Ok(written) => Ok(written), + Err(err) => Err(std::io::Error::new(std::io::ErrorKind::Other, err.to_string())), } + } - fn flush(&mut self) -> std::io::Result<()> { - Ok(()) - } + fn flush(&mut self) -> std::io::Result<()> { + Ok(()) + } } impl<'a, 'b> BinaryWriterWrapper<'a, 'b> { - pub fn new(writer: &'a mut BinaryWriter<'b>) -> Self { - Self { writer } - } + pub fn new(writer: &'a mut BinaryWriter<'b>) -> Self { + Self { writer } + } } pub fn try_write_leb_128<'a>(writer: &mut BinaryWriter, value: u32) -> Result<(), BxesWriteError> { - let mut wrapper = BinaryWriterWrapper::new(writer); + let mut wrapper = BinaryWriterWrapper::new(writer); - match leb128::write::unsigned(&mut wrapper, value as u64) { - Ok(_) => Ok(()), - Err(err) => Err(BxesWriteError::LebWriteError(err.to_string())), - } + match leb128::write::unsigned(&mut wrapper, value as u64) { + Ok(_) => Ok(()), + Err(err) => Err(BxesWriteError::LebWriteError(err.to_string())), + } } pub fn try_write_properties( - context: Rc>, - properties: Option<&Vec<(Rc>, Rc>)>>, -) -> Result<(), BxesWriteError> { - write_collection_and_count(context.clone(), false, count(properties), || { - if let Some(properties) = properties { - for property in properties { - try_write_kv_index( - context.clone(), - &(property.0.clone(), property.1.clone()), - false, - )?; - } - } + context: Rc>, + properties: Option<&Vec<(Rc>, Rc>)>>, +) -> Result<(), BxesWriteError> { + write_collection_and_count(context.clone(), false, count(properties), || { + if let Some(properties) = properties { + for property in properties { + try_write_kv_index(context.clone(), &(property.0.clone(), property.1.clone()), false)?; + } + } - Ok(()) - }) + Ok(()) + }) } fn count(vec: Option<&Vec>) -> u32 { - if let Some(vec) = vec { - vec.len() as u32 - } else { - 0 - } + if let Some(vec) = vec { + vec.len() as u32 + } else { + 0 + } } -pub fn try_write_globals( - context: Rc>, - globals: Option<&Vec>, -) -> Result<(), BxesWriteError> { - write_collection_and_count(context.clone(), false, count(globals), || { - if let Some(globals) = globals { - for global in globals { - try_write_enum_value_no_type_index( - context.borrow_mut().writer.as_mut().unwrap(), - &global.entity_kind, - )?; - - write_collection_and_count( - context.clone(), - false, - global.globals.len() as u32, - || { - for global in &global.globals { - try_write_kv_index( - context.clone(), - &(global.0.clone(), global.1.clone()), - false, - )?; - } - - Ok(()) - }, - )?; - } - } +pub fn try_write_globals(context: Rc>, globals: Option<&Vec>) -> Result<(), BxesWriteError> { + write_collection_and_count(context.clone(), false, count(globals), || { + if let Some(globals) = globals { + for global in globals { + try_write_enum_value_no_type_index(context.borrow_mut().writer.as_mut().unwrap(), &global.entity_kind)?; - Ok(()) - }) + write_collection_and_count(context.clone(), false, global.globals.len() as u32, || { + for global in &global.globals { + try_write_kv_index(context.clone(), &(global.0.clone(), global.1.clone()), false)?; + } + + Ok(()) + })?; + } + } + + Ok(()) + }) } pub fn try_write_kv_index( - context: Rc>, - kv: &(Rc>, Rc>), - write_leb_128: bool, + context: Rc>, + kv: &(Rc>, Rc>), + write_leb_128: bool, ) -> Result<(), BxesWriteError> { - if !context.borrow().kv_indices.borrow().contains_key(kv) { - Err(BxesWriteError::FailedToFindKeyValueIndex(( - kv.0.clone(), - kv.1.clone(), - ))) - } else { - let index = *context.borrow().kv_indices.borrow().get(kv).unwrap() as u32; + if !context.borrow().kv_indices.borrow().contains_key(kv) { + Err(BxesWriteError::FailedToFindKeyValueIndex((kv.0.clone(), kv.1.clone()))) + } else { + let index = *context.borrow().kv_indices.borrow().get(kv).unwrap() as u32; - if write_leb_128 { - try_write_leb_128(context.borrow_mut().writer.as_mut().unwrap(), index) - } else { - try_write_u32_no_type_id(context.borrow_mut().writer.as_mut().unwrap(), index) - } + if write_leb_128 { + try_write_leb_128(context.borrow_mut().writer.as_mut().unwrap(), index) + } else { + try_write_u32_no_type_id(context.borrow_mut().writer.as_mut().unwrap(), index) } + } } -pub fn try_write_extensions( - context: Rc>, - extensions: Option<&Vec>, -) -> Result<(), BxesWriteError> { - write_collection_and_count(context.clone(), false, count(extensions), || { - if let Some(extensions) = extensions { - for extension in extensions { - try_write_value_index(context.clone(), extension.name.clone())?; - try_write_value_index(context.clone(), extension.prefix.clone())?; - try_write_value_index(context.clone(), extension.uri.clone())?; - } - } +pub fn try_write_extensions(context: Rc>, extensions: Option<&Vec>) -> Result<(), BxesWriteError> { + write_collection_and_count(context.clone(), false, count(extensions), || { + if let Some(extensions) = extensions { + for extension in extensions { + try_write_value_index(context.clone(), extension.name.clone())?; + try_write_value_index(context.clone(), extension.prefix.clone())?; + try_write_value_index(context.clone(), extension.uri.clone())?; + } + } - Ok(()) - }) + Ok(()) + }) } pub fn try_write_classifiers( - context: Rc>, - classifiers: Option<&Vec>, -) -> Result<(), BxesWriteError> { - write_collection_and_count(context.clone(), false, count(classifiers), || { - if let Some(classifiers) = classifiers { - for classifier in classifiers { - try_write_value_index(context.clone(), classifier.name.clone())?; - write_collection_and_count( - context.clone(), - false, - classifier.keys.len() as u32, - || { - for key in &classifier.keys { - try_write_value_index(context.clone(), key.clone())?; - } - - Ok(()) - }, - )?; - } - } + context: Rc>, + classifiers: Option<&Vec>, +) -> Result<(), BxesWriteError> { + write_collection_and_count(context.clone(), false, count(classifiers), || { + if let Some(classifiers) = classifiers { + for classifier in classifiers { + try_write_value_index(context.clone(), classifier.name.clone())?; + write_collection_and_count(context.clone(), false, classifier.keys.len() as u32, || { + for key in &classifier.keys { + try_write_value_index(context.clone(), key.clone())?; + } + + Ok(()) + })?; + } + } - Ok(()) - }) + Ok(()) + }) } -fn try_write_value_index( - context: Rc>, - value: Rc>, -) -> Result<(), BxesWriteError> { - let exists = context - .borrow() - .values_indices - .borrow() - .contains_key(&value); - - if !exists { - Err(BxesWriteError::FailedToFindValueIndex(value.clone())) - } else { - let index = *context - .borrow() - .values_indices - .borrow() - .get(&value) - .unwrap() as u32; - - try_write_u32_no_type_id(context.borrow_mut().writer.as_mut().unwrap(), index) - } +fn try_write_value_index(context: Rc>, value: Rc>) -> Result<(), BxesWriteError> { + let exists = context.borrow().values_indices.borrow().contains_key(&value); + + if !exists { + Err(BxesWriteError::FailedToFindValueIndex(value.clone())) + } else { + let index = *context.borrow().values_indices.borrow().get(&value).unwrap() as u32; + + try_write_u32_no_type_id(context.borrow_mut().writer.as_mut().unwrap(), index) + } } pub fn try_write_attributes( - context: Rc>, - attributes: Option<&Vec<(Rc>, Rc>)>>, - write_leb_128_count: bool, -) -> Result<(), BxesWriteError> { - write_collection_and_count( - context.clone(), - write_leb_128_count, - count(attributes), - || { - if let Some(attributes) = attributes { - for (key, value) in attributes { - try_write_kv_index( - context.clone(), - &(key.clone(), value.clone()), - write_leb_128_count, - )?; - } - } - - Ok(()) - }, - ) -} - -pub fn try_write_key_values( - log: &BxesEventLog, - context: Rc>, -) -> Result<(), BxesWriteError> { - write_collection_and_count_after(context.clone(), || { - execute_with_kv_pairs(log, |value| { - match value { - ValueOrKeyValue::Value(_) => {} - ValueOrKeyValue::KeyValue((key, value)) => { - let exists = context - .borrow() - .kv_indices - .borrow() - .contains_key(&(key.clone(), value.clone())); - - if !exists { - let count = context.borrow().kv_indices.borrow().len(); - let key_index = *context.borrow().values_indices.borrow().get(key).unwrap(); - let value_index = - *context.borrow().values_indices.borrow().get(value).unwrap(); - - try_write_leb_128( - context.borrow_mut().writer.as_mut().unwrap(), - key_index as u32, - )?; - - try_write_leb_128( - context.borrow_mut().writer.as_mut().unwrap(), - value_index as u32, - )?; - - context - .borrow_mut() - .kv_indices - .borrow_mut() - .insert((key.clone(), value.clone()), count); - } - } - } - - Ok(()) - })?; + context: Rc>, + attributes: Option<&Vec<(Rc>, Rc>)>>, + write_leb_128_count: bool, +) -> Result<(), BxesWriteError> { + write_collection_and_count(context.clone(), write_leb_128_count, count(attributes), || { + if let Some(attributes) = attributes { + for (key, value) in attributes { + try_write_kv_index(context.clone(), &(key.clone(), value.clone()), write_leb_128_count)?; + } + } - Ok(context.borrow().kv_indices.borrow().len() as u32) - }) + Ok(()) + }) +} + +pub fn try_write_key_values(log: &BxesEventLog, context: Rc>) -> Result<(), BxesWriteError> { + write_collection_and_count_after(context.clone(), || { + execute_with_kv_pairs(log, |value| { + match value { + ValueOrKeyValue::Value(_) => {} + ValueOrKeyValue::KeyValue((key, value)) => { + let exists = context.borrow().kv_indices.borrow().contains_key(&(key.clone(), value.clone())); + + if !exists { + let count = context.borrow().kv_indices.borrow().len(); + let key_index = *context.borrow().values_indices.borrow().get(key).unwrap(); + let value_index = *context.borrow().values_indices.borrow().get(value).unwrap(); + + try_write_leb_128(context.borrow_mut().writer.as_mut().unwrap(), key_index as u32)?; + + try_write_leb_128(context.borrow_mut().writer.as_mut().unwrap(), value_index as u32)?; + + context + .borrow_mut() + .kv_indices + .borrow_mut() + .insert((key.clone(), value.clone()), count); + } + } + } + + Ok(()) + })?; + + Ok(context.borrow().kv_indices.borrow().len() as u32) + }) } pub enum ValueOrKeyValue<'a> { - Value(&'a Rc>), - KeyValue((&'a Rc>, &'a Rc>)), + Value(&'a Rc>), + KeyValue((&'a Rc>, &'a Rc>)), } fn execute_with_kv_pairs<'a>( - log: &'a BxesEventLog, - mut action: impl FnMut(ValueOrKeyValue<'a>) -> Result<(), BxesWriteError>, -) -> Result<(), BxesWriteError> { - if let Some(properties) = log.metadata.properties.as_ref() { - execute_with_attributes_kv_pairs(properties, &mut action)?; - } - - if let Some(extensions) = log.metadata.extensions.as_ref() { - for extension in extensions { - action(ValueOrKeyValue::Value(&extension.name))?; - action(ValueOrKeyValue::Value(&extension.prefix))?; - action(ValueOrKeyValue::Value(&extension.uri))?; - } + log: &'a BxesEventLog, + mut action: impl FnMut(ValueOrKeyValue<'a>) -> Result<(), BxesWriteError>, +) -> Result<(), BxesWriteError> { + if let Some(properties) = log.metadata.properties.as_ref() { + execute_with_attributes_kv_pairs(properties, &mut action)?; + } + + if let Some(extensions) = log.metadata.extensions.as_ref() { + for extension in extensions { + action(ValueOrKeyValue::Value(&extension.name))?; + action(ValueOrKeyValue::Value(&extension.prefix))?; + action(ValueOrKeyValue::Value(&extension.uri))?; } + } - if let Some(globals) = log.metadata.globals.as_ref() { - for global in globals { - execute_with_attributes_kv_pairs(&global.globals, &mut action)?; - } + if let Some(globals) = log.metadata.globals.as_ref() { + for global in globals { + execute_with_attributes_kv_pairs(&global.globals, &mut action)?; } + } - if let Some(classifiers) = log.metadata.classifiers.as_ref() { - for classifier in classifiers { - action(ValueOrKeyValue::Value(&classifier.name))?; + if let Some(classifiers) = log.metadata.classifiers.as_ref() { + for classifier in classifiers { + action(ValueOrKeyValue::Value(&classifier.name))?; - for key in &classifier.keys { - action(ValueOrKeyValue::Value(&key))?; - } - } + for key in &classifier.keys { + action(ValueOrKeyValue::Value(&key))?; + } } + } - for variant in &log.variants { - execute_with_attributes_kv_pairs(&variant.metadata, &mut action)?; + for variant in &log.variants { + execute_with_attributes_kv_pairs(&variant.metadata, &mut action)?; - for event in &variant.events { - action(ValueOrKeyValue::Value(&event.name))?; - if let Some(attributes) = event.attributes.as_ref() { - execute_with_attributes_kv_pairs(attributes, &mut action)?; - } - } + for event in &variant.events { + action(ValueOrKeyValue::Value(&event.name))?; + if let Some(attributes) = event.attributes.as_ref() { + execute_with_attributes_kv_pairs(attributes, &mut action)?; + } } + } - Ok(()) + Ok(()) } fn execute_with_attributes_kv_pairs<'a>( - attributes: &'a Vec<(Rc>, Rc>)>, - action: &mut impl FnMut(ValueOrKeyValue<'a>) -> Result<(), BxesWriteError>, + attributes: &'a Vec<(Rc>, Rc>)>, + action: &mut impl FnMut(ValueOrKeyValue<'a>) -> Result<(), BxesWriteError>, ) -> Result<(), BxesWriteError> { - for (key, value) in attributes { - action(ValueOrKeyValue::Value(&key))?; - action(ValueOrKeyValue::Value(&value))?; + for (key, value) in attributes { + action(ValueOrKeyValue::Value(&key))?; + action(ValueOrKeyValue::Value(&value))?; - action(ValueOrKeyValue::KeyValue((&key, &value)))?; - } + action(ValueOrKeyValue::KeyValue((&key, &value)))?; + } - Ok(()) + Ok(()) } pub fn try_write_version(writer: &mut BinaryWriter, version: u32) -> Result<(), BxesWriteError> { - try_write_u32_no_type_id(writer, version) + try_write_u32_no_type_id(writer, version) } -pub fn try_write_values( - log: &BxesEventLog, - context: Rc>, -) -> Result<(), BxesWriteError> { - write_collection_and_count_after(context.clone(), || { - execute_with_kv_pairs(log, |value| { - match value { - ValueOrKeyValue::Value(value) => { - try_write_value_if_not_present(value, &mut context.borrow_mut())?; - } - ValueOrKeyValue::KeyValue(_) => {} - } - - Ok(()) - })?; +pub fn try_write_values(log: &BxesEventLog, context: Rc>) -> Result<(), BxesWriteError> { + write_collection_and_count_after(context.clone(), || { + execute_with_kv_pairs(log, |value| { + match value { + ValueOrKeyValue::Value(value) => { + try_write_value_if_not_present(value, &mut context.borrow_mut())?; + } + ValueOrKeyValue::KeyValue(_) => {} + } - Ok(context.borrow().values_indices.borrow().len() as u32) - }) + Ok(()) + })?; + + Ok(context.borrow().values_indices.borrow().len() as u32) + }) } fn write_collection_and_count( - context: Rc>, - write_leb_128_count: bool, - count: u32, - mut writer_action: impl FnMut() -> Result<(), BxesWriteError>, -) -> Result<(), BxesWriteError> { - if write_leb_128_count { - try_write_leb_128(context.borrow_mut().writer.as_mut().unwrap(), count)? - } else { - try_write_u32_no_type_id(context.borrow_mut().writer.as_mut().unwrap(), count)?; - } + context: Rc>, + write_leb_128_count: bool, + count: u32, + mut writer_action: impl FnMut() -> Result<(), BxesWriteError>, +) -> Result<(), BxesWriteError> { + if write_leb_128_count { + try_write_leb_128(context.borrow_mut().writer.as_mut().unwrap(), count)? + } else { + try_write_u32_no_type_id(context.borrow_mut().writer.as_mut().unwrap(), count)?; + } - writer_action() + writer_action() } fn write_collection_and_count_after( - context: Rc>, - mut writer_action: impl FnMut() -> Result, + context: Rc>, + mut writer_action: impl FnMut() -> Result, ) -> Result<(), BxesWriteError> { - let pos = try_tell_pos(context.borrow_mut().writer.as_mut().unwrap())?; + let pos = try_tell_pos(context.borrow_mut().writer.as_mut().unwrap())?; - try_write_u32_no_type_id(context.borrow_mut().writer.as_mut().unwrap(), 0)?; + try_write_u32_no_type_id(context.borrow_mut().writer.as_mut().unwrap(), 0)?; - let count = writer_action()?; + let count = writer_action()?; - let current_pos = try_tell_pos(context.borrow_mut().writer.as_mut().unwrap())?; - try_seek(context.borrow_mut().writer.as_mut().unwrap(), pos)?; + let current_pos = try_tell_pos(context.borrow_mut().writer.as_mut().unwrap())?; + try_seek(context.borrow_mut().writer.as_mut().unwrap(), pos)?; - try_write_u32_no_type_id(context.borrow_mut().writer.as_mut().unwrap(), count)?; + try_write_u32_no_type_id(context.borrow_mut().writer.as_mut().unwrap(), count)?; - try_seek(context.borrow_mut().writer.as_mut().unwrap(), current_pos) + try_seek(context.borrow_mut().writer.as_mut().unwrap(), current_pos) } fn try_seek(writer: &mut BinaryWriter, pos: usize) -> Result<(), BxesWriteError> { - match writer.seek(pos) { - Ok(_) => Ok(()), - Err(err) => Err(BxesWriteError::FailedToSeek(err.to_string())), - } + match writer.seek(pos) { + Ok(_) => Ok(()), + Err(err) => Err(BxesWriteError::FailedToSeek(err.to_string())), + } } fn try_tell_pos(writer: &mut BinaryWriter) -> Result { - match writer.tell() { - Ok(pos) => Ok(pos), - Err(err) => Err(BxesWriteError::FailedToGetWriterPosition(err.to_string())), - } + match writer.tell() { + Ok(pos) => Ok(pos), + Err(err) => Err(BxesWriteError::FailedToGetWriterPosition(err.to_string())), + } } -pub fn try_write_value_if_not_present( - value: &Rc>, - context: &mut BxesWriteContext, -) -> Result { - if context.values_indices.borrow().contains_key(value) { - return Ok(false); - } +pub fn try_write_value_if_not_present(value: &Rc>, context: &mut BxesWriteContext) -> Result { + if context.values_indices.borrow().contains_key(value) { + return Ok(false); + } - try_write_value(context, value.as_ref().as_ref())?; + try_write_value(context, value.as_ref().as_ref())?; - let len = context.values_indices.borrow().len(); - context - .values_indices - .borrow_mut() - .insert(value.clone(), len); + let len = context.values_indices.borrow().len(); + context.values_indices.borrow_mut().insert(value.clone(), len); - Ok(true) + Ok(true) } -fn try_write_value( - context: &mut BxesWriteContext, - value: &BxesValue, -) -> Result<(), BxesWriteError> { - match value { - BxesValue::Null => try_write_u8_no_type_id(context.writer.as_mut().unwrap(), 0), - BxesValue::Int32(value) => try_write_i32(context.writer.as_mut().unwrap(), *value), - BxesValue::Int64(value) => try_write_i64(context.writer.as_mut().unwrap(), *value), - BxesValue::Uint32(value) => try_write_u32(context.writer.as_mut().unwrap(), *value), - BxesValue::Uint64(value) => try_write_u64(context.writer.as_mut().unwrap(), *value), - BxesValue::Float32(value) => try_write_f32(context.writer.as_mut().unwrap(), *value), - BxesValue::Float64(value) => try_write_f64(context.writer.as_mut().unwrap(), *value), - BxesValue::String(value) => { - try_write_string(context.writer.as_mut().unwrap(), value.as_str()) - } - BxesValue::Bool(value) => try_write_bool(context.writer.as_mut().unwrap(), *value), - BxesValue::Timestamp(value) => { - try_write_timestamp(context.writer.as_mut().unwrap(), *value) - } - BxesValue::BrafLifecycle(value) => { - try_write_braf_lifecycle(context.writer.as_mut().unwrap(), value) - } - BxesValue::StandardLifecycle(value) => { - try_write_standard_lifecycle(context.writer.as_mut().unwrap(), value) - } - BxesValue::Artifact(artifacts) => try_write_artifact(context, artifacts), - BxesValue::Drivers(drivers) => try_write_drivers(context, drivers), - BxesValue::Guid(guid) => try_write_guid(context.writer.as_mut().unwrap(), guid), - BxesValue::SoftwareEventType(value) => { - try_write_software_event_type(context.writer.as_mut().unwrap(), value) - } - } +fn try_write_value(context: &mut BxesWriteContext, value: &BxesValue) -> Result<(), BxesWriteError> { + match value { + BxesValue::Null => try_write_u8_no_type_id(context.writer.as_mut().unwrap(), 0), + BxesValue::Int32(value) => try_write_i32(context.writer.as_mut().unwrap(), *value), + BxesValue::Int64(value) => try_write_i64(context.writer.as_mut().unwrap(), *value), + BxesValue::Uint32(value) => try_write_u32(context.writer.as_mut().unwrap(), *value), + BxesValue::Uint64(value) => try_write_u64(context.writer.as_mut().unwrap(), *value), + BxesValue::Float32(value) => try_write_f32(context.writer.as_mut().unwrap(), *value), + BxesValue::Float64(value) => try_write_f64(context.writer.as_mut().unwrap(), *value), + BxesValue::String(value) => try_write_string(context.writer.as_mut().unwrap(), value.as_str()), + BxesValue::Bool(value) => try_write_bool(context.writer.as_mut().unwrap(), *value), + BxesValue::Timestamp(value) => try_write_timestamp(context.writer.as_mut().unwrap(), *value), + BxesValue::BrafLifecycle(value) => try_write_braf_lifecycle(context.writer.as_mut().unwrap(), value), + BxesValue::StandardLifecycle(value) => try_write_standard_lifecycle(context.writer.as_mut().unwrap(), value), + BxesValue::Artifact(artifacts) => try_write_artifact(context, artifacts), + BxesValue::Drivers(drivers) => try_write_drivers(context, drivers), + BxesValue::Guid(guid) => try_write_guid(context.writer.as_mut().unwrap(), guid), + BxesValue::SoftwareEventType(value) => try_write_software_event_type(context.writer.as_mut().unwrap(), value), + } } -pub fn try_write_software_event_type( - writer: &mut BinaryWriter, - value: &SoftwareEventType, -) -> Result<(), BxesWriteError> { - try_write_enum_value(writer, &TypeIds::SoftwareEventType, value) +pub fn try_write_software_event_type(writer: &mut BinaryWriter, value: &SoftwareEventType) -> Result<(), BxesWriteError> { + try_write_enum_value(writer, &TypeIds::SoftwareEventType, value) } pub fn try_write_guid(writer: &mut BinaryWriter, guid: &uuid::Uuid) -> Result<(), BxesWriteError> { - try_write(|| { - writer.write_u8(get_type_id_byte(TypeIds::Guid))?; - writer.write_bytes(guid.to_bytes_le()) - }) + try_write(|| { + writer.write_u8(get_type_id_byte(TypeIds::Guid))?; + writer.write_bytes(guid.to_bytes_le()) + }) } fn get_type_id_byte(type_id: TypeIds) -> u8 { - TypeIds::to_u8(&type_id).unwrap() + TypeIds::to_u8(&type_id).unwrap() } -pub fn try_write_artifact( - context: &mut BxesWriteContext, - artifact: &BxesArtifact, -) -> Result<(), BxesWriteError> { - for artifact in &artifact.items { - get_or_write_value_index(&artifact.model, context)?; - get_or_write_value_index(&artifact.instance, context)?; - get_or_write_value_index(&artifact.transition, context)?; - } +pub fn try_write_artifact(context: &mut BxesWriteContext, artifact: &BxesArtifact) -> Result<(), BxesWriteError> { + for artifact in &artifact.items { + get_or_write_value_index(&artifact.model, context)?; + get_or_write_value_index(&artifact.instance, context)?; + get_or_write_value_index(&artifact.transition, context)?; + } - try_write_u8_no_type_id( - context.writer.as_mut().unwrap(), - get_type_id_byte(TypeIds::Artifact), - )?; + try_write_u8_no_type_id(context.writer.as_mut().unwrap(), get_type_id_byte(TypeIds::Artifact))?; - try_write_u32_no_type_id( - context.writer.as_mut().unwrap(), - artifact.items.len() as u32, - )?; + try_write_u32_no_type_id(context.writer.as_mut().unwrap(), artifact.items.len() as u32)?; - for artifact in &artifact.items { - let index = get_index(&artifact.model, context)?; - try_write_u32_no_type_id(context.writer.as_mut().unwrap(), index as u32)?; + for artifact in &artifact.items { + let index = get_index(&artifact.model, context)?; + try_write_u32_no_type_id(context.writer.as_mut().unwrap(), index as u32)?; - let index = get_index(&artifact.instance, context)?; - try_write_u32_no_type_id(context.writer.as_mut().unwrap(), index as u32)?; + let index = get_index(&artifact.instance, context)?; + try_write_u32_no_type_id(context.writer.as_mut().unwrap(), index as u32)?; - let index = get_index(&artifact.transition, context)?; - try_write_u32_no_type_id(context.writer.as_mut().unwrap(), index as u32)?; - } + let index = get_index(&artifact.transition, context)?; + try_write_u32_no_type_id(context.writer.as_mut().unwrap(), index as u32)?; + } - Ok(()) + Ok(()) } -fn get_index( - value: &Rc>, - context: &mut BxesWriteContext, -) -> Result { - if let Some(index) = context.values_indices.borrow().get(value) { - return Ok(*index as u32); - } +fn get_index(value: &Rc>, context: &mut BxesWriteContext) -> Result { + if let Some(index) = context.values_indices.borrow().get(value) { + return Ok(*index as u32); + } - Err(BxesWriteError::FailedToFindValueIndex(value.clone())) + Err(BxesWriteError::FailedToFindValueIndex(value.clone())) } -fn get_or_write_value_index( - value: &Rc>, - context: &mut BxesWriteContext, -) -> Result { - try_write_value_if_not_present(value, context)?; - let index = *context.values_indices.borrow().get(value).unwrap() as u32; +fn get_or_write_value_index(value: &Rc>, context: &mut BxesWriteContext) -> Result { + try_write_value_if_not_present(value, context)?; + let index = *context.values_indices.borrow().get(value).unwrap() as u32; - return Ok(index); + return Ok(index); } -pub fn try_write_drivers( - context: &mut BxesWriteContext, - drivers: &BxesDrivers, -) -> Result<(), BxesWriteError> { - for driver in &drivers.drivers { - get_or_write_value_index(&driver.name, context)?; - get_or_write_value_index(&driver.driver_type, context)?; - } +pub fn try_write_drivers(context: &mut BxesWriteContext, drivers: &BxesDrivers) -> Result<(), BxesWriteError> { + for driver in &drivers.drivers { + get_or_write_value_index(&driver.name, context)?; + get_or_write_value_index(&driver.driver_type, context)?; + } - try_write_u8_no_type_id( - context.writer.as_mut().unwrap(), - get_type_id_byte(TypeIds::Drivers), - )?; + try_write_u8_no_type_id(context.writer.as_mut().unwrap(), get_type_id_byte(TypeIds::Drivers))?; - try_write_u32_no_type_id( - context.writer.as_mut().unwrap(), - drivers.drivers.len() as u32, - )?; + try_write_u32_no_type_id(context.writer.as_mut().unwrap(), drivers.drivers.len() as u32)?; - for driver in &drivers.drivers { - try_write_f64_no_type_id(context.writer.as_mut().unwrap(), driver.amount())?; + for driver in &drivers.drivers { + try_write_f64_no_type_id(context.writer.as_mut().unwrap(), driver.amount())?; - let index = get_index(&driver.name, context)?; - try_write_u32_no_type_id(context.writer.as_mut().unwrap(), index)?; + let index = get_index(&driver.name, context)?; + try_write_u32_no_type_id(context.writer.as_mut().unwrap(), index)?; - let index = get_index(&driver.driver_type, context)?; - try_write_u32_no_type_id(context.writer.as_mut().unwrap(), index)?; - } + let index = get_index(&driver.driver_type, context)?; + try_write_u32_no_type_id(context.writer.as_mut().unwrap(), index)?; + } - Ok(()) + Ok(()) } pub fn try_write_i32(writer: &mut BinaryWriter, value: i32) -> Result<(), BxesWriteError> { - try_write(|| { - writer.write_u8(get_type_id_byte(TypeIds::I32))?; - writer.write_i32(value) - }) + try_write(|| { + writer.write_u8(get_type_id_byte(TypeIds::I32))?; + writer.write_i32(value) + }) } -pub fn try_write_i64_no_type_id( - writer: &mut BinaryWriter, - value: i64, -) -> Result<(), BxesWriteError> { - try_write(|| writer.write_i64(value)) +pub fn try_write_i64_no_type_id(writer: &mut BinaryWriter, value: i64) -> Result<(), BxesWriteError> { + try_write(|| writer.write_i64(value)) } pub fn try_write_i64(writer: &mut BinaryWriter, value: i64) -> Result<(), BxesWriteError> { - try_write(|| { - writer.write_u8(get_type_id_byte(TypeIds::I64))?; - writer.write_i64(value) - }) + try_write(|| { + writer.write_u8(get_type_id_byte(TypeIds::I64))?; + writer.write_i64(value) + }) } -pub fn try_write_u32_no_type_id( - writer: &mut BinaryWriter, - value: u32, -) -> Result<(), BxesWriteError> { - try_write(|| writer.write_u32(value)) +pub fn try_write_u32_no_type_id(writer: &mut BinaryWriter, value: u32) -> Result<(), BxesWriteError> { + try_write(|| writer.write_u32(value)) } pub fn try_write_u32(writer: &mut BinaryWriter, value: u32) -> Result<(), BxesWriteError> { - try_write(|| { - writer.write_u8(get_type_id_byte(TypeIds::U32))?; - writer.write_u32(value) - }) + try_write(|| { + writer.write_u8(get_type_id_byte(TypeIds::U32))?; + writer.write_u32(value) + }) } pub fn try_write_u64(writer: &mut BinaryWriter, value: u64) -> Result<(), BxesWriteError> { - try_write(|| { - writer.write_u8(get_type_id_byte(TypeIds::U64))?; - writer.write_u64(value) - }) + try_write(|| { + writer.write_u8(get_type_id_byte(TypeIds::U64))?; + writer.write_u64(value) + }) } pub fn try_write_f32(writer: &mut BinaryWriter, value: f32) -> Result<(), BxesWriteError> { - try_write(|| { - writer.write_u8(get_type_id_byte(TypeIds::F32))?; - writer.write_f32(value) - }) + try_write(|| { + writer.write_u8(get_type_id_byte(TypeIds::F32))?; + writer.write_f32(value) + }) } pub fn try_write_u8_no_type_id(writer: &mut BinaryWriter, value: u8) -> Result<(), BxesWriteError> { - try_write(|| writer.write_u8(value)) + try_write(|| writer.write_u8(value)) } pub fn try_write_f64(writer: &mut BinaryWriter, value: f64) -> Result<(), BxesWriteError> { - try_write(|| { - writer.write_u8(get_type_id_byte(TypeIds::F64))?; - writer.write_f64(value) - }) + try_write(|| { + writer.write_u8(get_type_id_byte(TypeIds::F64))?; + writer.write_f64(value) + }) } -pub fn try_write_f64_no_type_id( - writer: &mut BinaryWriter, - value: f64, -) -> Result<(), BxesWriteError> { - try_write(|| writer.write_f64(value)) +pub fn try_write_f64_no_type_id(writer: &mut BinaryWriter, value: f64) -> Result<(), BxesWriteError> { + try_write(|| writer.write_f64(value)) } pub fn try_write_bool(writer: &mut BinaryWriter, value: bool) -> Result<(), BxesWriteError> { - try_write(|| { - writer.write_u8(get_type_id_byte(TypeIds::Bool))?; - writer.write_u8(if value { 1 } else { 0 }) - }) + try_write(|| { + writer.write_u8(get_type_id_byte(TypeIds::Bool))?; + writer.write_u8(if value { 1 } else { 0 }) + }) } pub fn try_write_string(writer: &mut BinaryWriter, value: &str) -> Result<(), BxesWriteError> { - try_write(|| { - writer.write_u8(get_type_id_byte(TypeIds::String))?; - writer.write_u64(value.len() as u64)?; - writer.write_bytes(value.as_bytes()) - }) + try_write(|| { + writer.write_u8(get_type_id_byte(TypeIds::String))?; + writer.write_u64(value.len() as u64)?; + writer.write_bytes(value.as_bytes()) + }) } -pub fn try_write_lifecycle( - writer: &mut BinaryWriter, - lifecycle: &Lifecycle, -) -> Result<(), BxesWriteError> { - match lifecycle { - Lifecycle::Braf(braf_lifecycle) => try_write_braf_lifecycle(writer, braf_lifecycle), - Lifecycle::Standard(standard_lifecycle) => { - try_write_standard_lifecycle(writer, standard_lifecycle) - } - } +pub fn try_write_lifecycle(writer: &mut BinaryWriter, lifecycle: &Lifecycle) -> Result<(), BxesWriteError> { + match lifecycle { + Lifecycle::Braf(braf_lifecycle) => try_write_braf_lifecycle(writer, braf_lifecycle), + Lifecycle::Standard(standard_lifecycle) => try_write_standard_lifecycle(writer, standard_lifecycle), + } } -pub fn try_write_braf_lifecycle( - writer: &mut BinaryWriter, - value: &BrafLifecycle, -) -> Result<(), BxesWriteError> { - try_write_enum_value(writer, &TypeIds::BrafLifecycle, value) +pub fn try_write_braf_lifecycle(writer: &mut BinaryWriter, value: &BrafLifecycle) -> Result<(), BxesWriteError> { + try_write_enum_value(writer, &TypeIds::BrafLifecycle, value) } -fn try_write_enum_value_no_type_index( - writer: &mut BinaryWriter, - value: &T, -) -> Result<(), BxesWriteError> { - try_write(|| writer.write_u8(T::to_u8(value).unwrap())) +fn try_write_enum_value_no_type_index(writer: &mut BinaryWriter, value: &T) -> Result<(), BxesWriteError> { + try_write(|| writer.write_u8(T::to_u8(value).unwrap())) } -fn try_write_enum_value( - writer: &mut BinaryWriter, - type_id: &TypeIds, - value: &T, -) -> Result<(), BxesWriteError> { - try_write(|| { - writer.write_u8(TypeIds::to_u8(type_id).unwrap())?; - writer.write_u8(T::to_u8(value).unwrap()) - }) +fn try_write_enum_value(writer: &mut BinaryWriter, type_id: &TypeIds, value: &T) -> Result<(), BxesWriteError> { + try_write(|| { + writer.write_u8(TypeIds::to_u8(type_id).unwrap())?; + writer.write_u8(T::to_u8(value).unwrap()) + }) } -pub fn try_write_standard_lifecycle( - writer: &mut BinaryWriter, - value: &StandardLifecycle, -) -> Result<(), BxesWriteError> { - try_write_enum_value(writer, &TypeIds::StandardLifecycle, value) +pub fn try_write_standard_lifecycle(writer: &mut BinaryWriter, value: &StandardLifecycle) -> Result<(), BxesWriteError> { + try_write_enum_value(writer, &TypeIds::StandardLifecycle, value) } pub fn try_write_timestamp(writer: &mut BinaryWriter, value: i64) -> Result<(), BxesWriteError> { - try_write(|| { - writer.write_u8(get_type_id_byte(TypeIds::Timestamp))?; - writer.write_i64(value) - }) + try_write(|| { + writer.write_u8(get_type_id_byte(TypeIds::Timestamp))?; + writer.write_i64(value) + }) } -fn try_write( - mut write_func: impl FnMut() -> crate::binary_rw::core::Result, -) -> Result<(), BxesWriteError> { - match write_func() { - Ok(_) => Ok(()), - Err(error) => Err(BxesWriteError::WriteError(error)), - } +fn try_write(mut write_func: impl FnMut() -> crate::binary_rw::core::Result) -> Result<(), BxesWriteError> { + match write_func() { + Ok(_) => Ok(()), + Err(error) => Err(BxesWriteError::WriteError(error)), + } } pub fn try_open_write(path: &str) -> Result { - match FileStream::create(path) { - Ok(stream) => Ok(stream), - Err(err) => Err(BxesWriteError::FailedToOpenFileForWriting(err.to_string())), - } + match FileStream::create(path) { + Ok(stream) => Ok(stream), + Err(err) => Err(BxesWriteError::FailedToOpenFileForWriting(err.to_string())), + } } pub fn compress_to_archive(log_path: &str, save_path: &str) -> Result<(), BxesWriteError> { - let file = File::create(save_path).or_else(|_| Err(BxesWriteError::FailedToCreateArchive))?; - let mut zip_writer = ZipWriter::new(file); + let file = File::create(save_path).or_else(|_| Err(BxesWriteError::FailedToCreateArchive))?; + let mut zip_writer = ZipWriter::new(file); - let archive_log_name = Path::new(save_path).file_name().unwrap().to_str().unwrap(); - let options = FileOptions::default() - .compression_method(zip::CompressionMethod::Deflated) - .compression_level(Some(8)); + let archive_log_name = Path::new(save_path).file_name().unwrap().to_str().unwrap(); + let options = FileOptions::default() + .compression_method(zip::CompressionMethod::Deflated) + .compression_level(Some(8)); - zip_writer - .start_file(archive_log_name, options) - .or_else(|_| Err(BxesWriteError::FailedToCreateArchive))?; + zip_writer + .start_file(archive_log_name, options) + .or_else(|_| Err(BxesWriteError::FailedToCreateArchive))?; - let bytes = fs::read(log_path).unwrap(); - zip_writer - .write_all(&bytes) - .or_else(|_| Err(BxesWriteError::FailedToCreateArchive))?; + let bytes = fs::read(log_path).unwrap(); + zip_writer + .write_all(&bytes) + .or_else(|_| Err(BxesWriteError::FailedToCreateArchive))?; - zip_writer - .flush() - .or_else(|_| Err(BxesWriteError::FailedToCreateArchive))?; + zip_writer.flush().or_else(|_| Err(BxesWriteError::FailedToCreateArchive))?; - zip_writer - .finish() - .or_else(|_| Err(BxesWriteError::FailedToCreateArchive))?; + zip_writer.finish().or_else(|_| Err(BxesWriteError::FailedToCreateArchive))?; - Ok(()) + Ok(()) } diff --git a/bxes/src/rust/bxes/tests/multiple_files_tests/test_multiple_file_reader.rs b/bxes/src/rust/bxes/tests/multiple_files_tests/test_multiple_file_reader.rs index 38e643a1b..07369d95b 100644 --- a/bxes/src/rust/bxes/tests/multiple_files_tests/test_multiple_file_reader.rs +++ b/bxes/src/rust/bxes/tests/multiple_files_tests/test_multiple_file_reader.rs @@ -1,20 +1,17 @@ -use bxes::{ - read::multiple_files_bxes_reader::read_bxes_multiple_files, - writer::multiple_file_bxes_writer::write_bxes_multiple_files, -}; +use bxes::{read::multiple_files_bxes_reader::read_bxes_multiple_files, writer::multiple_file_bxes_writer::write_bxes_multiple_files}; use tempfile::TempDir; use crate::test_core::random_log::generate_random_bxes_write_data; #[test] pub fn test_multiple_file_reader() { - let temp_dir = TempDir::new().unwrap(); - let temp_dir_path = temp_dir.path().to_str().unwrap(); - let write_data = generate_random_bxes_write_data(); - write_bxes_multiple_files(&write_data, temp_dir_path).ok(); + let temp_dir = TempDir::new().unwrap(); + let temp_dir_path = temp_dir.path().to_str().unwrap(); + let write_data = generate_random_bxes_write_data(); + write_bxes_multiple_files(&write_data, temp_dir_path).ok(); - let read_result = read_bxes_multiple_files(temp_dir_path).ok().unwrap(); + let read_result = read_bxes_multiple_files(temp_dir_path).ok().unwrap(); - assert!(write_data.log.eq(&read_result.log)); - assert!(write_data.system_metadata.eq(&read_result.system_metadata)); + assert!(write_data.log.eq(&read_result.log)); + assert!(write_data.system_metadata.eq(&read_result.system_metadata)); } diff --git a/bxes/src/rust/bxes/tests/single_file_tests/test_single_file_reader.rs b/bxes/src/rust/bxes/tests/single_file_tests/test_single_file_reader.rs index 55afb1546..61e24117b 100644 --- a/bxes/src/rust/bxes/tests/single_file_tests/test_single_file_reader.rs +++ b/bxes/src/rust/bxes/tests/single_file_tests/test_single_file_reader.rs @@ -6,17 +6,15 @@ use crate::test_core::random_log::generate_random_bxes_write_data; #[test] pub fn test_single_file_read_write() { - let temp_dir = TempDir::new().unwrap(); - let log_file_name = "log.bxes"; - let temp_dir = temp_dir.path().as_os_str().to_str().unwrap(); - let log_save_path = Path::new(temp_dir).join(log_file_name); + let temp_dir = TempDir::new().unwrap(); + let log_file_name = "log.bxes"; + let temp_dir = temp_dir.path().as_os_str().to_str().unwrap(); + let log_save_path = Path::new(temp_dir).join(log_file_name); - let data = generate_random_bxes_write_data(); - write_bxes(log_save_path.to_str().unwrap(), &data) - .ok() - .unwrap(); + let data = generate_random_bxes_write_data(); + write_bxes(log_save_path.to_str().unwrap(), &data).ok().unwrap(); - let read_result = read_bxes(log_save_path.to_str().unwrap()).unwrap(); - assert!(read_result.log.eq(&data.log)); - assert!(read_result.system_metadata.eq(&data.system_metadata)); + let read_result = read_bxes(log_save_path.to_str().unwrap()).unwrap(); + assert!(read_result.log.eq(&data.log)); + assert!(read_result.system_metadata.eq(&data.system_metadata)); } diff --git a/bxes/src/rust/bxes/tests/test_core/random_log.rs b/bxes/src/rust/bxes/tests/test_core/random_log.rs index b14bc68e0..1a4483625 100644 --- a/bxes/src/rust/bxes/tests/test_core/random_log.rs +++ b/bxes/src/rust/bxes/tests/test_core/random_log.rs @@ -1,328 +1,289 @@ -use std::collections::HashMap; -use std::rc::Rc; +use std::{collections::HashMap, rc::Rc}; use bxes::read::read_utils::string_or_err; use num_traits::FromPrimitive; use rand::{distributions::Alphanumeric, rngs::ThreadRng, Rng}; use uuid::Uuid; -use bxes::models::domain::bxes_artifact::{BxesArtifact, BxesArtifactItem}; -use bxes::models::domain::bxes_driver::{BxesDriver, BxesDrivers}; -use bxes::models::domain::bxes_event_log::{BxesEvent, BxesEventLog, BxesTraceVariant}; -use bxes::models::domain::bxes_lifecycle::{BrafLifecycle, Lifecycle, StandardLifecycle}; -use bxes::models::domain::bxes_log_metadata::{ - BxesClassifier, BxesEventLogMetadata, BxesExtension, BxesGlobal, BxesGlobalKind, +use bxes::{ + models::{ + domain::{ + bxes_artifact::{BxesArtifact, BxesArtifactItem}, + bxes_driver::{BxesDriver, BxesDrivers}, + bxes_event_log::{BxesEvent, BxesEventLog, BxesTraceVariant}, + bxes_lifecycle::{BrafLifecycle, Lifecycle, StandardLifecycle}, + bxes_log_metadata::{BxesClassifier, BxesEventLogMetadata, BxesExtension, BxesGlobal, BxesGlobalKind}, + bxes_value::BxesValue, + software_event_type::SoftwareEventType, + type_ids::{get_type_id, TypeIds}, + }, + system_models::{SystemMetadata, ValueAttributeDescriptor}, + }, + writer::writer_utils::BxesLogWriteData, }; -use bxes::models::domain::bxes_value::BxesValue; -use bxes::models::domain::software_event_type::SoftwareEventType; -use bxes::models::domain::type_ids::{get_type_id, TypeIds}; -use bxes::models::system_models::{SystemMetadata, ValueAttributeDescriptor}; -use bxes::writer::writer_utils::BxesLogWriteData; pub fn generate_random_bxes_write_data() -> BxesLogWriteData { - let mut rng = rand::thread_rng(); - let log = generate_random_log(&mut rng); - let system_metadata = generate_random_system_metadata(&mut rng, &log); + let mut rng = rand::thread_rng(); + let log = generate_random_log(&mut rng); + let system_metadata = generate_random_system_metadata(&mut rng, &log); - BxesLogWriteData { - log, - system_metadata, - } + BxesLogWriteData { log, system_metadata } } pub fn generate_random_system_metadata(rng: &mut ThreadRng, log: &BxesEventLog) -> SystemMetadata { - let mut descriptors = HashMap::new(); - let count = rng.gen_range(50..100); - - let mut index = 0; - loop { - if index == count { - break; - } - - let random_variant = log - .variants - .get(rng.gen_range(0..log.variants.len())) - .unwrap(); - - let random_event = random_variant - .events - .get(rng.gen_range(0..random_variant.events.len())) - .unwrap(); - - if let Some(attrs) = random_event.attributes.as_ref() { - if attrs.len() == 0 { - continue; - } - - let random_attr = attrs.get(rng.gen_range(0..attrs.len())).unwrap(); - let key = string_or_err(&random_attr.0).ok().unwrap(); - if descriptors.contains_key(&key) { - continue; - } - - descriptors.insert(key, get_type_id(random_attr.1.as_ref().as_ref())); - index += 1; - } + let mut descriptors = HashMap::new(); + let count = rng.gen_range(50..100); + + let mut index = 0; + loop { + if index == count { + break; } - SystemMetadata { - values_attrs: Some( - descriptors - .iter() - .map(|pair| ValueAttributeDescriptor { - name: pair.0.as_ref().as_ref().to_owned(), - type_id: pair.1.clone(), - }) - .collect(), - ), + let random_variant = log.variants.get(rng.gen_range(0..log.variants.len())).unwrap(); + + let random_event = random_variant.events.get(rng.gen_range(0..random_variant.events.len())).unwrap(); + + if let Some(attrs) = random_event.attributes.as_ref() { + if attrs.len() == 0 { + continue; + } + + let random_attr = attrs.get(rng.gen_range(0..attrs.len())).unwrap(); + let key = string_or_err(&random_attr.0).ok().unwrap(); + if descriptors.contains_key(&key) { + continue; + } + + descriptors.insert(key, get_type_id(random_attr.1.as_ref().as_ref())); + index += 1; } + } + + SystemMetadata { + values_attrs: Some( + descriptors + .iter() + .map(|pair| ValueAttributeDescriptor { + name: pair.0.as_ref().as_ref().to_owned(), + type_id: pair.1.clone(), + }) + .collect(), + ), + } } -fn generate_random_value_attributes_descriptor( - rng: &mut ThreadRng, -) -> Vec { - generate_random_list(rng, |rng| generate_random_value_attribute_descriptor(rng)) +fn generate_random_value_attributes_descriptor(rng: &mut ThreadRng) -> Vec { + generate_random_list(rng, |rng| generate_random_value_attribute_descriptor(rng)) } fn generate_random_value_attribute_descriptor(rng: &mut ThreadRng) -> ValueAttributeDescriptor { - ValueAttributeDescriptor { - type_id: generate_random_type_id(rng), - name: generate_random_string(rng), - } + ValueAttributeDescriptor { + type_id: generate_random_type_id(rng), + name: generate_random_string(rng), + } } pub fn generate_random_log(rng: &mut ThreadRng) -> BxesEventLog { - BxesEventLog { - version: rng.gen(), - metadata: generate_random_metadata(rng), - variants: generate_random_variants(rng), - } + BxesEventLog { + version: rng.gen(), + metadata: generate_random_metadata(rng), + variants: generate_random_variants(rng), + } } fn generate_random_metadata(rng: &mut ThreadRng) -> BxesEventLogMetadata { - BxesEventLogMetadata { - extensions: Some(generate_random_extensions(rng)), - classifiers: Some(generate_random_classifiers(rng)), - properties: generate_random_attributes_option(rng), - globals: Some(generate_random_globals(rng)), - } + BxesEventLogMetadata { + extensions: Some(generate_random_extensions(rng)), + classifiers: Some(generate_random_classifiers(rng)), + properties: generate_random_attributes_option(rng), + globals: Some(generate_random_globals(rng)), + } } fn generate_random_globals(rng: &mut ThreadRng) -> Vec { - generate_random_list(rng, |rng| BxesGlobal { - entity_kind: generate_random_enum::(BxesGlobalKind::VARIANT_COUNT), - globals: generate_random_attributes(rng), - }) + generate_random_list(rng, |rng| BxesGlobal { + entity_kind: generate_random_enum::(BxesGlobalKind::VARIANT_COUNT), + globals: generate_random_attributes(rng), + }) } fn generate_random_extensions(rng: &mut ThreadRng) -> Vec { - generate_random_list(rng, |rng| BxesExtension { - name: generate_random_string_bxes_value(rng), - prefix: generate_random_string_bxes_value(rng), - uri: generate_random_string_bxes_value(rng), - }) + generate_random_list(rng, |rng| BxesExtension { + name: generate_random_string_bxes_value(rng), + prefix: generate_random_string_bxes_value(rng), + uri: generate_random_string_bxes_value(rng), + }) } fn generate_random_classifiers(rng: &mut ThreadRng) -> Vec { - generate_random_list(rng, |rng| BxesClassifier { - name: generate_random_string_bxes_value(rng), - keys: vec![], - }) + generate_random_list(rng, |rng| BxesClassifier { + name: generate_random_string_bxes_value(rng), + keys: vec![], + }) } fn generate_random_values(rng: &mut ThreadRng) -> Vec>> { - generate_random_list(rng, |rng| generate_random_bxes_value(rng)) + generate_random_list(rng, |rng| generate_random_bxes_value(rng)) } -fn generate_random_list( - rng: &mut ThreadRng, - item_generator: impl Fn(&mut ThreadRng) -> T, -) -> Vec { - let count = rng.gen_range(100..500); - let mut vec = vec![]; +fn generate_random_list(rng: &mut ThreadRng, item_generator: impl Fn(&mut ThreadRng) -> T) -> Vec { + let count = rng.gen_range(100..500); + let mut vec = vec![]; - for _ in 0..count { - vec.push(item_generator(rng)); - } + for _ in 0..count { + vec.push(item_generator(rng)); + } - vec + vec } fn generate_random_variants(rng: &mut ThreadRng) -> Vec { - let variants_count = rng.gen_range(1..5); - let mut variants = vec![]; + let variants_count = rng.gen_range(1..5); + let mut variants = vec![]; - for _ in 0..variants_count { - variants.push(generate_random_variant(rng)); - } + for _ in 0..variants_count { + variants.push(generate_random_variant(rng)); + } - variants + variants } fn generate_random_variant(rng: &mut ThreadRng) -> BxesTraceVariant { - let traces_count = rng.gen::(); - - let mut metadata = vec![]; - let metadata_count = rng.gen_range(1..20); - for _ in 0..metadata_count { - metadata.push(generate_random_attribute(rng)); - } - - let mut events = vec![]; - - let events_count = rng.gen_range(50..100); - for _ in 0..events_count { - events.push(generate_random_event(rng)); - } - - BxesTraceVariant { - traces_count, - metadata, - events, - } + let traces_count = rng.gen::(); + + let mut metadata = vec![]; + let metadata_count = rng.gen_range(1..20); + for _ in 0..metadata_count { + metadata.push(generate_random_attribute(rng)); + } + + let mut events = vec![]; + + let events_count = rng.gen_range(50..100); + for _ in 0..events_count { + events.push(generate_random_event(rng)); + } + + BxesTraceVariant { + traces_count, + metadata, + events, + } } fn generate_random_event(rng: &mut ThreadRng) -> BxesEvent { - BxesEvent { - name: generate_random_string_bxes_value(rng), - timestamp: rng.gen(), - attributes: generate_random_attributes_option(rng), - } + BxesEvent { + name: generate_random_string_bxes_value(rng), + timestamp: rng.gen(), + attributes: generate_random_attributes_option(rng), + } } -fn generate_random_attributes( - rng: &mut ThreadRng, -) -> Vec<(Rc>, Rc>)> { - generate_random_list(rng, |rng| generate_random_attribute(rng)) +fn generate_random_attributes(rng: &mut ThreadRng) -> Vec<(Rc>, Rc>)> { + generate_random_list(rng, |rng| generate_random_attribute(rng)) } -fn generate_random_attributes_option( - rng: &mut ThreadRng, -) -> Option>, Rc>)>> { - if rng.gen_bool(0.8) { - Some(generate_random_attributes(rng)) - } else { - None - } +fn generate_random_attributes_option(rng: &mut ThreadRng) -> Option>, Rc>)>> { + if rng.gen_bool(0.8) { + Some(generate_random_attributes(rng)) + } else { + None + } } fn generate_random_attribute(rng: &mut ThreadRng) -> (Rc>, Rc>) { - ( - generate_random_string_bxes_value(rng), - generate_random_bxes_value(rng), - ) + (generate_random_string_bxes_value(rng), generate_random_bxes_value(rng)) } fn generate_random_string_bxes_value(rng: &mut ThreadRng) -> Rc> { - Rc::new(Box::new(BxesValue::String(Rc::new(Box::new( - generate_random_string(rng), - ))))) + Rc::new(Box::new(BxesValue::String(Rc::new(Box::new(generate_random_string(rng)))))) } fn generate_random_string(rng: &mut ThreadRng) -> String { - let length = rng.gen_range(50..100); - rng.sample_iter(&Alphanumeric) - .take(length) - .map(char::from) - .collect() + let length = rng.gen_range(50..100); + rng.sample_iter(&Alphanumeric).take(length).map(char::from).collect() } fn generate_random_bxes_value(rng: &mut ThreadRng) -> Rc> { - Rc::new(Box::new(match generate_random_type_id(rng) { - TypeIds::Null => BxesValue::Int32(rng.gen()), - TypeIds::I32 => BxesValue::Int32(rng.gen()), - TypeIds::I64 => BxesValue::Int64(rng.gen()), - TypeIds::U32 => BxesValue::Uint32(rng.gen()), - TypeIds::U64 => BxesValue::Uint64(rng.gen()), - TypeIds::F32 => BxesValue::Float32(rng.gen()), - TypeIds::F64 => BxesValue::Float64(rng.gen()), - TypeIds::Bool => BxesValue::Bool(rng.gen()), - TypeIds::String => BxesValue::String(Rc::new(Box::new(generate_random_string(rng)))), - TypeIds::Timestamp => BxesValue::Timestamp(rng.gen()), - TypeIds::BrafLifecycle => BxesValue::BrafLifecycle(generate_random_braf_lifecycle()), - TypeIds::StandardLifecycle => { - BxesValue::StandardLifecycle(generate_random_standard_lifecycle()) - } - TypeIds::Guid => BxesValue::Guid(Uuid::new_v4()), - TypeIds::SoftwareEventType => { - BxesValue::SoftwareEventType(generate_random_enum::( - SoftwareEventType::VARIANT_COUNT, - )) - } - TypeIds::Artifact => generate_random_artifact(rng), - TypeIds::Drivers => generate_random_drivers(rng), - _ => panic!("Got unknown type id"), - })) + Rc::new(Box::new(match generate_random_type_id(rng) { + TypeIds::Null => BxesValue::Int32(rng.gen()), + TypeIds::I32 => BxesValue::Int32(rng.gen()), + TypeIds::I64 => BxesValue::Int64(rng.gen()), + TypeIds::U32 => BxesValue::Uint32(rng.gen()), + TypeIds::U64 => BxesValue::Uint64(rng.gen()), + TypeIds::F32 => BxesValue::Float32(rng.gen()), + TypeIds::F64 => BxesValue::Float64(rng.gen()), + TypeIds::Bool => BxesValue::Bool(rng.gen()), + TypeIds::String => BxesValue::String(Rc::new(Box::new(generate_random_string(rng)))), + TypeIds::Timestamp => BxesValue::Timestamp(rng.gen()), + TypeIds::BrafLifecycle => BxesValue::BrafLifecycle(generate_random_braf_lifecycle()), + TypeIds::StandardLifecycle => BxesValue::StandardLifecycle(generate_random_standard_lifecycle()), + TypeIds::Guid => BxesValue::Guid(Uuid::new_v4()), + TypeIds::SoftwareEventType => BxesValue::SoftwareEventType(generate_random_enum::(SoftwareEventType::VARIANT_COUNT)), + TypeIds::Artifact => generate_random_artifact(rng), + TypeIds::Drivers => generate_random_drivers(rng), + _ => panic!("Got unknown type id"), + })) } fn generate_random_type_id(rng: &mut ThreadRng) -> TypeIds { - TypeIds::from_u8(rng.gen_range(0..TypeIds::VARIANT_COUNT) as u8).unwrap() + TypeIds::from_u8(rng.gen_range(0..TypeIds::VARIANT_COUNT) as u8).unwrap() } fn generate_random_drivers(rng: &mut ThreadRng) -> BxesValue { - let mut drivers = vec![]; - let count = rng.gen_range(1..20); + let mut drivers = vec![]; + let count = rng.gen_range(1..20); - for _ in 0..count { - drivers.push(generate_random_driver(rng)); - } + for _ in 0..count { + drivers.push(generate_random_driver(rng)); + } - BxesValue::Drivers(BxesDrivers { drivers }) + BxesValue::Drivers(BxesDrivers { drivers }) } fn generate_random_driver(rng: &mut ThreadRng) -> BxesDriver { - BxesDriver { - amount: BxesValue::Float64(rng.gen()), - name: Rc::new(Box::new(BxesValue::String(Rc::new(Box::new( - generate_random_string(rng), - ))))), - driver_type: Rc::new(Box::new(BxesValue::String(Rc::new(Box::new( - generate_random_string(rng), - ))))), - } + BxesDriver { + amount: BxesValue::Float64(rng.gen()), + name: Rc::new(Box::new(BxesValue::String(Rc::new(Box::new(generate_random_string(rng)))))), + driver_type: Rc::new(Box::new(BxesValue::String(Rc::new(Box::new(generate_random_string(rng)))))), + } } fn generate_random_artifact(rng: &mut ThreadRng) -> BxesValue { - let mut artifacts = vec![]; - let count = rng.gen_range(1..20); + let mut artifacts = vec![]; + let count = rng.gen_range(1..20); - for _ in 0..count { - artifacts.push(generate_random_artifact_item(rng)); - } + for _ in 0..count { + artifacts.push(generate_random_artifact_item(rng)); + } - return BxesValue::Artifact(BxesArtifact { items: artifacts }); + return BxesValue::Artifact(BxesArtifact { items: artifacts }); } fn generate_random_artifact_item(rng: &mut ThreadRng) -> BxesArtifactItem { - BxesArtifactItem { - model: Rc::new(Box::new(BxesValue::String(Rc::new(Box::new( - generate_random_string(rng), - ))))), - instance: Rc::new(Box::new(BxesValue::String(Rc::new(Box::new( - generate_random_string(rng), - ))))), - transition: Rc::new(Box::new(BxesValue::String(Rc::new(Box::new( - generate_random_string(rng), - ))))), - } + BxesArtifactItem { + model: Rc::new(Box::new(BxesValue::String(Rc::new(Box::new(generate_random_string(rng)))))), + instance: Rc::new(Box::new(BxesValue::String(Rc::new(Box::new(generate_random_string(rng)))))), + transition: Rc::new(Box::new(BxesValue::String(Rc::new(Box::new(generate_random_string(rng)))))), + } } fn generate_random_lifecycle(rng: &mut ThreadRng) -> Lifecycle { - match rng.gen_bool(0.5) { - true => Lifecycle::Standard(generate_random_standard_lifecycle()), - false => Lifecycle::Braf(generate_random_braf_lifecycle()), - } + match rng.gen_bool(0.5) { + true => Lifecycle::Standard(generate_random_standard_lifecycle()), + false => Lifecycle::Braf(generate_random_braf_lifecycle()), + } } fn generate_random_braf_lifecycle() -> BrafLifecycle { - generate_random_enum::(BrafLifecycle::VARIANT_COUNT) + generate_random_enum::(BrafLifecycle::VARIANT_COUNT) } fn generate_random_enum(variant_count: usize) -> T { - T::from_usize(variant_count - 1).unwrap() + T::from_usize(variant_count - 1).unwrap() } fn generate_random_standard_lifecycle() -> StandardLifecycle { - generate_random_enum::(StandardLifecycle::VARIANT_COUNT) + generate_random_enum::(StandardLifecycle::VARIANT_COUNT) } diff --git a/bxes/src/rust/bxes_kafka/Cargo.toml b/bxes/src/rust/bxes_kafka/Cargo.toml index 9c67b878c..44d797117 100644 --- a/bxes/src/rust/bxes_kafka/Cargo.toml +++ b/bxes/src/rust/bxes_kafka/Cargo.toml @@ -6,6 +6,6 @@ edition = "2021" [dependencies] bxes = { path = "../bxes" } rdkafka = { version = "0.36.2", features = ["cmake-build"] } -uuid = { version = "1.10.0", features = ["v4"] } -log = "0.4.25" -colog = "1.3.0" \ No newline at end of file +uuid = { version = "1.19.0", features = ["v4"] } +log = "0.4.29" +colog = "1.4.0" diff --git a/bxes/src/rust/bxes_kafka/src/consumer/bxes_kafka_consumer.rs b/bxes/src/rust/bxes_kafka/src/consumer/bxes_kafka_consumer.rs index d2ae1df5a..8fe962c35 100644 --- a/bxes/src/rust/bxes_kafka/src/consumer/bxes_kafka_consumer.rs +++ b/bxes/src/rust/bxes_kafka/src/consumer/bxes_kafka_consumer.rs @@ -1,156 +1,155 @@ -use bxes::binary_rw::core::{BinaryReader, Endian}; -use bxes::binary_rw::cursor_stream::CursorStream; -use bxes::models::domain::bxes_event_log::BxesEvent; -use bxes::models::domain::bxes_value::BxesValue; -use bxes::read::errors::BxesReadError; -use bxes::read::read_context::{ReadContext, ReadMetadata}; -use bxes::read::read_utils::{ - try_read_key_values, try_read_system_metadata, try_read_trace_variant_events, - try_read_trace_variant_metadata, try_read_values, +use bxes::{ + binary_rw::{ + core::{BinaryReader, Endian}, + cursor_stream::CursorStream, + }, + models::domain::{bxes_event_log::BxesEvent, bxes_value::BxesValue}, + read::{ + errors::BxesReadError, + read_context::{ReadContext, ReadMetadata}, + read_utils::{ + try_read_key_values, try_read_system_metadata, try_read_trace_variant_events, try_read_trace_variant_metadata, try_read_values, + }, + }, }; use log::info; -use rdkafka::consumer::{BaseConsumer, CommitMode, Consumer}; -use rdkafka::error::KafkaError; -use rdkafka::Message; -use std::collections::HashMap; -use std::io::Cursor; -use std::rc::Rc; -use std::time::Duration; +use rdkafka::{ + consumer::{BaseConsumer, CommitMode, Consumer}, + error::KafkaError, + Message, +}; +use std::{collections::HashMap, io::Cursor, rc::Rc, time::Duration}; use uuid::Uuid; pub struct BxesKafkaConsumer { - topic: String, - consumer: BaseConsumer, - session_id_to_read_metadata: HashMap, + topic: String, + consumer: BaseConsumer, + session_id_to_read_metadata: HashMap, } unsafe impl Send for BxesKafkaConsumer {} impl BxesKafkaConsumer { - pub fn new(topic: String, consumer: BaseConsumer) -> Self { - Self { - topic, - consumer, - session_id_to_read_metadata: HashMap::new(), - } + pub fn new(topic: String, consumer: BaseConsumer) -> Self { + Self { + topic, + consumer, + session_id_to_read_metadata: HashMap::new(), } + } } #[derive(Debug, Clone)] pub struct BxesKafkaTrace { - metadata: HashMap>>, - events: Vec, + metadata: HashMap>>, + events: Vec, } impl BxesKafkaTrace { - pub fn metadata(&self) -> &HashMap>> { - &self.metadata - } + pub fn metadata(&self) -> &HashMap>> { + &self.metadata + } - pub fn events(&self) -> &Vec { - &self.events - } + pub fn events(&self) -> &Vec { + &self.events + } } #[derive(Debug)] pub enum BxesKafkaError { - Kafka(KafkaError), - Bxes(BxesReadError), + Kafka(KafkaError), + Bxes(BxesReadError), } impl From for BxesKafkaError { - fn from(value: BxesReadError) -> Self { - Self::Bxes(value) - } + fn from(value: BxesReadError) -> Self { + Self::Bxes(value) + } } impl From for BxesKafkaError { - fn from(value: KafkaError) -> Self { - Self::Kafka(value) - } + fn from(value: KafkaError) -> Self { + Self::Kafka(value) + } } impl BxesKafkaConsumer { - pub fn subscribe(&mut self) -> Result<(), BxesKafkaError> { - match self.consumer.subscribe(&[self.topic.as_str()]) { - Ok(_) => Ok(()), - Err(err) => Err(BxesKafkaError::Kafka(err)), - } + pub fn subscribe(&mut self) -> Result<(), BxesKafkaError> { + match self.consumer.subscribe(&[self.topic.as_str()]) { + Ok(_) => Ok(()), + Err(err) => Err(BxesKafkaError::Kafka(err)), } + } - pub fn unsubscribe(&mut self) { - self.consumer.unsubscribe() - } + pub fn unsubscribe(&mut self) { + self.consumer.unsubscribe() + } - pub fn consume(&mut self) -> Result, BxesKafkaError> { - match self.consumer.poll(Duration::from_millis(1000)) { - Some(message) => match message { - Ok(msg) => { - let payload = msg.payload().unwrap(); - const UUID_LENGTH: usize = 16; + pub fn consume(&mut self) -> Result, BxesKafkaError> { + match self.consumer.poll(Duration::from_millis(1000)) { + Some(message) => match message { + Ok(msg) => { + let payload = msg.payload().unwrap(); + const UUID_LENGTH: usize = 16; - let read_metadata_id = Uuid::from_slice(&payload[..UUID_LENGTH]).expect("Should be valid uuid"); + let read_metadata_id = Uuid::from_slice(&payload[..UUID_LENGTH]).expect("Should be valid uuid"); - info!("Read bxes trace with read metadata id {}", read_metadata_id); + info!("Read bxes trace with read metadata id {}", read_metadata_id); - if !self.session_id_to_read_metadata.contains_key(&read_metadata_id) { - info!("Creating new read metadata for id {}", read_metadata_id); - self.session_id_to_read_metadata - .insert(read_metadata_id.clone(), ReadMetadata::empty()); - } + if !self.session_id_to_read_metadata.contains_key(&read_metadata_id) { + info!("Creating new read metadata for id {}", read_metadata_id); + self + .session_id_to_read_metadata + .insert(read_metadata_id.clone(), ReadMetadata::empty()); + } - let mut read_metadata = self - .session_id_to_read_metadata - .get_mut(&read_metadata_id) - .expect("Must be present"); + let mut read_metadata = self + .session_id_to_read_metadata + .get_mut(&read_metadata_id) + .expect("Must be present"); - let trace = Self::parse_raw_bxes_bytes(&payload[UUID_LENGTH..], &mut read_metadata)?; + let trace = Self::parse_raw_bxes_bytes(&payload[UUID_LENGTH..], &mut read_metadata)?; - self.consumer.commit_message(&msg, CommitMode::Sync)?; + self.consumer.commit_message(&msg, CommitMode::Sync)?; - Ok(Some(trace)) - } - Err(err) => Err(BxesKafkaError::Kafka(err)), - }, - None => Ok(None), + Ok(Some(trace)) } + Err(err) => Err(BxesKafkaError::Kafka(err)), + }, + None => Ok(None), } - - fn parse_raw_bxes_bytes( - bytes: &[u8], - read_metadata: &mut ReadMetadata, - ) -> Result { - let cursor = Cursor::new(bytes); - let mut stream = CursorStream::new(cursor); - let mut reader = BinaryReader::new(&mut stream, Endian::Little); - let mut read_context = ReadContext::new(&mut reader, read_metadata); - - try_read_system_metadata(&mut read_context)?; - try_read_values(&mut read_context)?; - try_read_key_values(&mut read_context)?; - - let metadata = try_read_trace_variant_metadata(&mut read_context)?; - let metadata = Self::create_trace_metadata(metadata)?; - let events = try_read_trace_variant_events(&mut read_context)?; - - Ok(BxesKafkaTrace { metadata, events }) + } + + fn parse_raw_bxes_bytes(bytes: &[u8], read_metadata: &mut ReadMetadata) -> Result { + let cursor = Cursor::new(bytes); + let mut stream = CursorStream::new(cursor); + let mut reader = BinaryReader::new(&mut stream, Endian::Little); + let mut read_context = ReadContext::new(&mut reader, read_metadata); + + try_read_system_metadata(&mut read_context)?; + try_read_values(&mut read_context)?; + try_read_key_values(&mut read_context)?; + + let metadata = try_read_trace_variant_metadata(&mut read_context)?; + let metadata = Self::create_trace_metadata(metadata)?; + let events = try_read_trace_variant_events(&mut read_context)?; + + Ok(BxesKafkaTrace { metadata, events }) + } + + fn create_trace_metadata( + metadata: Vec<(Rc>, Rc>)>, + ) -> Result>>, BxesReadError> { + let mut new_metadata = HashMap::new(); + + for (key, value) in metadata { + if let BxesValue::String(key) = key.as_ref().as_ref() { + new_metadata.insert(key.as_ref().as_ref().to_owned(), value); + } else { + return Err(BxesReadError::ExpectedString(key.as_ref().as_ref().to_owned())); + } } - fn create_trace_metadata( - metadata: Vec<(Rc>, Rc>)>, - ) -> Result>>, BxesReadError> { - let mut new_metadata = HashMap::new(); - - for (key, value) in metadata { - if let BxesValue::String(key) = key.as_ref().as_ref() { - new_metadata.insert(key.as_ref().as_ref().to_owned(), value); - } else { - return Err(BxesReadError::ExpectedString( - key.as_ref().as_ref().to_owned(), - )); - } - } - - Ok(new_metadata) - } + Ok(new_metadata) + } } diff --git a/bxes/src/rust/bxes_kafka/src/main.rs b/bxes/src/rust/bxes_kafka/src/main.rs index a0246062f..3eb627091 100644 --- a/bxes/src/rust/bxes_kafka/src/main.rs +++ b/bxes/src/rust/bxes_kafka/src/main.rs @@ -3,19 +3,19 @@ use log::debug; use rdkafka::ClientConfig; pub fn main() { - colog::init(); + colog::init(); - let consumer = ClientConfig::new() - .set("bootstrap.servers", "localhost:9092") - .set("group.id", "xd") - .create() - .expect("invalid consumer config"); + let consumer = ClientConfig::new() + .set("bootstrap.servers", "localhost:9092") + .set("group.id", "xd") + .create() + .expect("invalid consumer config"); - let mut consumer = BxesKafkaConsumer::new("my-topic".to_string(), consumer); - consumer.subscribe().expect("Must subscribe"); + let mut consumer = BxesKafkaConsumer::new("my-topic".to_string(), consumer); + consumer.subscribe().expect("Must subscribe"); - loop { - let trace = consumer.consume().ok().unwrap(); - debug!("{:?}", trace); - } + loop { + let trace = consumer.consume().ok().unwrap(); + debug!("{:?}", trace); + } } diff --git a/bxes/src/rust/rustfmt.toml b/bxes/src/rust/rustfmt.toml new file mode 100644 index 000000000..3e523a1f4 --- /dev/null +++ b/bxes/src/rust/rustfmt.toml @@ -0,0 +1,3 @@ +max_width = 140 +tab_spaces = 2 +imports_granularity = "Crate" \ No newline at end of file