From e36eceb7bba76f0d089d4ffbf20d44d638cce7fb Mon Sep 17 00:00:00 2001 From: jlanson Date: Tue, 17 Dec 2024 10:16:51 -0500 Subject: [PATCH 1/2] chore(docs): developer docs on plugin system communication Signed-off-by: jlanson --- site/content/docs/contributing/_index.md | 4 + .../contributing/developer-docs/_index.md | 21 ++ .../developer-docs/architecture.md | 56 +++++ .../developer-docs/plugin-query-system.md | 202 ++++++++++++++++++ .../assets/developer_docs_plugin_grpc.drawio | 1 + .../images/developer_docs_plugin_grpc.png | Bin 0 -> 110185 bytes site/templates/shortcodes/image.html | 2 + 7 files changed, 286 insertions(+) create mode 100644 site/content/docs/contributing/developer-docs/_index.md create mode 100644 site/content/docs/contributing/developer-docs/architecture.md create mode 100644 site/content/docs/contributing/developer-docs/plugin-query-system.md create mode 100755 site/static/assets/developer_docs_plugin_grpc.drawio create mode 100755 site/static/images/developer_docs_plugin_grpc.png create mode 100644 site/templates/shortcodes/image.html diff --git a/site/content/docs/contributing/_index.md b/site/content/docs/contributing/_index.md index d76135bd..8f721195 100644 --- a/site/content/docs/contributing/_index.md +++ b/site/content/docs/contributing/_index.md @@ -30,4 +30,8 @@ A walkthrough of running Hipcheck for the first time. A walkthrough of running Hipcheck for the first time. {% end %} +{% waypoint(title="Developer Docs", path="@/docs/contributing/developer-docs/_index.md") %} +Documentation for Hipcheck developers. +{% end %} + diff --git a/site/content/docs/contributing/developer-docs/_index.md b/site/content/docs/contributing/developer-docs/_index.md new file mode 100644 index 00000000..e381d3fe --- /dev/null +++ b/site/content/docs/contributing/developer-docs/_index.md @@ -0,0 +1,21 @@ +--- +title: Developer Docs +template: docs.html +sort_by: weight +page_template: docs_page.html +weight: 3 +--- + +# Hipcheck Developer Docs + +
+ +{% waypoint(title="Architecture", path="@/docs/contributing/developer-docs/architecture.md") %} +Hipcheck's distributed architecture and how plugins get started. +{% end %} + +{% waypoint(title="Query System", path="@/docs/contributing/developer-docs/plugin-query-system.md") %} +The life of a plugin query from inception, through gRPC, to SDK, and back. +{% end %} + +
diff --git a/site/content/docs/contributing/developer-docs/architecture.md b/site/content/docs/contributing/developer-docs/architecture.md new file mode 100644 index 00000000..1a5cd41c --- /dev/null +++ b/site/content/docs/contributing/developer-docs/architecture.md @@ -0,0 +1,56 @@ +--- +title: The Hipcheck Architecture +weight: 2 +--- + +# The Hipcheck Architecture and Plugin Startup + +This document describes the distributed architecture of Hipcheck and how plugins +get started. + +Hipcheck is a relatively simple multiprocessed tool that follows a star +topology. Users invoke the main Hipcheck binary, often referred to as "Hipcheck +core" or `hc`, on the command line, and provide a [policy file][policy_file] +which specifies the set of top-level plugins to use during analysis. Once +Hipcheck resolves these plugins and their dependencies, it starts each plugin in +a separate child process. Once all plugins are started and initialized, Hipcheck +core enters the analysis phase. During this phase it acts as a simple hub for +querying top-level plugins and relaying queries between plugins, as plugins are +intended to only communicate with each other through the core. + +## Plugin Startup + +Hipcheck core uses the `plugins/manager.rs::PluginExecutor` struct to start +plugins. The `PluginExecutor` has fields like `max_spawn_attempts` and +`backoff_interval` for controlling the startup process. These fields can be +configured using the `Exec.kdl` file. + +The main function in `PluginExecutor` is `start_plugin()`, which takes a +description of a plugin on file and returns a `Result` containing a handle to +the plugin process, called `PluginContext`. + +In `start_plugin()`, once the `PluginExecutor` has done the work of locating the +plugin entrypoint binary on disk, it moves into a loop of attempting to start +the plugin, at most `max_spawn_attempts` times. For each spawn attempt, it will +call `PluginExecutor::get_available_port()` to get valid local port to tell the +plugin to listen on. The executor creates a +`std::process::Command` object for the child process, with `stdout/stderr` +forwarded to Hipcheck core. + +Within each spawn attempt, `PluginExecutor` will try to connect to the port on +which the plugin should be listening. Since process startup and port +initialization can take differing amounts of time, the executor does a series of +up to `max_conn_attempts` connection attempts. For each failed connection, +the executor waits `backoff_interval`, which increases linearly with the number of +failed connections. The calculated backoff is modulated by a random `jitter` +between 0 and `jitter_percent`. + +Overall, the sleep duration between failed connections is equal to + + (backoff * conn_attempts) * (1.0 +/- jitter) + +As soon as `PluginExecutor::start_plugin()` successfully starts and connects to the child +process, it stores the process and plugin information in a `PluginContext` and +returns it to the caller. It however returns an error if `max_spawn_attempts` is reached. + +[policy_file]: @/docs/guide/config/policy-file.md diff --git a/site/content/docs/contributing/developer-docs/plugin-query-system.md b/site/content/docs/contributing/developer-docs/plugin-query-system.md new file mode 100644 index 00000000..0473c89a --- /dev/null +++ b/site/content/docs/contributing/developer-docs/plugin-query-system.md @@ -0,0 +1,202 @@ +--- +title: The Hipcheck Plugin Query System +weight: 2 +--- + +# The Hipcheck Plugin Query System + +This document describes the control flow through [Hipcheck core][hc_core], down +to gRPC, into the [Rust SDK][rust_sdk], and back to the core during a plugin +system query. This document assumes the plugins are already started and +configured, and that we have established a gRPC stream with them over which to +send and receive messages defined by our `hipcheck-common/proto` protobuf +schema. + +{{ image(path="images/developer_docs_plugin_grpc.png") }} + +## Overview and Design Requirements + +Hipcheck plugins are child processes of the Hipcheck core process that it +communicates with over distinct gRPC channels. Each Hipcheck plugin defines a +set of query endpoints that act as remote functions. They each receive a JSON- +serialized key and return a JSON-serialized result. During a query endpoint's +execution, it may need to invoke another plugin's query endpoint(s). All +communicaton between plugins goes through Hipcheck core, so just as Hipcheck +core issues a request to a given endpoint, the endpoint can request Hipcheck +core to issue another request to a different endpoint and report back the +reponse so that the original endpoint can complete its own behavior. + +A "session" describes the series of messages between Hipcheck core and a query +endpoint needed to complete a single query. This includes those queries made by +the endpoint to other plugins as part of answering the original query. Hipcheck +expects each plugin to be able to handle multiple active "sessions," such that +if a queried endpoint is waiting for it's own request to be responded to by +Hipcheck core, the plugin process is not blocked from receiving and handling new +queries, including to the same query endpoint. Thus, each query object sent to +and from the plugin has a session ID field to associate it with a particular +session. + +In Rust, the gRPC channel is accessed with using a `mpsc::{Sender, Receiver}` +pair. The `Sender` can be cloned many times, meaning that many threads can +`send` messages on the channel without needing exclusive access to any resource. +However, a `Receiver` cannot be shared. The Rust SDK addresses this restriction +and the above multiple-session, single-channel requirement by having a +`HcSessionSocket` object that has the exclusive `Receiver` to the plugin's gRPC +channel with Hipcheck core. The `HcSessionSocket` is responsible for tracking +the set of live sessions, and detecting whether a new message from the gRPC +channel should be forwarded to a live session, or constitues an entirely new +session. Each session is represented by a `PluginEngine` instance. The +`HcSessionSocket` sets up its own `mpsc` channel with the new `PluginEngine` +and gives it a clone of the gRPC channel `Sender`. In summation, all gRPC +messages received by the Rust SDK must go through `HcSessionSocket` for +demultiplexing, but each `PluginEngine` can send messages on the gRPC channel +directly. + +### `hipcheck-common` and Chunking + +The actual type that we can send over our gRPC channel to the live plugin is +called `PluginQuery`, and is automatically defined by the Rust code generated +from the protobuf definitions in `hipcheck-common/proto`. We choose to define +this high-level `Query` object to allow us to control the Hipcheck-facing struct +definition. For instance, `PluginQuery`'s `state` field is an `i32`, but for +`Query` we can make `state` a custom `enum` and translate from +`PluginQuery.state` to improve readability. + +An additional complexity is that gRPC has a maximum per-message size of 4MB. To +abstract this reality from users, the `hipcheck-common` crate defines a chunking +algorithm used by both Hipcheck core and the Rust SDK. Each code-facing `Query` +object is chunked into one or more `PluginQuery` objects before being sent on +the wire, and on the listening side the message is de-fragemented with a +`hipcheck-common::QuerySyntesizer`. + +## Part 1: Sending a request to a plugin + +The plugin query system begins with a call to `score_results()`, which +iterates through all the policy file's top-level analyses one-by-one. +For each, `score_results()` calls `HcEngine::query()`, which is the +entrypoint for all queries to plugins. `HcEngine::query()` is memo-ized +using the `salsa` crate, so the running `hc` core binary caches all +queries and responses sent through `HcEngine::query()`. If later in +execution `HcEngine::query()` is called again for the same set of +parameters, it will return the cached output value without involving +the plugin process. + +As described in the Overview, Hipcheck core has a unique gRPC channel with each +running plugin, so the first thing `HcEngine::query()` must do is find the +appropriate channel handle for the target plugin. The `HcPluginCore` object that +powers `HcEngine` under the hood (set with `HcEngine::set_core()`) has a map +containing all the plugin handles. `HcEngine::query()` keys this map using the +target publisher/plugin pair to get the appropriate plugin handle, which is an +object of type `ActivePlugin`. It then forwards the target query endpoint and +key to `ActivePlugin::query()`. + +Now that we have the active plugin handle, and therefore the right gRPC channel +for this query, we can formulate a query message. `ActivePlugin::query()` +formulates the high-level `Query` object and forwards it to the `query()` +function of the contained `PluginTransport` type. `ActivePlugin` is merely a +thin wrapper around `PluginTransport` with some additional state tracking +the next session ID to use. + +Inside `PluginTransport::query()` is where the `Query` object gets chunked into +a `Vec` and each one gets sent over the gRPC channel. We have now +successfully sent out a query. + +## Part 2 - Receiving Queries from gRPC + +Meanwhile, the plugin process (if using the Rust SDK), has been +listening on the gRPC channel with `HcSessionSocket.rx::recv()`. As mentioned in +the Overview, there is one `HcSessionSocket` instance that receives +all `PluginQuery` messages off the wire. Each message is returned +to the `HcSessionSocket::listen()` function, which determines if the message's +session ID matches its list of active sessions. If not, this newly-received `PluginQuery` +object marks the start of a new session, so the `HcSessionSocket` creates and +initializes a `PluginEngine` instance to handle it. `HcSessionSocket` creates +a one-way `mpsc` channel for it to forward `PluginQuery` objects with the +appropriate session ID to this `PluginEngine`. Thus, when a `PluginEngine` +called `recv()` on its channel that it shares with `HcSessionSocket`, it can be sure that all messages +have the same session ID. The last thing `HcSessionSocket::listen()` does +is forward the `PluginQuery` over this channel, then goes back to listening +for gRPC messages. + +The `PluginQuery` travels up through `PluginEngine::recv_raw()` into +`PluginEngine::recv()`, where it is de-fragmentized with zero or more +other messages to produce a software-facing `Query` object. + +If this is the first `Query` to a new `PluginEngine`, the object is +received by `PluginEngine::handle_session_fallible()`. The `PluginEngine` +doesn't yet know which query endpoint to call, so it has to match +`Query.name` against the output of `Plugin.queries()` to find the right +one. Once we have the right endpoint, we take the key (the argument) from +`Query.key` and call the endpoint with it. + +## Part 3 - Querying other plugins + +Now we are actually executing query endpoint code. Over the course of its +execution, the endpoint may need information from another plugin. To enable +the query endpoint to do so, each query endpoint is provided a handle to +its associated `PluginEngine` along with the query key. The endpoint can then +call `PluginEngine::query()` with the plugin publisher and name, the target +query endpoint name, and the query key. Within `PluginEngine::query()`, these +parameters are formulated into a `Query` object and forwarded to +`PluginEngine::send()`. The `send()` function uses the chunking algorithm from +`hipcheck-common` to produce a `Vec` and send them out over the +gRPC channel `Sender` with `PluginEngine.tx::send()`. As a reminder, this does +not go back through the `HcSessionSocket`, the `PluginEngine` can send messages +to Hipcheck core directly. + +## Part 4 - Receiving and Interpreting Messages from Plugins + +When we last left the Hipcheck core, it had just sent its `Vec` +over gRPC with `PluginTransport.tx::send()`. Note that this is just one thread +of execution in Hipcheck core. Just as a plugin process must be able to handle +multiple live sessions, the Hipcheck core may have multiple tasks each executing +independent queries. Thus, Hipcheck has the same issue of ensuring messages +received from the gRPC channel make it to the correct `PluginTransport` objects, +but it solves this problem differently than the Rust SDK does. + +Each `PluginTransport` object shares a `Mutex` that guards the +`MultiplexedQueryReceiver` object. While the `PluginTransport` waits for a +message from the `PluginEngine` session that was spawned remotely to handle its +request, it enters a loop. In each iteration of the loop, it blocks until it can +acquire the `MulitplexedQueryReceiver`. Once it has acquired the receiver, it +checks the receiver's backlog for any messages matching its target session ID. +If none are found, it listens on the gRPC wire directly for the next message. If +the next message matches our session, we take the message, otherwise we put it +in the backlog to save it for the `PluginTransport` that does want that message. +After this, we drop our lock on the `Mutex` and +restart the loop. The reason we drop and re-acquire the lock is so that one +`PluginTransport` that spends a very long time waiting for its message(s) does +not prevent other `PluginTransport` instances from receiving their messages. By +dropping and trying to re-acquire the `Mutex` lock, we give other +`PluginTransport` instances a chance to acquire the receiver. + +The `PluginTransport` continues this loop until it has received all the +`PluginQuery` objects it needs to de-fragment into a `Query` object. It then +returns the `Query` to the caller, which is `ActivePlugin::query()`. This +function does the job of converting `Query` into a Hipcheck core-specific type +called `PluginResponse`. Until now, the Hipcheck core has not really checked the +content of the `Query`, but now it needs to decide whether the `Query` is the +query endpoint returning a value or requesting additional information. The +`PluginResponse` enum separates these two possibilities, plus an additional +error variant. + +`ActivePlugin::query()` returns the `PluginResponse` up to the caller, namely +`HcEngine::query()`. Here, if the `PluginResponse` was `Completed`, we have +finished the query and return its output value that was stored as a field in +`Completed`. Otherwise, we have to recursively call `HcEngine::query()` with the +query information stored in `PluginResponse::AwaitingResult`. + +Once this recursive call completes, we must forward the output of that query to +forward to our original query endpoint who asked for it. We do this by passing +that output to `ActivePlugin::resume_query()`. One of the main differences of +this function is that the generated `Query` object uses an existing session ID +instead of a newly-generated one, since this `Query` is part of an ongoing +session. + +The original query endpoint may return a `PluginResponse::AwaitingResult` zero +or more times, but eventually we will get a `PluginResponse::Completed`, and by +passing the contained output up to the calling function, we have completed a +query using the plugin system! + +[hc_core]: @/docs/contributing/developer-docs/architecture.md +[rust_sdk]: @/docs/guide/making-plugins/rust-sdk.md diff --git a/site/static/assets/developer_docs_plugin_grpc.drawio b/site/static/assets/developer_docs_plugin_grpc.drawio new file mode 100755 index 00000000..fb114031 --- /dev/null +++ b/site/static/assets/developer_docs_plugin_grpc.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/site/static/images/developer_docs_plugin_grpc.png b/site/static/images/developer_docs_plugin_grpc.png new file mode 100755 index 0000000000000000000000000000000000000000..3df47e63417bdff79131282e6a9a61fc7aa4a07c GIT binary patch literal 110185 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

