Awesome  Rust

Awesome Rust

1647850260

Kmon: Linux Kernel Manager and Activity Monitor Written in Rust

 Linux Kernel Manager and Activity Monitor 🐧💻 
 The kernel is the part of the operating system that facilitates interactions between hardware and software components. On most systems, it is loaded on startup after the bootloader and handles I/O requests as well as peripherals like keyboards, monitors, network adapters, and speakers. Typically, the kernel is responsible for memory management, process management, device management, system calls, and security. Applications use the system call mechanism for requesting a service from the operating system and most of the time, this request is passed to the kernel using a library provided by the operating system to invoke the related kernel function. While the kernel performs these low-level tasks, it's resident on a separate part of memory named protected kernel space which is not accessible by applications and other parts of the system. In contrast, applications like browsers, text editors, window managers or audio/video players use a different separate area of the memory, user space. This separation prevents user data and kernel data from interfering with each other and causing instability and slowness, as well as preventing malfunctioning application programs from crashing the entire operating system.
There are different kernel designs due to the different ways of managing system calls and resources. For example, while monolithic kernels run all the operating system instructions in the same address space for speed, microkernels use different spaces for user and kernel services for modularity. Apart from those, there are hybrid kernels, nanokernels, and, exokernels. The hybrid kernel architecture is based on combining aspects of microkernel and monolithic kernels.

The Linux kernel is the open-source, monolithic and, Unix-like operating system kernel that used in the Linux distributions, various embedded systems such as routers and as well as in the all Android-based systems. Linus Torvalds conceived and created the Linux kernel in 1991 and it's still being developed by thousands of developers today. It's a prominent example of free and open source software and it's used in other free software projects, notably the GNU operating system. Although the Linux-based operating systems dominate the most of computing, it still carries some of the design flaws which were quite a bit of debate in the early days of Linux. For example, it has the largest footprint and the most complexity over the other types of kernels. But it's a design feature that monolithic kernels inherent to have. These kind of design issues led developers to add new features and mechanisms to the Linux kernel which other kernels don't have.

Unlike the standard monolithic kernels, the Linux kernel is also modular, accepting loadable kernel modules (LKM) that typically used to add support for new hardware (as device drivers) and/or filesystems, or for adding system calls. Since LKMs could be loaded and unloaded to the system at runtime, they have the advantage of extending the kernel without rebooting and re-compiling. Thus, the kernel functionalities provided by modules would not reside in memory without being used and the related module can be unloaded in order to free memory and other resources.
Loadable kernel modules are located in /lib/modules with the .ko (kernel object) extension in Linux. While the lsmod command could be used for listing the loaded kernel modules, modprobe or insmod/rmmod is used for loading or unloading a kernel module. insmod/rmmod are used for modules independent of modprobe and without requiring an installation to /lib/modules/$(uname -r).

Here's a simple example of a Linux kernel module that prints a message when it's loaded and unloaded. The build and installation steps of the module using a Makefile are shown below.

make                         # build
sudo make install            # install
sudo modprobe lkm_example    # load
sudo modprobe -r lkm_example # unload

The dmesg command is used below to retrieve the message buffer of the kernel.

[16994.295552] [+] Example kernel module loaded.
[16996.325674] [-] Example kernel module unloaded.

kmon provides a text-based user interface for managing the Linux kernel modules and monitoring the kernel activities. By managing, it means loading, unloading, blacklisting and showing the information of a module. These updates in the kernel modules, logs about the hardware and other kernel messages can be tracked with the real-time activity monitor in kmon. Since the usage of different tools like dmesg and kmod are required for these tasks in Linux, kmon aims to gather them in a single terminal window and facilitate the usage as much as possible while keeping the functionality.

kmon is written in Rust and uses tui-rs & termion libraries for its text-based user interface.

Installation

Packaging status

Cargo

kmon can be installed from crates.io using Cargo if Rust is installed.

cargo install kmon

Use the --force option to update.

cargo install kmon --force

Arch Linux

kmon can be installed from the Arch Linux official repository.

pacman -S kmon

There are also a development package on AUR. Use your favorite AUR helper to install. For example,

paru -S kmon-git

Nixpkgs

kmon can be installed using Nix package manager from nixpkgs-unstable channel.

nix-channel --add https://nixos.org/channels/nixpkgs-unstable
nix-channel --update nixpkgs
nix-env -iA nixpkgs.kmon

On NixOS:

nix-channel --add https://nixos.org/channels/nixos-unstable
nix-channel --update nixos
nix-env -iA nixos.kmon

