Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[#432] Implement CLI iox2-config #468

Open
wants to merge 8 commits into
base: main
Choose a base branch
from
34 changes: 28 additions & 6 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,21 @@ members = [
"examples",

"benchmarks/publish-subscribe",
"benchmarks/event"
"benchmarks/event",
]

[workspace.package]
categories = ["network-programming"]
description = "iceoryx2: Lock-Free Zero-Copy Interprocess Communication"
edition = "2021"
homepage = "https://iceoryx.io"
keywords = ["zero-copy", "communication", "ipc", "publish-subscribe", "request-response"]
keywords = [
"zero-copy",
"communication",
"ipc",
"publish-subscribe",
"request-response",
]
license = "MIT OR Apache-2.0"
readme = "README.md"
repository = "https://github.com/eclipse-iceoryx/iceoryx2"
Expand Down Expand Up @@ -66,8 +72,7 @@ iceoryx2-ffi-macros = { version = "0.4.1", path = "iceoryx2-ffi/ffi-macros" }

iceoryx2 = { version = "0.4.1", path = "iceoryx2/" }

iceoryx2-cli = { version = "0.4.1", path = "iceoryx2_cli/"}

iceoryx2-cli = { version = "0.4.1", path = "iceoryx2_cli/" }


anyhow = { version = "1.0.86" }
Expand Down Expand Up @@ -102,8 +107,25 @@ thiserror = { version = "1.0.56" }
tiny-fn = { version = "0.1.6" }
toml = { version = "0.8.13" }
tracing = { version = "0.1.40" }
windows-sys = { version = "0.48.0", features = ["Win32_Security", "Win32_Security_Authorization", "Win32_System_Memory", "Win32_System_Threading", "Win32_Foundation", "Win32_System_WindowsProgramming", "Win32_Storage_FileSystem", "Win32_System_IO", "Win32_System_Diagnostics_Debug", "Win32_System_SystemInformation", "Win32_System_Diagnostics_ToolHelp", "Win32_System_Console", "Win32_Networking_WinSock",
"Win32_System_SystemServices", "Win32_System_ProcessStatus"] }
dirs = { version = "5.0" }
dialoguer = { version = "0.8.0" }
windows-sys = { version = "0.48.0", features = [
"Win32_Security",
"Win32_Security_Authorization",
"Win32_System_Memory",
"Win32_System_Threading",
"Win32_Foundation",
"Win32_System_WindowsProgramming",
"Win32_Storage_FileSystem",
"Win32_System_IO",
"Win32_System_Diagnostics_Debug",
"Win32_System_SystemInformation",
"Win32_System_Diagnostics_ToolHelp",
"Win32_System_Console",
"Win32_Networking_WinSock",
"Win32_System_SystemServices",
"Win32_System_ProcessStatus",
] }

[profile.release]
strip = true
Expand Down
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,10 @@ The support levels can be adjusted when required.
<a href="https://github.com/orecham">
<img src="https://avatars.githubusercontent.com/u/8487595" width="120px;" alt="»orecham«"/><br />
<sub><b>»orecham«</b></sub></a></td>
<td align="center" valign="top" width="14.28%">
<a href="https://github.com/brosier01">
<img src="https://avatars.githubusercontent.com/u/71630425?v=4" width="120px;" alt="Bruce »brosier01« Rosier"/><br />
<sub><b>Bruce »brosier01« Rosier</b></sub></a></td>
</tr>
</tbody>
</table>
Expand Down
58 changes: 12 additions & 46 deletions doc/release-notes/iceoryx2-unreleased.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,57 +6,23 @@

### Features

<!--
NOTE: Add new entries sorted by issue number to minimize the possibility of
conflicts when merging.
-->
Create a new CLI for iceoryx2 `iox2-config`

* Add `PeriodicTimer` into POSIX building blocks [#425](https://github.com/eclipse-iceoryx/iceoryx2/issues/425)
`iox2 config` can `show` the configuration currently in use and `generate` a new
configuration file at the default location iceoryx2 is looking for.

### Bugfixes

<!--
NOTE: Add new entries sorted by issue number to minimize the possibility of
conflicts when merging.
-->

* Example text [#1](https://github.com/eclipse-iceoryx/iceoryx2/issues/1)
* Add CLI to display complete system configuration [#432](https://github.com/eclipse-iceoryx/iceoryx2/issues/432)

### Refactoring

<!--
NOTE: Add new entries sorted by issue number to minimize the possibility of
conflicts when merging.
-->

* Example text [#1](https://github.com/eclipse-iceoryx/iceoryx2/issues/1)

### Workflow

<!--
NOTE: Add new entries sorted by issue number to minimize the possibility of
conflicts when merging.
-->

* Example text [#1](https://github.com/eclipse-iceoryx/iceoryx2/issues/1)

### New API features

<!--
NOTE: Add new entries sorted by issue number to minimize the possibility of
conflicts when merging.
-->

* Example text [#1](https://github.com/eclipse-iceoryx/iceoryx2/issues/1)

### API Breaking Changes
Remove the `print_system_configuration()` function in
`iceoryx2-bb/posix/src/system_configuration.rs` file and move it into the CLI `iox2-config`
[#432](https://github.com/eclipse-iceoryx/iceoryx2/issues/432)

1. Example
### New CLI features

```rust
// old
let fuu = hello().is_it_me_you_re_looking_for()
```bash
cargo run --bin iox2-config show
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
cargo run --bin iox2-config show
iox2 config show


// new
let fuu = hypnotoad().all_glory_to_the_hypnotoad()
```
iox2 config generate
```
86 changes: 1 addition & 85 deletions iceoryx2-bb/posix/src/system_configuration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
//! Provides information about the POSIX [`SystemInfo`], [`Limit`]s, available [`SysOption`] and
//! [`Feature`]s.

use enum_iterator::{all, Sequence};
use enum_iterator::Sequence;
use iceoryx2_bb_log::{fatal_panic, warn};
use iceoryx2_pal_posix::posix::Struct;
use iceoryx2_pal_posix::*;
Expand Down Expand Up @@ -294,87 +294,3 @@ impl ProcessResourceLimit {
true
}
}

/// Prints the whole system configuration with all limits, features and details to the console.
pub fn print_system_configuration() {
const HEADER_COLOR: &str = "\x1b[4;92m";
const VALUE_COLOR: &str = "\x1b[0;94m";
const DISABLED_VALUE_COLOR: &str = "\x1b[0;90m";
const ENTRY_COLOR: &str = "\x1b[0;37m";
const DISABLED_ENTRY_COLOR: &str = "\x1b[0;90m";
const COLOR_RESET: &str = "\x1b[0m";

println!("{}posix system configuration{}", HEADER_COLOR, COLOR_RESET);
println!();
println!(" {}system info{}", HEADER_COLOR, COLOR_RESET);
for i in all::<SystemInfo>().collect::<Vec<_>>() {
println!(
" {ENTRY_COLOR}{:<50}{COLOR_RESET} {VALUE_COLOR}{}{COLOR_RESET}",
format!("{:?}", i),
i.value(),
);
}

println!();
println!(" {}limits{}", HEADER_COLOR, COLOR_RESET);
for i in all::<Limit>().collect::<Vec<_>>() {
let limit = i.value();
let limit = if limit == 0 {
"[ unlimited ]".to_string()
} else {
limit.to_string()
};
println!(
" {ENTRY_COLOR}{:<50}{COLOR_RESET} {VALUE_COLOR}{}{COLOR_RESET}",
format!("{:?}", i),
limit,
);
}

println!();
println!(" {}options{}", HEADER_COLOR, COLOR_RESET);
for i in all::<SysOption>().collect::<Vec<_>>() {
if i.is_available() {
println!(
" {ENTRY_COLOR}{:<50}{COLOR_RESET} {VALUE_COLOR}{}{COLOR_RESET}",
format!("{:?}", i),
i.is_available(),
);
} else {
println!(
" {DISABLED_ENTRY_COLOR}{:<50}{COLOR_RESET} {DISABLED_VALUE_COLOR}{}{COLOR_RESET}",
format!("{:?}", i),
i.is_available(),
);
}
}

println!();
println!(" {}features{}", HEADER_COLOR, COLOR_RESET);
for i in all::<Feature>().collect::<Vec<_>>() {
if i.is_available() {
println!(
" {ENTRY_COLOR}{:<50}{COLOR_RESET} {VALUE_COLOR}{}{COLOR_RESET}",
format!("{:?}", i),
i.is_available(),
);
} else {
println!(
" {DISABLED_ENTRY_COLOR}{:<50}{COLOR_RESET} {DISABLED_VALUE_COLOR}{}{COLOR_RESET}",
format!("{:?}", i),
i.is_available(),
);
}
}

println!();
println!(" {}process resource limits{}", HEADER_COLOR, COLOR_RESET);
for i in all::<ProcessResourceLimit>().collect::<Vec<_>>() {
println!(
" {ENTRY_COLOR}{:<43}{COLOR_RESET} soft: {VALUE_COLOR}{:<24}{COLOR_RESET} hard: {VALUE_COLOR}{}{COLOR_RESET}",
format!("{:?}", i),
i.soft_limit(),
i.hard_limit()
);
}
}
13 changes: 12 additions & 1 deletion iceoryx2-cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,25 +26,36 @@ path = "iox2-node/src/main.rs"
name = "iox2-service"
path = "iox2-service/src/main.rs"

[[bin]]
name = "iox2-config"
path = "iox2-config/src/main.rs"

[lib]
name = "iceoryx2_cli"
path = "lib/src/lib.rs"

[dependencies]
iceoryx2 = { workspace = true }
iceoryx2-bb-log = { workspace = true }
iceoryx2-pal-posix = {workspace = true}
iceoryx2-pal-posix = { workspace = true }
iceoryx2-bb-posix = { workspace = true }
iceoryx2-bb-system-types = { workspace = true }
iceoryx2-bb-container = { workspace = true }

anyhow = { workspace = true }
better-panic = { workspace = true }
cargo_metadata = { workspace = true }
clap = { workspace = true }
colored = { workspace = true }
enum-iterator = { workspace = true }
human-panic = { workspace = true }
serde = { workspace = true }
serde_yaml = { workspace = true }
serde_json = { workspace = true }
ron = { workspace = true }
toml = { workspace = true }
dirs = { workspace = true }
dialoguer = { workspace = true }

[dev-dependencies]
iceoryx2-bb-testing = { workspace = true }
Expand Down
39 changes: 39 additions & 0 deletions iceoryx2-cli/iox2-config/src/cli.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// Copyright (c) 2024 Contributors to the Eclipse Foundation
//
// See the NOTICE file(s) distributed with this work for additional
// information regarding copyright ownership.
//
// This program and the accompanying materials are made available under the
// terms of the Apache Software License 2.0 which is available at
// https://www.apache.org/licenses/LICENSE-2.0, or the MIT license
// which is available at https://opensource.org/licenses/MIT.
//
// SPDX-License-Identifier: Apache-2.0 OR MIT

use clap::Parser;
use clap::Subcommand;

use iceoryx2_cli::help_template;

#[derive(Parser)]
#[command(
name = "iox2-config",
about = "Query information about iceoryx2 configuration",
long_about = None,
version = env!("CARGO_PKG_VERSION"),
disable_help_subcommand = true,
arg_required_else_help = false,
help_template = help_template("iox2 config", false),
)]
pub struct Cli {
#[clap(subcommand)]
pub action: Option<Action>,
}

#[derive(Subcommand)]
pub enum Action {
#[clap(about = "Show the currently used configuration")]
Show,
#[clap(about = "Generate a default configuration file")]
Generate,
}
Loading