9sr)T}Gr8*_59Hd~- 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 z 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 ZaYkBEc7|(T>xTjU$;+rn=S!MA`yUH+RzLs% literal 0 HcmV?d00001 diff --git a/site/templates/shortcodes/image.html b/site/templates/shortcodes/image.html new file mode 100644 index 00000000..e40f38f2 --- /dev/null +++ b/site/templates/shortcodes/image.html @@ -0,0 +1,2 @@ +{% set image_url = get_url(path=path) %} + From 4bc732a56f05c76c4a81a3b1b10f08c7b63c5d7c Mon Sep 17 00:00:00 2001 From: jlanson Date: Mon, 6 Jan 2025 14:40:55 -0500 Subject: [PATCH 2/2] chore(docs): add reference for Hipcheck repository structure Signed-off-by: jlanson --- .../contributing/developer-docs/_index.md | 4 + .../developer-docs/repo-structure.md | 83 +++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 site/content/docs/contributing/developer-docs/repo-structure.md diff --git a/site/content/docs/contributing/developer-docs/_index.md b/site/content/docs/contributing/developer-docs/_index.md index e381d3fe..1d00d3aa 100644 --- a/site/content/docs/contributing/developer-docs/_index.md +++ b/site/content/docs/contributing/developer-docs/_index.md @@ -10,6 +10,10 @@ weight: 3
+{% waypoint(title="Repo Structure", path="@/docs/contributing/developer-docs/repo-structure.md") %} +List of key directories in the Hipcheck repository. +{% end %} + {% waypoint(title="Architecture", path="@/docs/contributing/developer-docs/architecture.md") %} Hipcheck's distributed architecture and how plugins get started. {% end %} diff --git a/site/content/docs/contributing/developer-docs/repo-structure.md b/site/content/docs/contributing/developer-docs/repo-structure.md new file mode 100644 index 00000000..b17ee9a2 --- /dev/null +++ b/site/content/docs/contributing/developer-docs/repo-structure.md @@ -0,0 +1,83 @@ +--- +title: Repo Structure +weight: 2 +--- + +# The Hipcheck Repository + +This document describes the overall layout of the Hipcheck repository, in an +effort to help new developers become acquainted with where different +functionality resides. + +## The Repository Root + +The repository is a cargo workspace, containing multiple crates and +organizational directories. + +Some of these directories include: +- `hipcheck/` - The main `hc` binary crate. +- `sdk/` - Contains the plugin [software development kits (SDKs)][plugin_sdk] maintained by the Hipcheck + team for various languages, which each language's SDK in a separate subdirectory. + - `rust/` - The Hipcheck [Rust SDK][rust_sdk] crate. +- `hipcheck-common/` - An internal library crate containing functionality shared between the `hc` binary crate and the Rust SDK. + - `proto/` - The Protobuf protocol definition for communication between the `hc` binary and plugins. +- `hipcheck-macros/` - An internal library crate of proc macros for the `hc` binary. +- `hipcheck-sdk-macros/` - An internal library crate of proc macros for the Rust SDK. +- `plugins/` - Contains each plugin supported directly by the Hipcheck team as a + separate crate. +- `site/` - Source for the Hipcheck website. +- `dist/` - Items related to distributing Hipcheck as a container. +- `xtask/` - A crate containing custom commands that can be invoked via `cargo xtask ` within the Hipcheck workspace. + `src/task/` - Contains each module corresponding to a single `xtask` subcommand. + +## The Hipcheck binary crate + +Important modules within the `hipcheck/` binary crate include: +- `cache/` - Implements the `hc cache` subcommand for manipulating the + repository and plugin caches. +- `cli.rs` - Defines the Hipcheck command line interface. +- `config.rs` - Functionality for calculating the Hipcheck score tree from a + policy file. +- `engine.rs` - Entrypoint for interacting with Hipcheck plugins. +- `init/` - Code to be run as part of Hipcheck's startup. +- `main.rs` - Entrypoint for executing any of the subcommands defined by + `cli.rs`. +- `plugin/` - All code related to retreiving, managing, and starting plugins. +- `policy/` - Defines policy files and their parsing. +- `policy_expr/` - Defines the [policy expression language][policy_expr] parsing and execution. +- `report/` - Functionality for building a report from the results of an + analysis. +- `score.rs` - Combining score tree and analysis results to produce an overall + risk score for the analysis. +- `session/` - Managing a given Hipcheck `check` execution from start to finish, + including plugin retrieval and execution, policy file parsing, analysis, + scoring, and report building. +- `setup.rs` - Implements the `hc setup` subcommand that does one-time actions + as part of a Hipcheck installation. +- `shell/` - Managing the terminal output of the Hipcheck `hc` process. +- `source/` - Code for manipulating Git repositories. +- `target/` - Defines the various types of Hipcheck analysis targets (e.g. + SBOMs, packages, GitHub repos, local repos, etc.), how they are identified + from a user-supplied string, and how they resolve to a particular repo and + commit for analysis. + +### The `policy_expr` Module + +- `token.rs` - Definition of the tokens that make up the policy expression + language using the `logos` crate +- `bridge.rs` - Code for making `logos` interoperable with `nom` parser crate. +- `expr.rs` - Definitions of language objects (functions, primitives, etc.) and + the `nom` parsers that transform token streams into them. +- `error.rs` - Definitions of errors related to parsing and executing policy + expressions. +- `json_pointer.rs` - Code for injecting JSON data into policy expressions. +- `env.rs` - Definition and standard impl of the `Env` struct, which defines the + implementation of functions used in the policy expression language. +- `pass.rs` - Visitor or mutating operations on an entire `expr.rs::Expr` tree, + such as resolving functions and type checking/fixing. +- `mod.rs` - Definition of expression execution and standard pre-execution pass + groupings. + +[plugin_sdk]: @/docs/rfds/0006-rust-plugin-sdk.md +[rust_sdk]: @/docs/guide/making-plugins/rust-sdk.md +[policy_expr]: @/docs/guide/config/policy-expr.md