Docker

docker run -it --cap-add syslog orhunp/kmon:tagname

Build

docker build -t kmon .

Run

docker run -it --cap-add syslog kmon

Manual

  1. Download the latest binary from releases.
wget https://github.com/orhun/kmon/releases/download/v[VERSION]/kmon-[VERSION].tar.gz

2.   Extract the files.

tar -xvzf kmon-*.tar.gz

3.   Run the binary.

./kmon

4.   Move binary to /usr/local/bin/ for running it from the terminal using kmon command.

5.   Man page could be viewed if kmon.8 file is copied to /usr/local/man/man8/ directory.

cp kmon.8 /usr/local/man/man8/
gzip /usr/local/man/man8/kmon.8
man kmon

Note

libxcb should be installed for using the copy/paste commands of X11. *

e.g: Install libxcb1-dev package for Debian/Ubuntu* and libxcb-devel package for Fedora/openSUSE/Void Linux.

Usage

kmon [FLAGS] [OPTIONS] [SUBCOMMANDS]

Flags

-h, --help       Prints help information
-r, --reverse    Reverse the kernel module list
-u, --unicode    Show Unicode symbols for the block titles
-V, --version    Prints version information

Options

-a, --accent-color <COLOR>    Set the accent color using hex or color name [default: white]
-c, --color <COLOR>           Set the main color using hex or color name [default: darkgray]
-t, --tickrate <MS>           Set the refresh rate of the terminal [default: 250]

Subcommands

help    Prints this message or the help of the given subcommand(s)
sort    Sort kernel modules
kmon sort [FLAGS]

FLAGS:
    -n, --name         Sort modules by their names
    -s, --size         Sort modules by their sizes
    -d, --dependent    Sort modules by their dependent modules

Key Bindings

  
[?], F1Help
right/left, h/lSwitch between blocks
up/down, k/j, alt-k/jScroll up/down [selected block]
pgup/pgdownScroll up/down [kernel activities]
</>Scroll up/down [module information]
alt-h/lScroll right/left [kernel activities]
ctrl-t/b, home/endScroll to top/bottom [module list]
alt-e/sExpand/shrink the selected block
ctrl-xChange the block position
ctrl-l/u, alt-cClear the kernel ring buffer
[d], alt-dShow the dependent modules
[1]..[9]Jump to the dependent module
[\], tab, backtabShow the next kernel information
[/], s, enterSearch a kernel module
[+], i, insertLoad a kernel module
[-], u, backspaceUnload the kernel module
[x], b, deleteBlacklist the kernel module
ctrl-r, alt-rReload the kernel module
m, oShow the options menu
y/nExecute/cancel the command
c/vCopy/paste
r, F5Refresh
q, ctrl-c/d, ESCQuit

Features

Help

Press '?' while running the terminal UI to see key bindings.

Help

Navigating & Scrolling

Arrow keys are used for navigating between blocks and scrolling.

Navigating & Scrolling

Scrolling Kernel Activities

Some kernel messages might be long enough for not fitting into the kernel activities block since they are not wrapped. In this situation, kernel activities can be scrolled horizontally with alt-h & alt-l keys. Vertical scrolling mechanism is the same as other blocks.

Scrolling Kernel Activities

Smooth Scrolling

alt-j & alt-k keys can be used to scroll kernel activity and module information blocks slowly.

Smooth Scrolling

Options Menu

m and o keys can be used as a shortcut for kernel management operations. When pressed, an options menu will be provided for managing the currently selected kernel module.

Options Menu

Block Sizes

alt-e & alt-s keys can be used for expanding/shrinking the selected block.

Block Sizes

Block Positions

ctrl-x key can be used for changing the positions of blocks.

Block Positions

Kernel Information

Use one of the \, tab, backtab keys to switch between kernel release, version and platform informations.

Kernel Information

Module Information

The status of a kernel module is shown on selection.

Module Information

Displaying the dependent modules

Use one of the d, alt-d keys to show all the dependent modules of the selected module.

Displaying the dependent modules

Jumping to dependent modules

For jumping to a dependent kernel module from its parent module, number keys (1-9) can be used for specifying the index of the module on the Used By column.

Dependency Information

Searching a module

Switch to the search area with arrow keys or using one of the /, s, enter and provide a search query for the module name.

Searching a module

Loading a module

For adding a module to the Linux kernel, switch to load mode with one of the +, i, insert keys and provide the name of the module to load. Then confirm/cancel the execution of the load command with y/n.

Loading a module

