Files
warkanumandClaude Sonnet 5 ac3c0f149c
CI / js (push) Successful in 18s
CI / go (push) Successful in 36s
CI / rust (push) Successful in 2m3s
Add runnable smoke-test clients for each SDK
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>
2026-08-01 15:38:37 +02:00

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.