Elkodon - true zero-copy inter-process-communication in rust

Overview

Benchmarks Best Practices Changelog Contributing Examples FAQ License Roadmap

elkodon - Zero-Copy Lock-Free IPC Purely Written In Rust

  1. Introduction
  2. Performance
  3. Getting Started
    1. Publish Subscribe
    2. Events
    3. Custom Configuration
  4. Supported Platforms
  5. Language Bindings
  6. Thanks To All Contributors

Introduction

Welcome to Elkodon, the efficient, and ultra-low latency inter-process communication middleware. This library is designed to provide you with fast and reliable zero-copy and lock-free inter-process communication mechanisms.

Elkodon is all about providing a seamless experience for inter-process communication, featuring versatile messaging patterns. Whether you're diving into publish-subscribe, events, or the promise of upcoming features like request-response, pipelines, and blackboard, Elkodon has you covered.

One of the features of Elkodon is its consistently low transmission latency regardless of payload size, ensuring a predictable and reliable communication experience.

Elkodon's origins can be traced back to iceoryx. By overcoming past technical debts and refining the architecture, Elkodon enables the modularity we've always desired.

In the near future, Elkodon is poised to support at least the same feature set and platforms as iceoryx, ensuring a seamless transition and offering enhanced capabilities for your inter-process communication needs. So, if you're looking for lightning-fast, cross-platform communication that doesn't compromise on performance or modularity, Elkodon is your answer.

Performance

gantt
    title Latency (in ns) - 64b payload
    dateFormat X
    axisFormat %s

    section elkodon
    240 : 0, 240
    section iceoryx
    1000 : 0, 1000
    section MQueue
    700 : 0, 700
    section UDS
    1500 : 0, 1500
gantt
    title Latency (in ns) - 64kb payload
    dateFormat X
    axisFormat %s

    section elkodon
    240 : 0, 240
    section iceoryx
    1000 : 0, 1000
    section MQueue
    14000 : 0, 14000
    section UDS
    23000 : 0, 23000

Benchmark-System

  • CPU: Intel(R) Core(TM) i7-10875H CPU @ 2.30GHz
  • OS: Linux 6.5.9-arch2-1 #1 SMP PREEMPT_DYNAMIC GNU/Linux
  • Compiler:
    • rustc 1.72.1
    • gcc 13.2.1 20230801

Getting Started

Publish Subscribe

This minimal example showcases a publisher sending the number 1234 every second, while a subscriber efficiently receives and prints the data.

publisher.rs

use elkodon::prelude::*;
use elkodon_bb_posix::signal::SignalHandler;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let service_name = ServiceName::new(b"My/Funk/ServiceName")?;

    let service = zero_copy::Service::new(&service_name)
        .publish_subscribe()
        .open_or_create::<usize>()?;

    let publisher = service.publisher().create()?;

    while !SignalHandler::termination_requested() {
        let sample = publisher.loan_uninit()?;
        let sample = sample.write_payload(1234);
        publisher.send(sample)?;

        std::thread::sleep(std::time::Duration::from_secs(1));
    }

    Ok(())
}

subscriber.rs

use elkodon::prelude::*;
use elkodon_bb_posix::signal::SignalHandler;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let service_name = ServiceName::new(b"My/Funk/ServiceName")?;

    let service = zero_copy::Service::new(&service_name)
        .publish_subscribe()
        .open_or_create::<usize>()?;

    let subscriber = service.subscriber().create()?;

    while !SignalHandler::termination_requested() {
        while let Some(sample) = subscriber.receive()? {
            println!("received: {:?}", *sample);
        }

        std::thread::sleep(std::time::Duration::from_secs(1));
    }

    Ok(())
}

This example is a simplified version of the publish-subscribe example. You can execute it by opening two terminals and calling:

Terminal 1:

cargo run --example publish_subscribe_publisher

Terminal 2:

cargo run --example publish_subscribe_subscriber

Events

This minimal example showcases an event notification between two processes.

notifier.rs