The command that used for loading a module:

modprobe <module_name> || insmod <module_name>.ko

Unloading a module

Use one of the -, u, backspace keys to remove the selected module from the Linux kernel.

Unloading a module

The command that used for removing a module:

modprobe -r <module_name> || rmmod <module_name>

Blacklisting a module

Blacklisting is a mechanism to prevent the kernel module from loading. To blacklist the selected module, use one of the x, b, delete keys and confirm the execution.

Blacklisting a module

The command that used for blacklisting a module:

if ! grep -q <module_name> /etc/modprobe.d/blacklist.conf; then
  echo 'blacklist <module_name>' >> /etc/modprobe.d/blacklist.conf
  echo 'install <module_name> /bin/false' >> /etc/modprobe.d/blacklist.conf
fi

Reloading a module

Use ctrl-r or alt-r key for reloading the selected module.

Reloading a module

The command that used for reloading a module:

modprobe -r <module_name> || rmmod <module_name> && modprobe <module_name> || insmod <module_name>.ko

Clearing the ring buffer

The kernel ring buffer can be cleared with using one of the ctrl-l/u, alt-c keys.

Clearing the ring buffer

dmesg --clear

Copy & Paste

c/v keys are set for copy/paste operations.

Copy & Paste

Use ctrl-c/ctrl-v for copying and pasting while in input mode.

Sorting/reversing the kernel modules

sort subcommand can be used for sorting the kernel modules by their names, sizes or dependent modules.

kmon sort --name
kmon sort --size
kmon sort --dependent

Sorting the kernel modules

Also the -r, --reverse flag is used for reversing the kernel module list.

kmon --reverse

Reversing the kernel modules

Customizing the colors

kmon uses the colors of the terminal as default but the highlighting color could be specified with -c, --color option. Alternatively, default text color can be set via -a, --accent-color option.

Supported colors

Supported terminal colors are black, red, green, yellow, blue, magenta, cyan, gray, darkgray, lightred, lightgreen, lightyellow, lightblue, lightmagenta, lightcyan, white.

kmon --color red

Supported Colors

Using a custom color

Provide a hexadecimal value for the color to use.

kmon --color 19683a

Using a custom color

Changing the accent color

Default text color might cause readability issues on some themes that have transparency. -a, --accent-color option can be used similarly to the -c, --color option for overcoming this issue.

kmon --color 6f849c --accent-color e35760

Changing the accent color

Unicode symbols

Use -u, --unicode flag for showing Unicode symbols for the block titles.

kmon --unicode

Unicode symbols

Setting the terminal tick rate

-t, --tickrate option can be used for setting the refresh interval of the terminal UI in milliseconds.

Setting the terminal tick rate

Roadmap

kmon aims to be a standard tool for Linux kernel management while supporting most of the Linux distributions.

Accessibility

For achieving this goal, kmon should be accessible from different package managers such as Snap* and RPM.

Dependencies

It is required to have the essential tools like dmesg and kmod on the system for kmon to work as expected. Thus the next step would be using just the system resources for these functions.

Features

Management actions about the Linux kernel should be applicable in kmon for minimizing the dependence on to command line and other tools.

Testing

kmon should be tested and reported on different architectures for further development and support.

Resources

About the project

Articles

In the media

Gallery

Fedora 31Debian 10Manjaro 19
kmon on fedorakmon on debiankmon on manjaro
Ubuntu 18.04openSUSEVoid Linux
kmon on ubuntukmon on opensusekmon on voidlinux

Download Details:
Author: orhun
Source Code: https://github.com/orhun/kmon
License: GPL-3.0 License

#rust 

What is GEEK

Buddha Community

Kmon: Linux Kernel Manager and Activity Monitor Written in Rust
Awesome  Rust

Awesome Rust

1647850260

Kmon: Linux Kernel Manager and Activity Monitor Written in Rust

 Linux Kernel Manager and Activity Monitor 🐧💻 
 The kernel is the part of the operating system that facilitates interactions between hardware and software components. On most systems, it is loaded on startup after the bootloader and handles I/O requests as well as peripherals like keyboards, monitors, network adapters, and speakers. Typically, the kernel is responsible for memory management, process management, device management, system calls, and security. Applications use the system call mechanism for requesting a service from the operating system and most of the time, this request is passed to the kernel using a library provided by the operating system to invoke the related kernel function. While the kernel performs these low-level tasks, it's resident on a separate part of memory named protected kernel space which is not accessible by applications and other parts of the system. In contrast, applications like browsers, text editors, window managers or audio/video players use a different separate area of the memory, user space. This separation prevents user data and kernel data from interfering with each other and causing instability and slowness, as well as preventing malfunctioning application programs from crashing the entire operating system.
