Private
Public Access
CI / js (push) Successful in 18s
CI / go (push) Successful in 36s
CI / rust (push) Successful in 2m3s
Each package gets a small example program that exercises the real client: with no ORIGIN_SERVICE_KEY set it runs against a local mock check-in server, otherwise it checks in against ORIGIN_URL/Origin's public endpoint. Wired into CI (mock mode) as a regression check, and documented per README. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
73 lines
2.3 KiB
Markdown
73 lines
2.3 KiB
Markdown
# origin-client (Rust)
|
|
|
|
```
|
|
cargo add origin-client
|
|
```
|
|
|
|
Async, built on `tokio` + `reqwest` (rustls, no OpenSSL dependency).
|
|
|
|
## Usage
|
|
|
|
```rust
|
|
use origin_client::{Client, Config};
|
|
use tokio_util::sync::CancellationToken;
|
|
|
|
let client = Client::new(Config {
|
|
service_key: "...".into(),
|
|
type_: "myservice".into(),
|
|
version: "1.2.3".into(),
|
|
name: "myservice-nova".into(),
|
|
..Default::default()
|
|
})?;
|
|
|
|
let cancel = CancellationToken::new();
|
|
tokio::spawn({
|
|
let cancel = cancel.clone();
|
|
async move { client.run(cancel).await }
|
|
}); // immediate check-in, then every 24h until cancel.cancel() is called
|
|
```
|
|
|
|
Call `client.checkin_once().await` directly instead of `run` to send a
|
|
single check-in and observe the result/error.
|
|
|
|
## Config
|
|
|
|
| Field | Required | Default |
|
|
|---|---|---|
|
|
| `service_key` | yes | — |
|
|
| `type_`, `version`, `name` | yes | — |
|
|
| `url` | no | `DEFAULT_URL` (`https://origin.warky.dev/api/public/service-checkin`) |
|
|
| `app_type` | no | `"rust"` |
|
|
| `hostname` | no | OS hostname |
|
|
| `container_id` | no | best-effort Docker/cgroup detection |
|
|
| `orchestrator` | no | best-effort Kubernetes/Docker detection |
|
|
| `install_id` | no | OS machine ID, else a generated UUID persisted to `install_id_path` |
|
|
| `interval_hours` | no | `DEFAULT_INTERVAL_HOURS` (24) |
|
|
| `logger` | no | discards warnings (`NoopLogger`) |
|
|
|
|
`site`, `environment`, `database_type`, `database_name`, `port`,
|
|
`base_url`, `internal_url`, `description` are optional metadata with no
|
|
default. `Config` implements `Default`, so use struct-update syntax
|
|
(`..Default::default()`) as shown above.
|
|
|
|
`hostname()`, `outbound_ip()`, `container_id()`, `orchestrator()`, and
|
|
`resolve_machine_id()` are exported standalone for callers that want the
|
|
detection logic without the HTTP client.
|
|
|
|
## Manual smoke test
|
|
|
|
```bash
|
|
cargo run --example testclient # single check-in, local mock server
|
|
cargo run --example testclient -- --watch # loops via run() until Ctrl-C
|
|
```
|
|
|
|
Set `ORIGIN_SERVICE_KEY` (and optionally `ORIGIN_URL`, `ORIGIN_TYPE`,
|
|
`ORIGIN_VERSION`, `ORIGIN_NAME`, `ORIGIN_SITE`, `ORIGIN_ENVIRONMENT`,
|
|
`ORIGIN_INTERVAL_HOURS`) to check in against a real endpoint instead.
|
|
|
|
## Platform notes
|
|
|
|
macOS/Windows machine-ID detection is compiled but not exercised by CI
|
|
(this repo's CI runs on Linux). `cargo build --target ...` for those
|
|
targets is a reasonable spot-check before release.
|