use elkodon::prelude::*;
use elkodon_bb_posix::signal::SignalHandler;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let event_name = ServiceName::new(b"MyEventName")?;

    let event = zero_copy::Service::new(&event_name)
        .event()
        .open_or_create()?;

    let notifier = event.notifier().create()?;

    let mut counter: u64 = 0;
    while !SignalHandler::termination_requested() {
        counter += 1;
        notifier.notify_with_custom_event_id(EventId::new(counter))?;

        println!("Trigger event with id {} ...", counter);
        std::thread::sleep(std::time::Duration::from_secs(1));
    }

    Ok(())
}

listener.rs

use elkodon::prelude::*;
use elkodon_bb_posix::signal::SignalHandler;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let event_name = ServiceName::new(b"MyEventName")?;

    let event = zero_copy::Service::new(&event_name)
        .event()
        .open_or_create()?;

    let mut listener = event.listener().create()?;

    while !SignalHandler::termination_requested() {
        for event_id in listener.timed_wait(std::time::Duration::from_secs(1))? {
            println!("event was triggered with id: {:?}", event_id);
        }
    }

    Ok(())
}

This example is a simplified version of the event example. You can execute it by opening two terminals and calling:

Terminal 1:

cargo run --example event_notifier

Terminal 2:

cargo run --example event_listener

Custom Configuration

It is possible to configure default quality of service settings, paths and file suffixes in a custom configuration file. For more details visit the configuration directory.

Supported Platforms

The support levels can be adjusted when required.

Operating System State Current Support Level Target Support Level
Android planned - tier 1
FreeBSD done tier 2 tier 1
FreeRTOS planned - tier 2
iOS planned - tier 2
Linux (x86_64) done tier 2 tier 1
Linux (aarch64) done tier 2 tier 1
Linux (32-bit) in-progress tier 3 tier 1
Mac OS in-progress tier 3 tier 2
QNX planned - tier 1
WatchOS planned - tier 2
Windows done tier 2 tier 2
  • tier 1 - All safety and security features are working.
  • tier 2 - Works with a restricted security and safety feature set.
  • tier 3 - Work in progress. Might compile and run or not.

Language Bindings

Language State
C / C++ planned
Lua planned
Python planned
Zig planned

Thanks To All Contributors