There are different kernel designs due to the different ways of managing system calls and resources. For example, while monolithic kernels run all the operating system instructions in the same address space for speed, microkernels use different spaces for user and kernel services for modularity. Apart from those, there are hybrid kernels, nanokernels, and, exokernels. The hybrid kernel architecture is based on combining aspects of microkernel and monolithic kernels.

The Linux kernel is the open-source, monolithic and, Unix-like operating system kernel that used in the Linux distributions, various embedded systems such as routers and as well as in the all Android-based systems. Linus Torvalds conceived and created the Linux kernel in 1991 and it's still being developed by thousands of developers today. It's a prominent example of free and open source software and it's used in other free software projects, notably the GNU operating system. Although the Linux-based operating systems dominate the most of computing, it still carries some of the design flaws which were quite a bit of debate in the early days of Linux. For example, it has the largest footprint and the most complexity over the other types of kernels. But it's a design feature that monolithic kernels inherent to have. These kind of design issues led developers to add new features and mechanisms to the Linux kernel which other kernels don't have.

Unlike the standard monolithic kernels, the Linux kernel is also modular, accepting loadable kernel modules (LKM) that typically used to add support for new hardware (as device drivers) and/or filesystems, or for adding system calls. Since LKMs could be loaded and unloaded to the system at runtime, they have the advantage of extending the kernel without rebooting and re-compiling. Thus, the kernel functionalities provided by modules would not reside in memory without being used and the related module can be unloaded in order to free memory and other resources.
Loadable kernel modules are located in /lib/modules with the .ko (kernel object) extension in Linux. While the lsmod command could be used for listing the loaded kernel modules, modprobe or insmod/rmmod is used for loading or unloading a kernel module. insmod/rmmod are used for modules independent of modprobe and without requiring an installation to /lib/modules/$(uname -r).

Here's a simple example of a Linux kernel module that prints a message when it's loaded and unloaded. The build and installation steps of the module using a Makefile are shown below.

make                         # build
sudo make install            # install
sudo modprobe lkm_example    # load
sudo modprobe -r lkm_example # unload

The dmesg command is used below to retrieve the message buffer of the kernel.

[16994.295552] [+] Example kernel module loaded.
[16996.325674] [-] Example kernel module unloaded.

kmon provides a text-based user interface for managing the Linux kernel modules and monitoring the kernel activities. By managing, it means loading, unloading, blacklisting and showing the information of a module. These updates in the kernel modules, logs about the hardware and other kernel messages can be tracked with the real-time activity monitor in kmon. Since the usage of different tools like dmesg and kmod are required for these tasks in Linux, kmon aims to gather them in a single terminal window and facilitate the usage as much as possible while keeping the functionality.

kmon is written in Rust and uses tui-rs & termion libraries for its text-based user interface.

Installation

Packaging status

Cargo

kmon can be installed from crates.io using Cargo if Rust is installed.

cargo install kmon

Use the --force option to update.

cargo install kmon --force

Arch Linux

kmon can be installed from the Arch Linux official repository.

pacman -S kmon

There are also a development package on AUR. Use your favorite AUR helper to install. For example,

paru -S kmon-git

Nixpkgs

kmon can be installed using Nix package manager from nixpkgs-unstable channel.

nix-channel --add https://nixos.org/channels/nixpkgs-unstable
nix-channel --update nixpkgs
nix-env -iA nixpkgs.kmon

On NixOS:

nix-channel --add https://nixos.org/channels/nixos-unstable
nix-channel --update nixos
nix-env -iA nixos.kmon

Docker

docker run -it --cap-add syslog orhunp/kmon:tagname

Build

docker build -t kmon .

Run

docker run -it --cap-add syslog kmon

Manual

  1. Download the latest binary from releases.
wget https://github.com/orhun/kmon/releases/download/v[VERSION]/kmon-[VERSION].tar.gz

2.   Extract the files.

tar -xvzf kmon-*.tar.gz

3.   Run the binary.

./kmon

4.   Move binary to /usr/local/bin/ for running it from the terminal using kmon command.

5.   Man page could be viewed if kmon.8 file is copied to /usr/local/man/man8/ directory.

cp kmon.8 /usr/local/man/man8/
gzip /usr/local/man/man8/kmon.8
man kmon

Note

libxcb should be installed for using the copy/paste commands of X11. *

