Coder Social home page Coder Social logo

chariott's Introduction

Project Eclipse Chariott

CI Status

  • Rust CI
  • E2E CI
  • Security Audit

What is Chariott?

Chariott is a gRPC service that provides a common interface for interacting with applications. Applications communicate between each other through Chariott. Chariott provides the necessary services to enable application lifecycle management and communication between applications. This is done by having applications register an intent which Chariott will then fulfil by brokering the communication with the appropriate application to fulfil that intent. Applications which fulfil these intents are known as providers. More information on Chariott design with diagrams can be found here.

How to develop with Chariott

Chariott provides gRPC interfaces to interact from a client application. The client application can be written in any language that supports gRPC. The examples in this repository are written in Rust, but the same concepts apply to any language.

Terminology

Term Description
Application As application we describe a client that is interacting with Chariott to lookup providers and interact with them through Chariott using intents
Provider A provider is also an application and in addition registers namespaces with intents that it supports to the Chariott endpoints that other applications can use through Chariott

Concept of Intents

Intents are the main way to interact with Chariott. Once a provider registers an intent with Chariott, other applications can use that intent to interact with the provider. The intent is a gRPC method that is defined in the provider's protobuf definition. That definition is only used by Chariott itself.

Chariott also provides a gRPC interface for applications to interact with providers and delegates the calls based on the intent to the provider transparently. Therefore, clients don't need to know the location and details of the provider as long as their intent is fulfilled.

Here is a list of the current supported intents:

Intent Description
Discover Retrieve native interfaces of providers. This comes in handy if you need specific interaction with a provider that you know is available in the system and you don't want to use Chariott to interact with it. This is also used for retrieving the streaming endpoints of a provider.
Inspect Support inspection of functionality, properties and events using a simple query syntax.
Invoke Invoke a method on a provider.
Subscribe Subscribe to events of a provider. Note that this does not open the streaming channel, this is done through the native streaming endpoint of the provider.
Read Read a property of a provider.
Write Write a property to a provider.

More information can be found in the protobuf definitions in ./proto.

There is a separate document that describes the example applications and scenarios that are supported by Chariott. It can be found here.

Requirements

The current source is developed and tested under WSL2/Linux running Ubuntu 20.04 on AMD64 architecture. It is not tested against any other configurations. You might experience missing support for other platforms, but please feel free to contribute to close the gaps.

Getting started

Dev Container

For development and running the examples, we recommend using the Devcontainer template provided at .devcontainer/devcontainer.json. If you decide not to use the Devcontainer, refer to the devcontainer.json for a list of the plugins/tools we use.

Note: If you use Devcontainers and you are running on Windows, make sure to check out the repository on the WSL2 file system in the target distribution you're using.

Build all binaries and run tests

cargo build --workspace
cargo test --workspace

Using Podman instead of Docker

If you want to use Podman you have to enable Podman in Visual Studio Code and update the .devcontainer/devcontainer.json file with the following additions:

{
  // ...
  "runArgs": [
    "--cap-add=SYS_PTRACE",
    "--security-opt",
    "seccomp=unconfined",
    "--userns=keep-id"
  ],
  // ...
  "workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind,Z",
  "workspaceFolder": "/workspace",
  "containerUser": "vscode",
  // ...
}

NOTE: Feel free to use another workspace folder name.

How to run the examples and interact with Chariott

As Chariott's out of the box communication protocol is gRPC, the interaction with the examples is done through gRPC. To illustrate how to invoke the gRPC methods we use the grpcurl command line tool with the example application kv-app. The kv-app is a key-value store that can be used to store and read state. The state is stored in memory and is not persisted. It also demonstrates the use of the ess and keyvalue crates.

This walkthrough is described in the examples kv-app README.

How to run the dog mode demo

To run the dog mode demo, please refer to the dog mode demo.

Trademarks

This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft's Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies.

chariott's People

Contributors

atifaziz avatar bastbu avatar daniellueddecke avatar dariuszparys avatar dependabot[bot] avatar devkelley avatar fprezado avatar github-actions[bot] avatar ladatz avatar p-schuler avatar stepknees avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.