# precord
[![crates.io](https://img.shields.io/crates/v/precord.svg)](https://crates.io/crates/precord)
[![docs.rs](https://docs.rs/precord/badge.svg)](https://docs.rs/precord)
![Minimum rustc version](https://img.shields.io/badge/rustc-1.64+-green.svg)
Command line tool for recording process or system performance data.
## Installation
Install with `cargo`:
```shell
cargo install precord
```
## Usage
```shell
precord -p 1203 -o result.svg
```
### Options
```shell
precord -h
```
- `-c / --category` - categories for recording, possible values:
- `cpu` - CPU usage of process
- `mem` - Memory usage of process
- `alloc` - Allocation of process
- `gpu` - GPU usage of process
- `vram` - VRAM usage of process
- `fps` - Frame rate of process
- `net_in/net_out` - Network recv/send of process
- `disk_read/disk_write` - Disk read/write of process
- `kobject` - Kernel object count of process
- `thread` - Thread count of process
- `sys_cpu` - CPU usage of system
- `sys_cpu_freq` - CPU frequency of system
- `sys_cpu_temp` - CPU temperature of system
- `sys_gpu` - GPU usage of system
- `sys_power` - Power usage of system
- `sys_npu_power` - Power usage of npu
- `-p / --process` - ID of processes
- `--name` - Name of processes
- `-o / --output` - Specify the output file, possible extensions:
- `.svg`
- `.html`
- `.json`
- `.csv`
- `-i / --interval` - Interval for recording
- `-n` - Count for recording
- `--time` - Time limit for recording, e.g., `--time 1h30m59s`
- `-r / --recurse-children` - Flag to recurse child processes
- `--skip` - Number of skip records
- `--gpu-calc` - Gpu calculation, possible values:
- `max`
- `sum`
- `--interactive` - Interactive mode
- `--auto-save` - Interval of auto saving
### Command Mode
Type `:` during recording will enter the command mode, and press `Esc` will back to recording. The supported commands are:
- `w` - Write(Save) output
- `q` - Exit
- `wq` - Combination of `w` and `q`
- `time` - modify time limit for recording
### Sub Commands
- `thread-list ` - List threads and cpu usage
## precord-core
A library for retrieving process and system performance data.
```rust
use precord_core::{Features, GpuCalculation, System};
use std::thread;
use std::time::Duration;
fn main() {
let mut system = System::new(Features::PROCESS || Features::GPU, [1203]).unwrap();
thread::sleep(Duration::from_secs(1));
system.update();
if let Some(cpu_usage) = system.process_cpu_usage(1203) {
println!("Process({}) %CPU: {:.2}%", 1203, cpu_usage)
}
#[cfg(target_os = "windows")]
if let Some(gpu_usage) = system.process_gpu_usage(1203, GpuCalculation::Max) {
println!("Process({}) %GPU: {:.2}%", 1203, gpu_usage)
}
if let Some(sys_gpu_usage) = system.system_gpu_usage(GpuCalculation::Max) {
println!("System %GPU: {:.2}%", sys_gpu_usage);
}
}
```
## Supported Platforms
| | macOS | Windows | Linux |
|----------------------|--------------------|--------------------|--------------------|
| cpu | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| mem | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| alloc | | :white_check_mark: | |
| gpu | | :white_check_mark: | |
| vram | | :white_check_mark: | |
| fps | :white_check_mark: | :white_check_mark: | |
| net_in/net_out | :white_check_mark: | :white_check_mark: | |
| disk_read/disk_write | :white_check_mark: | | |
| kobject | :white_check_mark: | :white_check_mark: | |
| thread | :white_check_mark: | :white_check_mark: | |
| sys_cpu | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| sys_cpu_freq | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| sys_cpu_temp | :white_check_mark: | :white_check_mark: | |
| sys_gpu | :white_check_mark: | :white_check_mark: | |
| sys_power | :white_check_mark: | :white_check_mark: | |
| sys_npu_power | :white_check_mark: | | |
## Privileges
| | macOS | Windows | Linux |
|----------------------------------------------------|--------------------------------|---------------|-------|
| cpu | | | |
| mem | | | |
| alloc | | | |
| gpu | | | |
| vram | | | |
| fps | Administrator + get-task-allow | Administrator | |
| net_in/net_out | | Administrator | |
| disk_read/disk_write | | | |
| kobject | | | |
| thread | | | |
| sys_cpu | | | |
| sys_cpu_freq | Administrator | | |
| sys_cpu_temp | | | |
| sys_gpu | | | |
| sys_power | | | |
| sys_npu_power | Administrator | | |
| system processes
(WindowServer, dwm.exe, etc.) | Administrator | Administrator | |
## TODO
## Related projects
- Rust
- [sysinfo]
- [heim]
- [rust-psutil]
- Go
- [gopsutil]
- Python
- [psutil]
[sysinfo]: https://github.com/GuillaumeGomez/sysinfo
[heim]: https://github.com/heim-rs/heim
[rust-psutil]: https://github.com/rust-psutil/rust-psutil
[gopsutil]: https://github.com/shirou/gopsutil
[psutil]: https://github.com/giampaolo/psutil