e.g: Install libxcb1-dev package for Debian/Ubuntu* and libxcb-devel package for Fedora/openSUSE/Void Linux.

Usage

kmon [FLAGS] [OPTIONS] [SUBCOMMANDS]

Flags

-h, --help       Prints help information
-r, --reverse    Reverse the kernel module list
-u, --unicode    Show Unicode symbols for the block titles
-V, --version    Prints version information

Options

-a, --accent-color <COLOR>    Set the accent color using hex or color name [default: white]
-c, --color <COLOR>           Set the main color using hex or color name [default: darkgray]
-t, --tickrate <MS>           Set the refresh rate of the terminal [default: 250]

Subcommands

help    Prints this message or the help of the given subcommand(s)
sort    Sort kernel modules
kmon sort [FLAGS]

FLAGS:
    -n, --name         Sort modules by their names
    -s, --size         Sort modules by their sizes
    -d, --dependent    Sort modules by their dependent modules

Key Bindings

  
[?], F1Help
right/left, h/lSwitch between blocks
up/down, k/j, alt-k/jScroll up/down [selected block]
pgup/pgdownScroll up/down [kernel activities]
</>Scroll up/down [module information]
alt-h/lScroll right/left [kernel activities]
ctrl-t/b, home/endScroll to top/bottom [module list]
alt-e/sExpand/shrink the selected block
ctrl-xChange the block position
ctrl-l/u, alt-cClear the kernel ring buffer
[d], alt-dShow the dependent modules
[1]..[9]Jump to the dependent module
[\], tab, backtabShow the next kernel information
[/], s, enterSearch a kernel module
[+], i, insertLoad a kernel module
[-], u, backspaceUnload the kernel module
[x], b, deleteBlacklist the kernel module
ctrl-r, alt-rReload the kernel module
m, oShow the options menu
y/nExecute/cancel the command
c/vCopy/paste
r, F5Refresh
q, ctrl-c/d, ESCQuit

Features

Help

Press '?' while running the terminal UI to see key bindings.

Help

Navigating & Scrolling

Arrow keys are used for navigating between blocks and scrolling.

Navigating & Scrolling

Scrolling Kernel Activities

Some kernel messages might be long enough for not fitting into the kernel activities block since they are not wrapped. In this situation, kernel activities can be scrolled horizontally with alt-h & alt-l keys. Vertical scrolling mechanism is the same as other blocks.

Scrolling Kernel Activities

Smooth Scrolling

alt-j & alt-k keys can be used to scroll kernel activity and module information blocks slowly.

Smooth Scrolling

Options Menu

m and o keys can be used as a shortcut for kernel management operations. When pressed, an options menu will be provided for managing the currently selected kernel module.

Options Menu

Block Sizes

alt-e & alt-s keys can be used for expanding/shrinking the selected block.

Block Sizes

Block Positions

ctrl-x key can be used for changing the positions of blocks.

Block Positions

Kernel Information

Use one of the \, tab, backtab keys to switch between kernel release, version and platform informations.

Kernel Information

Module Information

The status of a kernel module is shown on selection.

Module Information

Displaying the dependent modules

Use one of the d, alt-d keys to show all the dependent modules of the selected module.

Displaying the dependent modules

Jumping to dependent modules

For jumping to a dependent kernel module from its parent module, number keys (1-9) can be used for specifying the index of the module on the Used By column.

Dependency Information

Searching a module

Switch to the search area with arrow keys or using one of the /, s, enter and provide a search query for the module name.

Searching a module

Loading a module

For adding a module to the Linux kernel, switch to load mode with one of the +, i, insert keys and provide the name of the module to load. Then confirm/cancel the execution of the load command with y/n.

Loading a module

The command that used for loading a module:

modprobe <module_name> || insmod <module_name>.ko

Unloading a module

Use one of the -, u, backspace keys to remove the selected module from the Linux kernel.

Unloading a module

The command that used for removing a module:

modprobe -r <module_name> || rmmod <module_name>

Blacklisting a module

Blacklisting is a mechanism to prevent the kernel module from loading. To blacklist the selected module, use one of the x, b, delete keys and confirm the execution.

Blacklisting a module

The command that used for blacklisting a module:

if ! grep -q <module_name> /etc/modprobe.d/blacklist.conf; then
  echo 'blacklist <module_name>' >> /etc/modprobe.d/blacklist.conf
  echo 'install <module_name> /bin/false' >> /etc/modprobe.d/blacklist.conf
fi

Reloading a module