Christian »elfenpiff« Eltzschig
Christian »elfenpiff« Eltzschig
Mathias »elBoberido« Kraus
Mathias »elBoberido« Kraus
Comments
  • No `assert`s in threads of tests

    No `assert`s in threads of tests

    Required information

    If a thread in a test encounters an assert and suddenly terminates, it is possible that some succeeding variables, required for terminating the whole tests, are not being set. Therefore, either avoid asserts in tests or use it only if it occurs not before such a test flow control variable.

    bug 
    opened by elfenpiff 3
  • Change license to MPL

    Change license to MPL

    Hi, the code looks promising. However, it is now licensed as GPL. Would it be possible to change the license to MPL?

    I think MPL would allow wide adoption while still ensuring contributions come back to the main source. Thank you for considering.

    enhancement 
    opened by hydroid7 2
  • elk-#47 Distinguish between 'loan' and 'loan_uninit' for 'Publisher'

    elk-#47 Distinguish between 'loan' and 'loan_uninit' for 'Publisher'

    Notes for Reviewer

    This PR renames loan to loan_uninit and introduces a loan method with Default trait bounds.

    The documentation is updated to use write_payload where appropriate which make it possible to use elkodon zero-copy API without unsafe.

    Pre-Review Checklist for the PR Author

    1. [x] Add sensible notes for the reviewer
    2. [x] PR title is short, expressive and meaningful
    3. [x] Relevant issues are linked
    4. [x] Every source code file has the SPDX header SPDX-License-Identifier: $(LICENSE_CODE)
    5. [x] Branch follows the naming format (elk-123-introduce-posix-ipc-example)
    6. [x] Commits messages are according to this guideline
      • [x] Commit messages have the issue ID ([#123] Add posix ipc example)
      • [x] Commit author matches Eclipse Contributor Agreement (and ECA is signed)
    7. [x] Tests follow the best practice for testing
    8. [x] Changelog updated in the unreleased section including API breaking changes
    9. [x] Assign PR to reviewer
    10. [x] All checks have passed (except task-list-completed)

    Checklist for the PR Reviewer

    • [x] Commits are properly organized and messages are according to the guideline
    • [x] Unit tests have been written for new behavior
    • [x] Public API is documented
    • [x] PR title describes the changes

    Post-review Checklist for the PR Author

    1. [x] All open points are addressed and tracked via issues

    References

    Use either 'Closes #123' or 'Relates to #123' to reference the corresponding issue.

    Closes #47

    opened by elBoberido 1
  • [#3] Fix flaky signal tests

    [#3] Fix flaky signal tests

    Notes for Reviewer

    The signal tests, sporadically fails on archlinux and aarch64. This PR tries to fix this.

    Pre-Review Checklist for the PR Author

    1. [x] Add sensible notes for the reviewer
    2. [x] PR title is short, expressive and meaningful
    3. [x] Relevant issues are linked
    4. [x] Every source code file has the SPDX header SPDX-License-Identifier: $(LICENSE_CODE)
    5. [x] Branch follows the naming format (elk-123-introduce-posix-ipc-example)
    6. [x] Commits messages are according to this guideline
      • [x] Commit messages have the issue ID ([#123] Add posix ipc example)
      • [x] Commit author matches Eclipse Contributor Agreement (and ECA is signed)
    7. [x] Tests follow the best practice for testing
    8. [x] Changelog updated in the unreleased section including API breaking changes
    9. [x] Assign PR to reviewer
    10. [x] All checks have passed (except task-list-completed)

    Checklist for the PR Reviewer

    • [x] Commits are properly organized and messages are according to the guideline
    • [x] Unit tests have been written for new behavior
    • [x] Public API is documented
    • [x] PR title describes the changes

    Post-review Checklist for the PR Author

    1. [ ] All open points are addressed and tracked via issues

    References

    Use either 'Closes #123' or 'Relates to #123' to reference the corresponding issue.

    Relates to #3

    opened by elfenpiff 1
  • elk-#47 Introduce maybe uninit for publisher and sample mut

    elk-#47 Introduce maybe uninit for publisher and sample mut

    Notes for Reviewer

    This PR introduces a RawSample/RawSampleMut as a drop in replacement for NonNull with additional methods to reduce the unsafe code. Additionally, MaybeUninit is used to prevent publishing uninitialized samples.

    Pre-Review Checklist for the PR Author

    1. [x] Add sensible notes for the reviewer
    2. [x] PR title is short, expressive and meaningful
    3. [x] Relevant issues are linked
    4. [x] Every source code file has the SPDX header SPDX-License-Identifier: $(LICENSE_CODE)
    5. [x] Branch follows the naming format (elk-123-introduce-posix-ipc-example)
    6. [x] Commits messages are according to this guideline
      • [x] Commit messages have the issue ID ([#123] Add posix ipc example)
      • [x] Commit author matches Eclipse Contributor Agreement (and ECA is signed)
    7. [x] Tests follow the best practice for testing
    8. [x] Changelog updated in the unreleased section including API breaking changes
    9. [x] Assign PR to reviewer
    10. [x] All checks have passed (except task-list-completed)

    Checklist for the PR Reviewer

    • [x] Commits are properly organized and messages are according to the guideline
    • [x] Unit tests have been written for new behavior
    • [x] Public API is documented
    • [x] PR title describes the changes

    Post-review Checklist for the PR Author

    1. [x] All open points are addressed and tracked via issues

    References

    Use either 'Closes #123' or 'Relates to #123' to reference the corresponding issue.

    Relates to #47

    opened by elBoberido 1
  • elk-#3 document public api

    elk-#3 document public api

    Notes for Reviewer

    • Documents the full public API of elkodon
    • renamed global_config.rs into config.rs
    • make static_config and dynamic_config available through the pub-subs and events port factory.

    Pre-Review Checklist for the PR Author

    1. [x] Add sensible notes for the reviewer
    2. [x] PR title is short, expressive and meaningful
    3. [x] Relevant issues are linked
    4. [x] Every source code file has the SPDX header SPDX-License-Identifier: $(LICENSE_CODE)
    5. [x] Branch follows the naming format (elk-123-introduce-posix-ipc-example)
    6. [x] Commits messages are according to this guideline
      • [x] Commit messages have the issue ID ([#123] Add posix ipc example)
      • [x] Commit author matches Eclipse Contributor Agreement (and ECA is signed)
    7. [x] Tests follow the best practice for testing
    8. [x] Changelog updated in the unreleased section including API breaking changes
    9. [x] Assign PR to reviewer
    10. [x] All checks have passed (except task-list-completed)

    Checklist for the PR Reviewer

    • [x] Commits are properly organized and messages are according to the guideline
    • [x] Unit tests have been written for new behavior
    • [x] Public API is documented
    • [x] PR title describes the changes

    Post-review Checklist for the PR Author

    1. [x] All open points are addressed and tracked via issues

    References

    Use either 'Closes #123' or 'Relates to #123' to reference the corresponding issue.

    Relates to #3

    opened by elfenpiff 1
  • elk-#8 Setup code coverage

    elk-#8 Setup code coverage

    Notes for Reviewer

    This PR adds a CI job to upload the coverage results to codecov.

    Pre-Review Checklist for the PR Author

    1. [x] Add sensible notes for the reviewer
    2. [x] PR title is short, expressive and meaningful
    3. [x] Relevant issues are linked
    4. [x] Every source code file has the SPDX header SPDX-License-Identifier: $(LICENSE_CODE)
    5. [x] Branch follows the naming format (elk-123-introduce-posix-ipc-example)
    6. [x] Commits messages are according to this guideline
      • [x] Commit messages have the issue ID ([#123] Add posix ipc example)
      • [x] Commit author matches Eclipse Contributor Agreement (and ECA is signed)
    7. [x] Tests follow the best practice for testing
    8. [x] Changelog updated in the unreleased section including API breaking changes
    9. [x] Assign PR to reviewer
    10. [x] All checks have passed (except task-list-completed)

    Checklist for the PR Reviewer

    • [x] Commits are properly organized and messages are according to the guideline
    • [x] Unit tests have been written for new behavior
    • [x] Public API is documented
    • [x] PR title describes the changes

    Post-review Checklist for the PR Author

    1. [x] All open points are addressed and tracked via issues

    References

    Use either 'Closes #123' or 'Relates to #123' to reference the corresponding issue.

    Relates to #8

    opened by elBoberido 1
  • Soundness Bug: It is possible to publish uninitialized data without 'unsafe'

    Soundness Bug: It is possible to publish uninitialized data without 'unsafe'

    Required information

    Observed result or behaviour: It is possible to loan a sample and immediately publish it without initializing the data.

    Expected result or behaviour: With safe Rust this should not compile.

    Conditions where it occurred / Performed steps: Compile this code

    let sample = publisher.loan()?;
    publisher.send(sample)?;
    

    Proposal

    I think we can borrow some code from iceoryx-rs and let the API for uninitialized samples return a SampleMut<MaybeUninit<T>> instead of a SampleMut<T>. The user would have to call the unsafe assume_init method in order to get a SampleMut<T> to be able to publish the sample.

    This is the iceoryx-rs API for uninitialized samples

    let mut sample = publisher.loan_uninit()?;
    let sample = unsafe {
        (*sample.as_mut_ptr()).counter = counter;
        sample.assume_init()
    };
    publisher.publish(sample);
    

    This would lead to a compile time error

    let sample = publisher.loan_uninit()?;
    publisher.publish(sample);
    
    bug 
    opened by elBoberido 0
  • elk-#8 Impl error trait for user facing errors

    elk-#8 Impl error trait for user facing errors

    Notes for Reviewer

    This PR implements the Error trait for user facing errors.

    Pre-Review Checklist for the PR Author

    1. [x] Add sensible notes for the reviewer
    2. [x] PR title is short, expressive and meaningful
    3. [x] Relevant issues are linked
    4. [x] Every source code file has the SPDX header SPDX-License-Identifier: $(LICENSE_CODE)
    5. [x] Branch follows the naming format (elk-123-introduce-posix-ipc-example)
    6. [x] Commits messages are according to this guideline
      • [x] Commit messages have the issue ID ([#123] Add posix ipc example)
      • [x] Commit author matches Eclipse Contributor Agreement (and ECA is signed)
    7. [x] Tests follow the best practice for testing
    8. [x] Changelog updated in the unreleased section including API breaking changes
    9. [x] Assign PR to reviewer
    10. [x] All checks have passed (except task-list-completed)

    Checklist for the PR Reviewer

    • [x] Commits are properly organized and messages are according to the guideline
    • [x] Unit tests have been written for new behavior
    • [x] Public API is documented
    • [x] PR title describes the changes

    Post-review Checklist for the PR Author

    1. [x] All open points are addressed and tracked via issues

    References

    Use either 'Closes #123' or 'Relates to #123' to reference the corresponding issue.

    Relates to #3 Relates to #8

    opened by elBoberido 0
  • elk-#3 No license check for TOML files

    elk-#3 No license check for TOML files

    Notes for Reviewer

    This PR disables the checks for a license at TOML files. Those are usually config files and can freely be copied

    Pre-Review Checklist for the PR Author

    1. [x] Add sensible notes for the reviewer
    2. [x] PR title is short, expressive and meaningful
    3. [x] Relevant issues are linked
    4. [x] Every source code file has the SPDX header SPDX-License-Identifier: $(LICENSE_CODE)
    5. [x] Branch follows the naming format (elk-123-introduce-posix-ipc-example)
    6. [x] Commits messages are according to this guideline
      • [x] Commit messages have the issue ID ([#123] Add posix ipc example)
      • [x] Commit author matches Eclipse Contributor Agreement (and ECA is signed)
    7. [x] Tests follow the best practice for testing
    8. [x] Changelog updated in the unreleased section including API breaking changes
    9. [x] Assign PR to reviewer
    10. [x] All checks have passed (except task-list-completed)

    Checklist for the PR Reviewer

    • [x] Commits are properly organized and messages are according to the guideline
    • [x] Unit tests have been written for new behavior
    • [x] Public API is documented
    • [x] PR title describes the changes

    Post-review Checklist for the PR Author

    1. [x] All open points are addressed and tracked via issues

    References

    Use either 'Closes #123' or 'Relates to #123' to reference the corresponding issue.

    Relates to #3

    opened by elBoberido 0
  • elk-3 fix ci tests

    elk-3 fix ci tests

    Notes for Reviewer

    Pre-Review Checklist for the PR Author

    1. [x] Add sensible notes for the reviewer
    2. [x] PR title is short, expressive and meaningful
    3. [x] Relevant issues are linked
    4. [x] Every source code file has the SPDX header SPDX-License-Identifier: $(LICENSE_CODE)
    5. [x] Branch follows the naming format (elk-123-introduce-posix-ipc-example)
    6. [x] Commits messages are according to this guideline
      • [x] Commit messages have the issue ID ([#123] Add posix ipc example)
      • [x] Commit author matches Eclipse Contributor Agreement (and ECA is signed)
    7. [x] Tests follow the best practice for testing
    8. [x] Changelog updated in the unreleased section including API breaking changes
    9. [x] Assign PR to reviewer
    10. [x] All checks have passed (except task-list-completed)

    Checklist for the PR Reviewer

    • [x] Commits are properly organized and messages are according to the guideline
    • [x] Unit tests have been written for new behavior
    • [x] Public API is documented
    • [x] PR title describes the changes

    Post-review Checklist for the PR Author

    1. [x] All open points are addressed and tracked via issues

    References

    Use either 'Closes #123' or 'Relates to #123' to reference the corresponding issue.

    Relates to #3

    opened by elfenpiff 0
  • Cleanup tool/internal service for resources of crashed applications

    Cleanup tool/internal service for resources of crashed applications

    Brief feature description

    When an application crashes, it can happen that a service is only partially removed and becomes unusable. An internal service and/or a command line application shall cleanup the remainders of such services.

    The following use cases shall be considered:

    • remove static service info, when only the dynamic service info exists
    • remove dynamic service info, when only the static service info exists
    • remove the data segment of a publisher if the owning process no longer exists
    • remove the publisher/subscriber as participant from the dynamic service info when the owning process no longer exists.
    opened by elfenpiff 2
  • elk-3 add log and tracing logger

    elk-3 add log and tracing logger

    Notes for Reviewer

    Pre-Review Checklist for the PR Author

    1. [x] Add sensible notes for the reviewer
    2. [x] PR title is short, expressive and meaningful
    3. [x] Relevant issues are linked
    4. [x] Every source code file has the SPDX header SPDX-License-Identifier: $(LICENSE_CODE)
    5. [x] Branch follows the naming format (elk-123-introduce-posix-ipc-example)
    6. [x] Commits messages are according to this guideline
      • [x] Commit messages have the issue ID ([#123] Add posix ipc example)
      • [x] Commit author matches Eclipse Contributor Agreement (and ECA is signed)
    7. [x] Tests follow the best practice for testing
    8. [x] Changelog updated in the unreleased section including API breaking changes
    9. [x] Assign PR to reviewer
    10. [x] All checks have passed (except task-list-completed)

    Checklist for the PR Reviewer

    • [ ] Commits are properly organized and messages are according to the guideline
    • [ ] Unit tests have been written for new behavior
    • [ ] Public API is documented
    • [ ] PR title describes the changes

    Post-review Checklist for the PR Author

    1. [ ] All open points are addressed and tracked via issues

    References

    Use either 'Closes #123' or 'Relates to #123' to reference the corresponding issue.

    Relates to #3

    opened by elfenpiff 1
  • Make multithreaded tests with asserts more robust

    Make multithreaded tests with asserts more robust

    Brief feature description

    From https://github.com/elkodon/elkodon/issues/25#issuecomment-1793128951

    ========

    @elfenpiff I found this https://stackoverflow.com/questions/35988775/how-can-i-cause-a-panic-on-a-thread-to-immediately-end-the-main-thread/36031130#36031130

    The following code would terminate the whole test when an assert in a thread fails. It can also be placed in a function which could be called at the start of a test

    let orig_hook = panic::take_hook();
    panic::set_hook(Box::new(move |panic_info| {
        // invoke the default handler and exit the process
        orig_hook(panic_info);
        process::exit(1);
    }));
    

    ========

    enhancement 
    opened by elBoberido 0
  • Provide `log` and `tracing` support as log sink

    Provide `log` and `tracing` support as log sink

    Brief feature description

    Currently, the elkodon logger uses its own log backend as default. To allow it to integrate seamlessly into other frameworks, the major log frameworks log and tracing shall be supported via feature flags.

    ToDo

    • [ ] Implement log and tracing sinks
    • [ ] Document feature flags in the README.md
    • [ ] Document feature flags in elkodon/lib.rs
    opened by elfenpiff 0
  • Subscriber shall be able to reduce its buffer size

    Subscriber shall be able to reduce its buffer size

    Brief feature description

    A pub-sub service has the ability to define a max buffer size for a subscriber but the subscriber is unable to reduce its buffer size - every subscriber has the same buffer size.

    So we need to introduce a setting in the subscriber port factory to set a custom buffer size.

    opened by elfenpiff 0
  • Implement display for port factory for all messaging patterns

    Implement display for port factory for all messaging patterns

    (Code) Example Of Cumbersome API

    If one would like to print a state overview of a service it would be nice if the port_factory::{event|publish_subscribe|...} would have implemented Display to show the overview from the example.

    enhancement good first issue 
    opened by elfenpiff 3
Owner
null
Eclipse iceoryx2™ - true zero-copy inter-process-communication in pure Rust

iceoryx2 - Zero-Copy Lock-Free IPC Purely Written In Rust Introduction Performance Getting Started Publish Subscribe Events Custom Configuration Suppo

null 136 Jan 1, 2024
The true next-gen L7 minecraft proxy and load balancer. Built in Rust.

Lure The true next-gen L7 minecraft proxy and load balancer. Built in Rust, Tokio and Valence. Why? Rust is a powerful programming language and a grea

Sammwy 67 Apr 16, 2023
A simple configuration-based module for inter-network RPC in Holochain hApps.

DNA Auth Resolver A simple configuration-based module for inter-network RPC in Holochain hApps. About Usage In the origin zome In the destination DNA

Shadman Baig 0 Feb 4, 2022
Altruistic Angelshark is a project devoted to making Communication Manager (ACM) automation easier.

This project makes automating over one or more Communication Managers easier via OSSI over SSH.

ADP, LLC. 3 Feb 13, 2022
Druid Exporter plays a fundamental role as a receiver of metrics events coming from Druid clusters, adopting the HTTP format as a means of communication

Druid Exporter plays a fundamental role as a receiver of metrics events coming from Druid clusters, adopting the HTTP format as a means of communication. In addition to this capability, its primary function is to export these metrics to Prometheus, thus allowing the creation of meaningful graphs and visualizations.

Kiwfy 3 Sep 21, 2023
Druid Exporter plays a fundamental role as a receiver of metrics events coming from Druid clusters, adopting the HTTP format as a means of communication.

Druid Exporter plays a fundamental role as a receiver of metrics events coming from Druid clusters, adopting the HTTP format as a means of communication. In addition to this capability, its primary function is to export these metrics to Prometheus, thus allowing the creation of meaningful graphs and visualizations.

Not Empty Free Software Foundation 5 Oct 24, 2023
A copy of ziad87 "very stupid thing" (rip). Now in v2: Electric Boogaloo

IPv6-Place-v2 A re-implementation of ziad87's awesome "Place: IPv6" site. Written in Rust with Axum using Server-Sent-Events for the fun instead of WS

Server Scanning Inc. 4 Jun 6, 2023
⏱ Cross-platform Prometheus style process metrics collector of metrics crate

⏱ metrics-process This crate provides Prometheus style process metrics collector of metrics crate for Linux, macOS, and Windows. Collector code is man

Alisue 12 Dec 16, 2022
DHCP Server programmed in rust with zero dependencies and unsafe.

RustyDHCP A simple and zero-dependency DHCP server written in Rust, with credit to Richard Warburton for contributions to parts of the code. Features

null 53 Nov 6, 2023
Drop-in proxy for Discord gateway connections and sessions allowing for zero downtime deploys

gateway-proxy This is a very hacky project, so it might stop working if Discord changes their API core. This is unlikely, but keep that in mind while

Jens Reidel 39 Nov 26, 2022
Zero-Trust Decentralized Package Network

Zero-Trust Decentralized Package Network Current Development Phase ?? We are looking for your feedback! This project is currently in the "sandbox" ??️

Pyrsia 240 Jan 3, 2023
Grow Rust is a Growtopia Private Server made in Rust

Grow Rust is a Growtopia Private Server made in Rust

null 14 Dec 7, 2022
Multiplex server for rust-analyzer, allows multiple LSP clients (editor windows) to share a single rust-analyzer instance per cargo workspace

ra-multiplex   Multiplex server for rust-analyzer, allows multiple LSP clients (editor windows) to share a single rust-analyzer instance per cargo wor

max 95 Dec 29, 2022
DNS Server written in Rust for fun, see https://dev.to/xfbs/writing-a-dns-server-in-rust-1gpn

DNS Fun Ever wondered how you can write a DNS server in Rust? No? Well, too bad, I'm telling you anyways. But don't worry, this is going to be a fun o

Patrick Elsen 26 Jan 13, 2023
Rust crate for configurable parallel web crawling, designed to crawl for content

url-crawler A configurable parallel web crawler, designed to crawl a website for content. Changelog Docs.rs Example extern crate url_crawler; use std:

Pop!_OS 56 Aug 22, 2021
Rust crate for scraping URLs from HTML pages

url-scraper Rust crate for scraping URLs from HTML pages. Example extern crate url_scraper; use url_scraper::UrlScraper; fn main() { let director

Pop!_OS 35 Aug 18, 2022
FTP client for Rust

rust-ftp FTP client for Rust Documentation rust-ftp Installation Usage License Contribution Development environment Installation FTPS support is achie

Matt McCoy 155 Nov 12, 2022
The gRPC library for Rust built on C Core library and futures

gRPC-rs gRPC-rs is a Rust wrapper of gRPC Core. gRPC is a high performance, open source universal RPC framework that puts mobile and HTTP/2 first. Sta

TiKV Project 1.6k Jan 7, 2023
A library to work with CIDRs in rust

ipnetwork This is a library to work with IPv4 and IPv6 CIDRs in Rust Run Clippy by doing rustup component add clippy cargo clippy Installation This c

Abhishek Chanda 98 Dec 12, 2022