Use ctrl-r or alt-r key for reloading the selected module.

Reloading a module

The command that used for reloading a module:

modprobe -r <module_name> || rmmod <module_name> && modprobe <module_name> || insmod <module_name>.ko

Clearing the ring buffer

The kernel ring buffer can be cleared with using one of the ctrl-l/u, alt-c keys.

Clearing the ring buffer

dmesg --clear

Copy & Paste

c/v keys are set for copy/paste operations.

Copy & Paste

Use ctrl-c/ctrl-v for copying and pasting while in input mode.

Sorting/reversing the kernel modules

sort subcommand can be used for sorting the kernel modules by their names, sizes or dependent modules.

kmon sort --name
kmon sort --size
kmon sort --dependent

Sorting the kernel modules

Also the -r, --reverse flag is used for reversing the kernel module list.

kmon --reverse

Reversing the kernel modules

Customizing the colors

kmon uses the colors of the terminal as default but the highlighting color could be specified with -c, --color option. Alternatively, default text color can be set via -a, --accent-color option.

Supported colors

Supported terminal colors are black, red, green, yellow, blue, magenta, cyan, gray, darkgray, lightred, lightgreen, lightyellow, lightblue, lightmagenta, lightcyan, white.

kmon --color red

Supported Colors

Using a custom color

Provide a hexadecimal value for the color to use.

kmon --color 19683a

Using a custom color

Changing the accent color

Default text color might cause readability issues on some themes that have transparency. -a, --accent-color option can be used similarly to the -c, --color option for overcoming this issue.

kmon --color 6f849c --accent-color e35760

Changing the accent color

Unicode symbols

Use -u, --unicode flag for showing Unicode symbols for the block titles.

kmon --unicode

Unicode symbols

Setting the terminal tick rate

-t, --tickrate option can be used for setting the refresh interval of the terminal UI in milliseconds.

Setting the terminal tick rate

Roadmap

kmon aims to be a standard tool for Linux kernel management while supporting most of the Linux distributions.

Accessibility

For achieving this goal, kmon should be accessible from different package managers such as Snap* and RPM.

Dependencies

It is required to have the essential tools like dmesg and kmod on the system for kmon to work as expected. Thus the next step would be using just the system resources for these functions.

Features

Management actions about the Linux kernel should be applicable in kmon for minimizing the dependence on to command line and other tools.

Testing

kmon should be tested and reported on different architectures for further development and support.

Resources

About the project

Articles

In the media

Gallery

Fedora 31Debian 10Manjaro 19
kmon on fedorakmon on debiankmon on manjaro
Ubuntu 18.04openSUSEVoid Linux
kmon on ubuntukmon on opensusekmon on voidlinux

Download Details:
Author: orhun
Source Code: https://github.com/orhun/kmon
License: GPL-3.0 License

#rust 

Serde Rust: Serialization Framework for Rust

Serde

*Serde is a framework for serializing and deserializing Rust data structures efficiently and generically.*

You may be looking for:

Serde in action

Click to show Cargo.toml. Run this code in the playground.

[dependencies]

# The core APIs, including the Serialize and Deserialize traits. Always
# required when using Serde. The "derive" feature is only required when
# using #[derive(Serialize, Deserialize)] to make Serde work with structs
# and enums defined in your crate.
serde = { version = "1.0", features = ["derive"] }

# Each data format lives in its own crate; the sample code below uses JSON
# but you may be using a different one.
serde_json = "1.0"

 

use serde::{Serialize, Deserialize};

#[derive(Serialize, Deserialize, Debug)]
struct Point {
    x: i32,
    y: i32,
}

fn main() {
    let point = Point { x: 1, y: 2 };

    // Convert the Point to a JSON string.
    let serialized = serde_json::to_string(&point).unwrap();

    // Prints serialized = {"x":1,"y":2}
    println!("serialized = {}", serialized);

    // Convert the JSON string back to a Point.
    let deserialized: Point = serde_json::from_str(&serialized).unwrap();

    // Prints deserialized = Point { x: 1, y: 2 }
    println!("deserialized = {:?}", deserialized);
}

Getting help

Serde is one of the most widely used Rust libraries so any place that Rustaceans congregate will be able to help you out. For chat, consider trying the #rust-questions or #rust-beginners channels of the unofficial community Discord (invite: https://discord.gg/rust-lang-community), the #rust-usage or #beginners channels of the official Rust Project Discord (invite: https://discord.gg/rust-lang), or the #general stream in Zulip. For asynchronous, consider the [rust] tag on StackOverflow, the /r/rust subreddit which has a pinned weekly easy questions post, or the Rust Discourse forum. It's acceptable to file a support issue in this repo but they tend not to get as many eyes as any of the above and may get closed without a response after some time.

Download Details:
Author: serde-rs
Source Code: https://github.com/serde-rs/serde
License: View license

#rust  #rustlang 

Carmen  Grimes

Carmen Grimes

1598959140

How to Monitor Third Party API Integrations

Many enterprises and SaaS companies depend on a variety of external API integrations in order to build an awesome customer experience. Some integrations may outsource certain business functionality such as handling payments or search to companies like Stripe and Algolia. You may have integrated other partners which expand the functionality of your product offering, For example, if you want to add real-time alerts to an analytics tool, you might want to integrate the PagerDuty and Slack APIs into your application.

If you’re like most companies though, you’ll soon realize you’re integrating hundreds of different vendors and partners into your app. Any one of them could have performance or functional issues impacting your customer experience. Worst yet, the reliability of an integration may be less visible than your own APIs and backend. If the login functionality is broken, you’ll have many customers complaining they cannot log into your website. However, if your Slack integration is broken, only the customers who added Slack to their account will be impacted. On top of that, since the integration is asynchronous, your customers may not realize the integration is broken until after a few days when they haven’t received any alerts for some time.

How do you ensure your API integrations are reliable and high performing? After all, if you’re selling a feature real-time alerting, you’re alerts better well be real-time and have at least once guaranteed delivery. Dropping alerts because your Slack or PagerDuty integration is unacceptable from a customer experience perspective.

What to monitor

Latency

Specific API integrations that have an exceedingly high latency could be a signal that your integration is about to fail. Maybe your pagination scheme is incorrect or the vendor has not indexed your data in the best way for you to efficiently query.

Latency best practices

Average latency only tells you half the story. An API that consistently takes one second to complete is usually better than an API with high variance. For example if an API only takes 30 milliseconds on average, but 1 out of 10 API calls take up to five seconds, then you have high variance in your customer experience. This is makes it much harder to track down bugs and harder to handle in your customer experience. This is why 90th percentile and 95th percentiles are important to look at.

Reliability

Reliability is a key metric to monitor especially since your integrating APIs that you don’t have control over. What percent of API calls are failing? In order to track reliability, you should have a rigid definition on what constitutes a failure.

Reliability best practices

While any API call that has a response status code in the 4xx or 5xx family may be considered an error, you might have specific business cases where the API appears to successfully complete yet the API call should still be considered a failure. For example, a data API integration that returns no matches or no content consistently could be considered failing even though the status code is always 200 OK. Another API could be returning bogus or incomplete data. Data validation is critical for measuring where the data returned is correct and up to date.

Not every API provider and integration partner follows suggested status code mapping

Availability

While reliability is specific to errors and functional correctness, availability and uptime is a pure infrastructure metric that measures how often a service has an outage, even if temporary. Availability is usually measured as a percentage of uptime per year or number of 9’s.

AVAILABILITY %DOWNTIME PER YEARDOWNTIME PER MONTHDOWNTIME PER WEEKDOWNTIME PER DAY90% (“one nine”)36.53 days73.05 hours16.80 hours2.40 hours99% (“two nines”)3.65 days7.31 hours1.68 hours14.40 minutes99.9% (“three nines”)8.77 hours43.83 minutes10.08 minutes1.44 minutes99.99% (“four nines”)52.60 minutes4.38 minutes1.01 minutes8.64 seconds99.999% (“five nines”)5.26 minutes26.30 seconds6.05 seconds864.00 milliseconds99.9999% (“six nines”)31.56 seconds2.63 seconds604.80 milliseconds86.40 milliseconds99.99999% (“seven nines”)3.16 seconds262.98 milliseconds60.48 milliseconds8.64 milliseconds99.999999% (“eight nines”)315.58 milliseconds26.30 milliseconds6.05 milliseconds864.00 microseconds99.9999999% (“nine nines”)31.56 milliseconds2.63 milliseconds604.80 microseconds86.40 microseconds

Usage

Many API providers are priced on API usage. Even if the API is free, they most likely have some sort of rate limiting implemented on the API to ensure bad actors are not starving out good clients. This means tracking your API usage with each integration partner is critical to understand when your current usage is close to the plan limits or their rate limits.

Usage best practices

It’s recommended to tie usage back to your end-users even if the API integration is quite downstream from your customer experience. This enables measuring the direct ROI of specific integrations and finding trends. For example, let’s say your product is a CRM, and you are paying Clearbit $199 dollars a month to enrich up to 2,500 companies. That is a direct cost you have and is tied to your customer’s usage. If you have a free tier and they are using the most of your Clearbit quota, you may want to reconsider your pricing strategy. Potentially, Clearbit enrichment should be on the paid tiers only to reduce your own cost.

How to monitor API integrations

Monitoring API integrations seems like the correct remedy to stay on top of these issues. However, traditional Application Performance Monitoring (APM) tools like New Relic and AppDynamics focus more on monitoring the health of your own websites and infrastructure. This includes infrastructure metrics like memory usage and requests per minute along with application level health such as appdex scores and latency. Of course, if you’re consuming an API that’s running in someone else’s infrastructure, you can’t just ask your third-party providers to install an APM agent that you have access to. This means you need a way to monitor the third-party APIs indirectly or via some other instrumentation methodology.

#monitoring #api integration #api monitoring #monitoring and alerting #monitoring strategies #monitoring tools #api integrations #monitoring microservices

Hire Dedicated Linux Developer

Looking to develop real-time applications?

Hire Dedicated Linux Developer from HourlyDeveloper.io, we have dedicated developers who have vast experience in developing applications for Linux and UNIX operating systems and have in-depth knowledge of their processes, kernel tools, internal architectures, and development packages.

Consult with experts:- https://bit.ly/2ZQ5ySP

#hire linux dedicated developer #linux developer #linux development company #linux development services #linux development #linux developer

How To Activate Cash App Card - Online Activation

Cash App is a digital payment that permits users to send, receive or request cash online. Of course, you may first ought to install the Cash app on your mobile device, using Google Play or maybe the iTunes Store. Considering that the Cash App needs the use of a bank account, you may need to be over 18 years old to register. Cash App offers customers a free debit card, which matches like some other VISA card. If you’ve got a Cash App card, you don’t want to apply the mobile application, again and again, now swipe your card at pay at retail shops everywhere in the USA.

When you receive your cash app debit card, it’d be a defaulted card and you’ll now no longer be capable of using it immediately. As a result, you need to comply with a few steps to How To Activate Cash App Card. However, to make use of this card, it’s far obligatory to complete the Cash App card activation method. The card activation technique isn’t always very complicated. It may be executed with the assist of some easy steps. There are too many simple methods to activate a Cash App card—the cardboard activation with QR code and without it. Users also can do it via means of calling the Cash App phone number.

In case you are still facing cash app card activation issues, then you definitely have to touch the Cash App customer support. To activate Cash App card, you want to take those steps:

  • Open the Cash App on your device.
  • Click at the Cash card icon.
  • Then pick out the choice of activating a Cash App card.
  • Use your mobile camera for scanning the QR code.
  • Once you do it efficiently your cash card is prepared to apply

Also Read: Cash App Login || Cash App Customer Service || Cash App Direct Deposit

What are the limitations of a Cash Card?

The cash app has withdrawal limits much like all different ATM cards. Customers have the freedom to withdraw up to $250 in step with transaction and $1250 withinside the time-frame of 30 days. Besides this, you are not allowed to withdraw over $1,000 in 24 hours and $1,000 in a week. Cash App Direct Deposit, if you get in trouble at the same time as using a Cash card and want help associated with the same, you could always communicate to the executives who’re usually there to guide you. Feel free to touch the team whenever via the Cash App Phone Number that is always practical to guide you about How to activate cash app card. Whenever you’re in hassle, you could always method them to fix all of your problems withinside the nick of time.inheritor username.

Cash App introduced a new Cash App card for its users and if you want to activate it, a person desires to follow some steps on their devices both Mac or android. The great perk of activating a Cash app card is you don’t need to preserve cash with you. All features are just like popular bank accounts, such as debit cards, access to transactions, and many different features. The most crucial part about a Cash App is that you want to pay high-priced fees as service charges; the expenses charged through them are so low and inexpensive. Activate Cash App card and you could withdraw your desired amount directly out of your Cash App account through going to a standard ATM.

If you’re new to Cash App and want guidance on how to use it, you could usually talk to the team members through contacting them on the Cash App Toll Free Number that is active round the clock. Connect with the team every time to talk about your issue and clear up all queries in no time. The team tells each and each answer in detail in order that the user does now no longer face any error at the same time as executing them. Talk to the team and let them recognize your errors.

#how to activate cash app card #activate cash app card #cash app card activation #activate replacement cash app card #cash app activation number #cash card activation help