From a69a2ac9ae627e9fe8c2c8620bafbc6ff6004a54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=A0=CF=85=CE=B1=CE=B7=20=D7=A0=CF=85=CE=B1=CE=B7=D1=95?= =?UTF-8?q?=CF=83=CE=B7?= Date: Thu, 19 Mar 2026 21:35:12 -0700 Subject: [PATCH 01/12] docs: add rename API server to controller design spec MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- ...6-03-19-rename-api-to-controller-design.md | 212 ++++++++++++++++++ 1 file changed, 212 insertions(+) create mode 100644 docs/plans/2026-03-19-rename-api-to-controller-design.md diff --git a/docs/plans/2026-03-19-rename-api-to-controller-design.md b/docs/plans/2026-03-19-rename-api-to-controller-design.md new file mode 100644 index 00000000..70fe9887 --- /dev/null +++ b/docs/plans/2026-03-19-rename-api-to-controller-design.md @@ -0,0 +1,212 @@ +# Rename API Server to Controller — Design Spec + +## Goal + +Rename the "API server" to "controller" to reflect its role as the control +plane process that owns multiple sub-components (REST API, notification watcher, +heartbeat, and future metrics server). + +## Motivation + +The API server today does more than serve HTTP: + +- Runs the REST API (Echo) +- Runs the notification watcher (condition monitoring) +- Runs the component heartbeat +- Will run a metrics/ops server in the future + +"Controller" captures what it actually is — the control plane process. The API +is just one thing it exposes. + +## Config Changes + +### Before + +```yaml +api: + client: + url: 'http://localhost:8080' + security: + bearer_token: '' + server: + port: 8080 + nats: + host: localhost + port: 4222 + client_name: osapi-api + namespace: osapi + auth: + type: none + security: + signing_key: '' + cors: + allow_origins: [...] + roles: {} +``` + +### After + +```yaml +controller: + client: + url: 'http://localhost:8080' + security: + bearer_token: '' + api: + port: 8080 + security: + signing_key: '' + cors: + allow_origins: [...] + roles: {} + nats: + host: localhost + port: 4222 + client_name: osapi-api + namespace: osapi + auth: + type: none +``` + +Key changes: + +- `api` → `controller` (top-level) +- `api.server` → `controller.api` (the HTTP server config) +- `api.server.nats` → `controller.nats` (moved up, not nested under api) +- `api.client` → `controller.client` (unchanged structure) + +### Go config types + +```go +// Controller replaces the old API struct. +type Controller struct { + Client Client `mapstructure:"client"` + API APIServer `mapstructure:"api" mask:"struct"` + NATS NATSConnection `mapstructure:"nats"` +} + +// APIServer holds the HTTP server config (port + security). +// Replaces the old Server struct minus the NATS connection +// (which moves to Controller.NATS). +type APIServer struct { + Port int `mapstructure:"port"` + Security ServerSecurity `mapstructure:"security" mask:"struct"` +} +``` + +The `validate:"required"` tags on `signing_key` and `bearer_token` remain +on their existing structs (`ServerSecurity`, `ClientSecurity`). Validation +works the same way — Viper unmarshals into the new structure and the +validator walks the nested structs. + +### Environment variable mapping + +| Config Key | Environment Variable | +|---|---| +| `controller.client.url` | `OSAPI_CONTROLLER_CLIENT_URL` | +| `controller.client.security.bearer_token` | `OSAPI_CONTROLLER_CLIENT_SECURITY_BEARER_TOKEN` | +| `controller.api.port` | `OSAPI_CONTROLLER_API_PORT` | +| `controller.api.security.signing_key` | `OSAPI_CONTROLLER_API_SECURITY_SIGNING_KEY` | +| `controller.api.security.cors.allow_origins` | `OSAPI_CONTROLLER_API_SECURITY_CORS_ALLOW_ORIGINS` | +| `controller.nats.host` | `OSAPI_CONTROLLER_NATS_HOST` | +| `controller.nats.port` | `OSAPI_CONTROLLER_NATS_PORT` | +| `controller.nats.client_name` | `OSAPI_CONTROLLER_NATS_CLIENT_NAME` | +| `controller.nats.namespace` | `OSAPI_CONTROLLER_NATS_NAMESPACE` | +| `controller.nats.auth.type` | `OSAPI_CONTROLLER_NATS_AUTH_TYPE` | + +## CLI Changes + +| Before | After | +|---|---| +| `osapi api server start` | `osapi controller start` | + +Unchanged: + +- `osapi client *` — all client commands stay the same +- `osapi agent start` +- `osapi nats server start` +- `osapi start` (all-in-one) — calls controller instead of API server + +## Code Changes + +### Directory moves + +| From | To | +|---|---| +| `internal/api/` | `internal/controller/api/` | +| `internal/notify/` | `internal/controller/notify/` | + +### New files + +| File | Purpose | +|---|---| +| `internal/controller/controller.go` | Controller struct with Start/Stop. Owns the API server, heartbeat, and condition watcher. Implements `cli.Lifecycle`. | +| `cmd/controller.go` | `controllerCmd` parent command | +| `cmd/controller_start.go` | `controller start` subcommand | +| `cmd/controller_setup.go` | Setup logic (moved from `api_server_setup.go`), config paths updated | + +### Removed files + +| File | Reason | +|---|---| +| `cmd/api_server.go` | Replaced by `cmd/controller.go` | +| `cmd/api_server_start.go` | Replaced by `cmd/controller_start.go` | +| `cmd/api_server_setup.go` | Replaced by `cmd/controller_setup.go` | + +### Modified files + +| File | Change | +|---|---| +| `internal/config/types.go` | Replace `API` struct with `Controller` containing `APIServer`, `Client`, `NATSConnection`. Update `Config` struct field. | +| `cmd/start.go` | Call controller instead of API server | +| `cmd/client.go` | `appConfig.API` → `appConfig.Controller` | +| `cmd/client_*.go` | Update all config references | +| `test/integration/integration_test.go` | Update `api server start` → `controller start` in test harness | + +### Heartbeat + +`internal/api/heartbeat.go` moves to `internal/controller/heartbeat.go`. +The heartbeat registers the controller as a component in the registry KV. +It is a controller lifecycle concern — the API server doesn't need to know +about it. The agent has its own heartbeat in `internal/agent/` which is +unrelated. + +### Notify + +`internal/notify/` moves to `internal/controller/notify/`. The condition +watcher monitors the registry KV and dispatches notifications. It runs as +a goroutine owned by the controller — it has no reason to exist outside +the controller process. + +## What doesn't change + +- All REST API paths (`/node/`, `/job/`, `/health/`, etc.) +- `osapi client *` CLI commands +- SDK client (`pkg/sdk/client/`) — no config references, only HTTP +- Agent code (`internal/agent/`) +- NATS server code +- OpenAPI specs and generated code (stays under `internal/controller/api/`) + +## Docs updates + +- `docs/docs/sidebar/usage/configuration.md` — full config reference with + new `controller.*` keys and env var table +- `docs/docs/sidebar/architecture/architecture.md` — rename "API Server" + to "Controller" in process descriptions +- `docs/docs/sidebar/architecture/system-architecture.md` — update package + layout, handler structure references +- `docs/docs/sidebar/usage/cli/` — update command docs for + `controller start` +- `docs/docs/sidebar/development/development.md` — quick reference commands +- `docs/docs/sidebar/features/health-checks.md` — update references +- `docs/docs/sidebar/features/notifications.md` — update references +- `CLAUDE.md` — update architecture section (`internal/api/` → + `internal/controller/api/`), cmd references, config references + +## Breaking changes + +- Config: `api.*` → `controller.*` +- Env vars: `OSAPI_API_*` → `OSAPI_CONTROLLER_*` +- CLI: `osapi api server start` → `osapi controller start` +- Integration tests: `api server start` → `controller start` +- `osapi.yaml`: must be updated before upgrading From 05d558d4fabfed56996c87f298243ab6a9b2a692 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=A0=CF=85=CE=B1=CE=B7=20=D7=A0=CF=85=CE=B1=CE=B7=D1=95?= =?UTF-8?q?=CF=83=CE=B7?= Date: Thu, 19 Mar 2026 21:40:18 -0700 Subject: [PATCH 02/12] docs: add rename API to controller implementation plan MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .../2026-03-19-rename-api-to-controller.md | 597 ++++++++++++++++++ 1 file changed, 597 insertions(+) create mode 100644 docs/plans/2026-03-19-rename-api-to-controller.md diff --git a/docs/plans/2026-03-19-rename-api-to-controller.md b/docs/plans/2026-03-19-rename-api-to-controller.md new file mode 100644 index 00000000..e4ef9ed3 --- /dev/null +++ b/docs/plans/2026-03-19-rename-api-to-controller.md @@ -0,0 +1,597 @@ +# Rename API Server to Controller Implementation Plan + +> **For agentic workers:** REQUIRED: Use superpowers:subagent-driven-development +> (if subagents available) or superpowers:executing-plans to implement this plan. +> Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Rename the "API server" to "controller" across config, CLI, code +structure, and docs to reflect its role as the control plane process. + +**Architecture:** Move `internal/api/` to `internal/controller/api/` and +`internal/notify/` to `internal/controller/notify/`. Create a new +`internal/controller/controller.go` that owns the API server, heartbeat, and +condition watcher. Rename `osapi api server start` to `osapi controller start`. +Update all config from `api.*` to `controller.*`. + +**Tech Stack:** Go 1.25, Cobra CLI, Viper config, Echo HTTP + +--- + +## Chunk 1: Config types and YAML + +### Task 1: Update config types + +**Files:** +- Modify: `internal/config/types.go` + +- [ ] **Step 1: Replace API struct with Controller** + +Replace the `API` struct and `Server` struct with `Controller` and `APIServer`: + +```go +// Controller holds the control plane configuration. +type Controller struct { + Client Client `mapstructure:"client"` + API APIServer `mapstructure:"api" mask:"struct"` + NATS NATSConnection `mapstructure:"nats"` +} + +// APIServer holds the HTTP server config (port + security). +type APIServer struct { + Port int `mapstructure:"port"` + Security ServerSecurity `mapstructure:"security" mask:"struct"` +} +``` + +Update the `Config` struct field: + +```go +type Config struct { + Controller Controller `mapstructure:"controller" mask:"struct"` + Agent AgentConfig `mapstructure:"agent,omitempty"` + // ... rest unchanged +} +``` + +Remove the old `API` and `Server` structs. Keep `Client`, `ClientSecurity`, +`ServerSecurity`, `CORS`, `CustomRole`, `NATSConnection` unchanged. + +- [ ] **Step 2: Verify it compiles (it won't — many references to fix)** + +Run: `go build ./internal/config/...` +Expected: PASS (the config package itself should compile) + +- [ ] **Step 3: Commit** + +``` +refactor(config): rename API struct to Controller +``` + +--- + +### Task 2: Update config YAML files + +**Files:** +- Modify: `osapi.yaml` +- Modify: `test/integration/osapi.yaml` + +- [ ] **Step 1: Update osapi.yaml** + +Replace the `api:` section: + +```yaml +controller: + client: + url: 'http://0.0.0.0:8080' + security: + bearer_token: '' + api: + port: 8080 + security: + signing_key: '' + cors: + allow_origins: + - 'http://localhost:3001' + - 'https://osapi-io.github.io' + nats: + host: 'localhost' + port: 4222 + client_name: 'osapi-api' + namespace: 'osapi' + auth: + type: 'none' +``` + +- [ ] **Step 2: Update test/integration/osapi.yaml** + +Same structure change: + +```yaml +controller: + client: + url: http://127.0.0.1:8080 + security: + bearer_token: placeholder + api: + port: 8080 + security: + signing_key: 111fdb0cfd9788fa6af8815f856a0374bf7a0174ad62fa8b98ec07a55f68d8d8 + cors: + allow_origins: [] + nats: + host: localhost + port: 4222 + client_name: osapi-api-integration + namespace: "" + auth: + type: none +``` + +- [ ] **Step 3: Commit** + +``` +refactor(config): rename api to controller in YAML files +``` + +--- + +## Chunk 2: Directory moves + +### Task 3: Move internal/api/ to internal/controller/api/ + +**Files:** +- Move: `internal/api/` → `internal/controller/api/` +- Move: `internal/api/heartbeat.go` → `internal/controller/heartbeat.go` +- Move: `internal/api/heartbeat_test.go` → `internal/controller/heartbeat_test.go` + +- [ ] **Step 1: Create directory and move files** + +```bash +mkdir -p internal/controller +git mv internal/api internal/controller/api +git mv internal/controller/api/heartbeat.go internal/controller/heartbeat.go +git mv internal/controller/api/heartbeat_test.go internal/controller/heartbeat_test.go +``` + +- [ ] **Step 2: Update package declaration in heartbeat files** + +Change `package api` to `package controller` in: +- `internal/controller/heartbeat.go` +- `internal/controller/heartbeat_test.go` + +Update imports in heartbeat.go to reference `internal/controller/api` where +needed. + +- [ ] **Step 3: Update all import paths project-wide** + +Find and replace all occurrences: +- `"github.com/retr0h/osapi/internal/api"` → `"github.com/retr0h/osapi/internal/controller/api"` +- `"github.com/retr0h/osapi/internal/api/` → `"github.com/retr0h/osapi/internal/controller/api/` + +Files that import `internal/api`: +- `cmd/api_server_setup.go` (will become `cmd/controller_setup.go` in Task 5) +- `cmd/nats_heartbeat.go` +- `cmd/start.go` +- All `internal/api/handler_*.go` files (now under `internal/controller/api/`) +- All domain packages (`internal/controller/api/health/`, etc.) — these use + relative imports within the api package so they may not need changes + +- [ ] **Step 4: Verify compilation** + +Run: `go build ./...` + +- [ ] **Step 5: Commit** + +``` +refactor: move internal/api to internal/controller/api +``` + +--- + +### Task 4: Move internal/notify/ to internal/controller/notify/ + +**Files:** +- Move: `internal/notify/` → `internal/controller/notify/` + +- [ ] **Step 1: Move directory** + +```bash +git mv internal/notify internal/controller/notify +``` + +- [ ] **Step 2: Update all import paths** + +Find and replace: +- `"github.com/retr0h/osapi/internal/notify"` → `"github.com/retr0h/osapi/internal/controller/notify"` + +Files that import `internal/notify`: +- `cmd/api_server_setup.go` (will become `cmd/controller_setup.go`) + +- [ ] **Step 3: Verify compilation** + +Run: `go build ./...` + +- [ ] **Step 4: Commit** + +``` +refactor: move internal/notify to internal/controller/notify +``` + +--- + +## Chunk 3: Controller struct and CMD files + +### Task 5: Create controller.go + +**Files:** +- Create: `internal/controller/controller.go` + +- [ ] **Step 1: Create the Controller struct** + +```go +package controller + +// Controller is the control plane process. It owns the API server, +// component heartbeat, and condition watcher. +type Controller struct { + apiServer *api.Server + // Additional fields will be added as heartbeat and watcher + // are refactored into this struct in future work. +} +``` + +For now this is a thin wrapper. The existing setup logic in +`cmd/api_server_setup.go` already manages the lifecycle. The controller +struct provides a home for future sub-component ownership. + +- [ ] **Step 2: Commit** + +``` +feat: add internal/controller/controller.go +``` + +--- + +### Task 6: Rename CMD files + +**Files:** +- Remove: `cmd/api_server.go` +- Remove: `cmd/api_server_start.go` +- Remove: `cmd/api_server_setup.go` +- Create: `cmd/controller.go` +- Create: `cmd/controller_start.go` +- Create: `cmd/controller_setup.go` + +- [ ] **Step 1: Move and rename files** + +```bash +git mv cmd/api_server.go cmd/controller.go +git mv cmd/api_server_start.go cmd/controller_start.go +git mv cmd/api_server_setup.go cmd/controller_setup.go +``` + +- [ ] **Step 2: Update cmd/controller.go** + +Rename `apiServerCmd` to `controllerCmd`. Change: +- `Use: "server"` → `Use: "start"` +- Parent command: registered under `rootCmd` not `apiCmd` +- Remove the `apiCmd` parent entirely +- Update all `appConfig.API` references to `appConfig.Controller` +- Update log messages from "api server" to "controller" + +The command becomes `osapi controller start` (two levels: controller → start). +Actually per the spec it's just `osapi controller start` where `controller` +is the parent and `start` is the subcommand. Keep the parent for future +subcommands (e.g., `controller status`). + +- [ ] **Step 3: Update cmd/controller_start.go** + +- Rename `apiServerStartCmd` to `controllerStartCmd` +- Update `Use` and `Short` descriptions +- Change `appConfig.API.NATS` to `appConfig.Controller.NATS` +- Update import from `internal/api` to `internal/controller/api` + +- [ ] **Step 4: Update cmd/controller_setup.go** + +- Rename `setupAPIServer` to `setupController` +- Rename `registerAPIHandlers` to `registerControllerHandlers` +- Rename `startAPIHeartbeat` to `startControllerHeartbeat` +- Update all `appConfig.API` to `appConfig.Controller`: + - `appConfig.API.Port` → `appConfig.Controller.API.Port` + - `appConfig.API.NATS` → `appConfig.Controller.NATS` + - `appConfig.API.Server.Security.SigningKey` → + `appConfig.Controller.API.Security.SigningKey` + - `appConfig.API.Server.Security.CORS.AllowOrigins` → + `appConfig.Controller.API.Security.CORS.AllowOrigins` + - `appConfig.API.Server.Security.Roles` → + `appConfig.Controller.API.Security.Roles` +- Update import paths: + - `internal/api` → `internal/controller/api` + - `internal/notify` → `internal/controller/notify` + +- [ ] **Step 5: Verify compilation** + +Run: `go build ./...` + +- [ ] **Step 6: Commit** + +``` +refactor: rename api server cmd to controller +``` + +--- + +### Task 7: Update cmd/start.go + +**Files:** +- Modify: `cmd/start.go` + +- [ ] **Step 1: Update references** + +- `setupAPIServer` → `setupController` +- `appConfig.API.NATS` → `appConfig.Controller.NATS` +- `apiBundle` → `controllerBundle` +- Update `Short` and `Long` descriptions: "API server" → "controller" +- Update log component label: `"component", "api"` → `"component", "controller"` + +- [ ] **Step 2: Verify compilation** + +Run: `go build ./...` + +- [ ] **Step 3: Commit** + +``` +refactor: update start.go for controller rename +``` + +--- + +### Task 8: Update client and token commands + +**Files:** +- Modify: `cmd/client.go` +- Modify: `cmd/token_generate.go` +- Modify: `cmd/token_validate.go` + +- [ ] **Step 1: Update cmd/client.go** + +- `appConfig.API.URL` → `appConfig.Controller.Client.URL` +- `appConfig.API.Client.Security.BearerToken` → + `appConfig.Controller.Client.Security.BearerToken` +- Viper binding: `"api.client.url"` → `"controller.client.url"` +- Log message: `"api.client.url"` → `"controller.client.url"` + +- [ ] **Step 2: Update cmd/token_generate.go** + +- All `appConfig.API` references → `appConfig.Controller` + +- [ ] **Step 3: Update cmd/token_validate.go** + +- All `appConfig.API` references → `appConfig.Controller` + +- [ ] **Step 4: Update cmd/nats_heartbeat.go** + +- Update import from `internal/api` to `internal/controller/api` + +- [ ] **Step 5: Verify compilation and run tests** + +Run: `go build ./... && go test ./cmd/... -count=1` + +- [ ] **Step 6: Commit** + +``` +refactor: update client and token commands for controller config +``` + +--- + +## Chunk 4: Integration tests and verification + +### Task 9: Update integration tests + +**Files:** +- Modify: `test/integration/integration_test.go` +- Modify: `test/integration/osapi.yaml` (already done in Task 2) + +- [ ] **Step 1: Update serverEnv()** + +```go +func serverEnv() []string { + return append(os.Environ(), + fmt.Sprintf("OSAPI_NATS_SERVER_PORT=%d", natsPort), + fmt.Sprintf("OSAPI_NATS_SERVER_STORE_DIR=%s", storeDir), + fmt.Sprintf("OSAPI_CONTROLLER_API_PORT=%d", apiPort), + fmt.Sprintf("OSAPI_CONTROLLER_NATS_PORT=%d", natsPort), + fmt.Sprintf("OSAPI_AGENT_NATS_PORT=%d", natsPort), + fmt.Sprintf("OSAPI_CONTROLLER_CLIENT_SECURITY_BEARER_TOKEN=%s", token), + ) +} +``` + +- [ ] **Step 2: Update clientEnv()** + +```go +func clientEnv() []string { + return append(os.Environ(), + fmt.Sprintf("OSAPI_CONTROLLER_CLIENT_URL=http://127.0.0.1:%d", apiPort), + fmt.Sprintf("OSAPI_CONTROLLER_CLIENT_SECURITY_BEARER_TOKEN=%s", token), + ) +} +``` + +- [ ] **Step 3: Verify full build and unit tests** + +```bash +go build ./... +go test ./... -count=1 +``` + +- [ ] **Step 4: Run integration tests** + +```bash +just go::unit-int +``` + +- [ ] **Step 5: Commit** + +``` +refactor: update integration tests for controller config +``` + +--- + +## Chunk 5: Documentation + +### Task 10: Update CLAUDE.md + +**Files:** +- Modify: `CLAUDE.md` + +- [ ] **Step 1: Update architecture section** + +- `cmd/` description: replace "api server" with "controller" +- `internal/api/` → `internal/controller/api/` +- Add `internal/controller/` description +- Add `internal/controller/notify/` description +- Update "Adding a New API Domain" section paths +- Update config references throughout + +- [ ] **Step 2: Commit** + +``` +docs: update CLAUDE.md for controller rename +``` + +--- + +### Task 11: Update Docusaurus docs + +**Files:** +- Modify: `docs/docs/sidebar/usage/configuration.md` +- Modify: `docs/docs/sidebar/architecture/architecture.md` +- Modify: `docs/docs/sidebar/architecture/system-architecture.md` +- Modify: `docs/docs/sidebar/development/development.md` +- Modify: `docs/docs/sidebar/features/health-checks.md` +- Modify: `docs/docs/sidebar/features/notifications.md` +- Modify: `docs/docs/sidebar/intro.md` + +- [ ] **Step 1: Update configuration.md** + +Replace all `api.*` config keys with `controller.*` in: +- YAML examples +- Environment variable table +- Section reference tables + +- [ ] **Step 2: Update architecture.md** + +- "API Server" → "Controller" in process descriptions +- `osapi api server start` → `osapi controller start` + +- [ ] **Step 3: Update system-architecture.md** + +- Package layout: `internal/api/` → `internal/controller/api/` +- Handler structure references + +- [ ] **Step 4: Update development.md** + +- Quick reference: `osapi api server start` → `osapi controller start` + +- [ ] **Step 5: Update feature docs** + +- health-checks.md: update any "API server" references +- notifications.md: update any "API server" references + +- [ ] **Step 6: Update intro.md** + +- Quickstart section: update startup commands if they reference + `api server start` + +- [ ] **Step 7: Verify docs build** + +```bash +just docs::build +``` + +- [ ] **Step 8: Commit** + +``` +docs: update all docs for controller rename +``` + +--- + +## Chunk 6: Final verification + +### Task 12: Full verification + +- [ ] **Step 1: Build** + +```bash +go build ./... +``` + +- [ ] **Step 2: Unit tests** + +```bash +go test ./... -count=1 +``` + +- [ ] **Step 3: Lint** + +```bash +just go::vet +``` + +- [ ] **Step 4: Integration tests** + +```bash +just go::unit-int +``` + +- [ ] **Step 5: Verify CLI** + +```bash +go run main.go controller start --help +go run main.go start --help +go run main.go client --help +``` + +- [ ] **Step 6: Docs build** + +```bash +just docs::build +``` + +- [ ] **Step 7: Final commit if any fixups needed** + +--- + +## Files Modified Summary + +| File | Change | +|---|---| +| `internal/config/types.go` | `API` → `Controller`, `Server` → `APIServer` | +| `osapi.yaml` | `api:` → `controller:` | +| `test/integration/osapi.yaml` | `api:` → `controller:` | +| `internal/api/` → `internal/controller/api/` | Directory move | +| `internal/notify/` → `internal/controller/notify/` | Directory move | +| `internal/controller/heartbeat.go` | Moved from `internal/api/`, package rename | +| `internal/controller/heartbeat_test.go` | Moved from `internal/api/`, package rename | +| `internal/controller/controller.go` | New file | +| `cmd/api_server.go` → `cmd/controller.go` | Rename + update | +| `cmd/api_server_start.go` → `cmd/controller_start.go` | Rename + update | +| `cmd/api_server_setup.go` → `cmd/controller_setup.go` | Rename + update | +| `cmd/start.go` | Config path updates | +| `cmd/client.go` | Config path + viper binding updates | +| `cmd/token_generate.go` | Config path updates | +| `cmd/token_validate.go` | Config path updates | +| `cmd/nats_heartbeat.go` | Import path update | +| `test/integration/integration_test.go` | Env var updates | +| `CLAUDE.md` | Architecture references | +| `docs/docs/sidebar/usage/configuration.md` | Full config reference | +| `docs/docs/sidebar/architecture/architecture.md` | Process descriptions | +| `docs/docs/sidebar/architecture/system-architecture.md` | Package layout | +| `docs/docs/sidebar/development/development.md` | Quick reference | +| `docs/docs/sidebar/features/health-checks.md` | References | +| `docs/docs/sidebar/features/notifications.md` | References | +| `docs/docs/sidebar/intro.md` | Startup commands | From 2aff7fddd33bc48b140955ebafe22670de743e0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=A0=CF=85=CE=B1=CE=B7=20=D7=A0=CF=85=CE=B1=CE=B7=D1=95?= =?UTF-8?q?=CF=83=CE=B7?= Date: Thu, 19 Mar 2026 21:43:25 -0700 Subject: [PATCH 03/12] refactor(config): rename API to Controller MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace API struct with Controller containing APIServer, Client, and NATSConnection. Update osapi.yaml config files. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- configs/osapi.yaml | 21 +++++++++------------ internal/config/types.go | 29 ++++++++++++++--------------- test/integration/osapi.yaml | 18 +++++++++--------- 3 files changed, 32 insertions(+), 36 deletions(-) diff --git a/configs/osapi.yaml b/configs/osapi.yaml index 6f9f8d66..0ecbced6 100644 --- a/configs/osapi.yaml +++ b/configs/osapi.yaml @@ -1,23 +1,13 @@ --- debug: true -api: +controller: client: url: http://0.0.0.0:8080 security: - # admin - # bearer_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlcyI6WyJhZG1pbiJdLCJpc3MiOiJvc2FwaSIsInN1YiI6ImpvaG5AZGV3ZXkud3MiLCJhdWQiOlsiaHR0cHM6Ly9sb2NhbGhvc3QiLCJodHRwOi8vbG9jYWxob3N0Il0sImV4cCI6MTc0MDg2NDIxNywiaWF0IjoxNzMyOTE1NDE3fQ.0YBwFSKXs2G16TACO-uDsIklPhaYNw63-q95IeNuneU - # read bearer_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlcyI6WyJhZG1pbiJdLCJpc3MiOiJvc2FwaSIsInN1YiI6ImpvaG5AZGV3ZXkud3MiLCJhdWQiOlsiaHR0cHM6Ly9sb2NhbGhvc3QiLCJodHRwOi8vbG9jYWxob3N0Il0sImV4cCI6MTc3ODk2MjI3MiwiaWF0IjoxNzcxMjc2MjcyfQ.G_Ezc7J1lGPQdAtWumObuCFMMi4zPIErNk7dD__66Rk - server: + api: port: 8080 - nats: - host: localhost - port: 4222 - client_name: osapi-api - namespace: osapi - auth: - type: none security: # openssl rand -hex 32 signing_key: 111fdb0cfd9788fa6af8815f856a0374bf7a0174ad62fa8b98ec07a55f68d8d8 @@ -41,6 +31,13 @@ api: # - network:read # - network:write # - health:read + nats: + host: localhost + port: 4222 + client_name: osapi-api + namespace: osapi + auth: + type: none nats: server: diff --git a/internal/config/types.go b/internal/config/types.go index bea0f8b5..5760044a 100644 --- a/internal/config/types.go +++ b/internal/config/types.go @@ -23,7 +23,7 @@ package config // Config represents the root structure of the YAML configuration file. // This struct is used to unmarshal configuration data from Viper. type Config struct { - API API `mapstructure:"api" mask:"struct"` + Controller Controller `mapstructure:"controller" mask:"struct"` Agent AgentConfig `mapstructure:"agent,omitempty"` NATS NATS `mapstructure:"nats"` Telemetry Telemetry `mapstructure:"telemetry"` @@ -227,10 +227,19 @@ type NATSConnection struct { Auth NATSAuth `mapstructure:"auth,omitempty"` } -// API configuration settings. -type API struct { - Client - Server `mask:"struct"` +// Controller holds the control plane configuration. +type Controller struct { + Client Client `mapstructure:"client"` + API APIServer `mapstructure:"api" mask:"struct"` + NATS NATSConnection `mapstructure:"nats"` +} + +// APIServer holds the HTTP server config (port + security). +type APIServer struct { + // Port the server will bind to. + Port int `mapstructure:"port"` + // Security contains security-related configuration for the server, such as CORS and tokens. + Security ServerSecurity `mapstructure:"security" mask:"struct"` } // Client configuration settings. @@ -241,16 +250,6 @@ type Client struct { Security ClientSecurity `mapstructure:"security" mask:"struct"` } -// Server configuration settings. -type Server struct { - // Port the server will bind to. - Port int `mapstructure:"port"` - // NATS connection settings for the API server. - NATS NATSConnection `mapstructure:"nats"` - // Security contains security-related configuration for the server, such as CORS and tokens. - Security ServerSecurity `mapstructure:"security" mask:"struct"` -} - // CustomRole defines a named set of permissions that can be assigned to tokens. type CustomRole struct { // Permissions granted to this role. diff --git a/test/integration/osapi.yaml b/test/integration/osapi.yaml index f7cc155f..6905c480 100644 --- a/test/integration/osapi.yaml +++ b/test/integration/osapi.yaml @@ -1,24 +1,24 @@ --- debug: false -api: +controller: client: url: http://127.0.0.1:8080 security: bearer_token: placeholder - server: + api: port: 8080 - nats: - host: localhost - port: 4222 - client_name: osapi-api-integration - namespace: "" - auth: - type: none security: signing_key: 111fdb0cfd9788fa6af8815f856a0374bf7a0174ad62fa8b98ec07a55f68d8d8 cors: allow_origins: [] + nats: + host: localhost + port: 4222 + client_name: osapi-api-integration + namespace: "" + auth: + type: none nats: server: From e9a61b0fa07367e41f14b80c0a1abba73f3a827c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=A0=CF=85=CE=B1=CE=B7=20=D7=A0=CF=85=CE=B1=CE=B7=D1=95?= =?UTF-8?q?=CF=83=CE=B7?= Date: Thu, 19 Mar 2026 22:06:27 -0700 Subject: [PATCH 04/12] refactor: move internal/api to internal/controller/api MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move heartbeat to internal/controller/ as a controller concern. Update all import paths project-wide. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- internal/{ => controller}/api/agent/agent.go | 2 +- internal/{ => controller}/api/agent/agent_drain.go | 2 +- .../{ => controller}/api/agent/agent_drain_public_test.go | 6 +++--- internal/{ => controller}/api/agent/agent_get.go | 2 +- .../{ => controller}/api/agent/agent_get_public_test.go | 6 +++--- internal/{ => controller}/api/agent/agent_list.go | 2 +- .../{ => controller}/api/agent/agent_list_public_test.go | 6 +++--- internal/{ => controller}/api/agent/agent_list_test.go | 0 internal/{ => controller}/api/agent/agent_undrain.go | 2 +- .../api/agent/agent_undrain_public_test.go | 6 +++--- internal/{ => controller}/api/agent/gen/agent.gen.go | 2 +- internal/{ => controller}/api/agent/gen/api.yaml | 0 internal/{ => controller}/api/agent/gen/cfg.yaml | 0 internal/{ => controller}/api/agent/gen/generate.go | 0 internal/{ => controller}/api/agent/types.go | 0 internal/{ => controller}/api/agent/validate.go | 0 internal/{ => controller}/api/audit/audit.go | 2 +- internal/{ => controller}/api/audit/audit_export.go | 2 +- .../api/audit/audit_export_public_test.go | 6 +++--- internal/{ => controller}/api/audit/audit_get.go | 2 +- .../{ => controller}/api/audit/audit_get_public_test.go | 6 +++--- internal/{ => controller}/api/audit/audit_list.go | 2 +- .../{ => controller}/api/audit/audit_list_public_test.go | 6 +++--- internal/{ => controller}/api/audit/fakes_public_test.go | 2 +- internal/{ => controller}/api/audit/gen/api.yaml | 0 internal/{ => controller}/api/audit/gen/audit.gen.go | 2 +- internal/{ => controller}/api/audit/gen/cfg.yaml | 0 internal/{ => controller}/api/audit/gen/generate.go | 0 internal/{ => controller}/api/audit/types.go | 0 internal/{ => controller}/api/common/gen/api.yaml | 0 internal/{ => controller}/api/common/gen/cfg.yaml | 0 internal/{ => controller}/api/common/gen/common.gen.go | 0 internal/{ => controller}/api/common/gen/generate.go | 0 internal/{ => controller}/api/docker/container.go | 2 +- internal/{ => controller}/api/docker/container_create.go | 2 +- .../api/docker/container_create_public_test.go | 6 +++--- internal/{ => controller}/api/docker/container_exec.go | 2 +- .../api/docker/container_exec_public_test.go | 6 +++--- .../{ => controller}/api/docker/container_image_remove.go | 2 +- .../api/docker/container_image_remove_public_test.go | 6 +++--- internal/{ => controller}/api/docker/container_inspect.go | 2 +- .../api/docker/container_inspect_public_test.go | 6 +++--- internal/{ => controller}/api/docker/container_list.go | 2 +- .../api/docker/container_list_public_test.go | 6 +++--- internal/{ => controller}/api/docker/container_pull.go | 2 +- .../api/docker/container_pull_public_test.go | 6 +++--- internal/{ => controller}/api/docker/container_remove.go | 2 +- .../api/docker/container_remove_public_test.go | 6 +++--- internal/{ => controller}/api/docker/container_start.go | 2 +- .../api/docker/container_start_public_test.go | 6 +++--- internal/{ => controller}/api/docker/container_stop.go | 2 +- .../api/docker/container_stop_public_test.go | 6 +++--- internal/{ => controller}/api/docker/convert.go | 0 internal/{ => controller}/api/docker/convert_test.go | 0 internal/{ => controller}/api/docker/gen/api.yaml | 0 internal/{ => controller}/api/docker/gen/cfg.yaml | 0 internal/{ => controller}/api/docker/gen/docker.gen.go | 2 +- internal/{ => controller}/api/docker/gen/generate.go | 0 .../{ => controller}/api/docker/test_ptr_public_test.go | 0 internal/{ => controller}/api/docker/types.go | 0 internal/{ => controller}/api/docker/validate.go | 0 internal/{ => controller}/api/file/file.go | 2 +- internal/{ => controller}/api/file/file_delete.go | 2 +- .../{ => controller}/api/file/file_delete_public_test.go | 8 ++++---- internal/{ => controller}/api/file/file_get.go | 2 +- .../{ => controller}/api/file/file_get_public_test.go | 8 ++++---- internal/{ => controller}/api/file/file_list.go | 2 +- .../{ => controller}/api/file/file_list_public_test.go | 8 ++++---- internal/{ => controller}/api/file/file_upload.go | 2 +- .../{ => controller}/api/file/file_upload_public_test.go | 8 ++++---- internal/{ => controller}/api/file/gen/api.yaml | 0 internal/{ => controller}/api/file/gen/cfg.yaml | 0 internal/{ => controller}/api/file/gen/file.gen.go | 2 +- internal/{ => controller}/api/file/gen/generate.go | 0 internal/{ => controller}/api/file/mocks/generate.go | 0 internal/{ => controller}/api/file/mocks/mocks.go | 0 internal/{ => controller}/api/file/mocks/types.gen.go | 0 internal/{ => controller}/api/file/types.go | 0 internal/{ => controller}/api/file/validate.go | 0 internal/{ => controller}/api/file/validate_test.go | 0 internal/{ => controller}/api/gen/api.yaml | 0 internal/{ => controller}/api/handler.go | 0 internal/{ => controller}/api/handler_agent.go | 6 +++--- internal/{ => controller}/api/handler_audit.go | 6 +++--- internal/{ => controller}/api/handler_docker.go | 6 +++--- internal/{ => controller}/api/handler_file.go | 6 +++--- internal/{ => controller}/api/handler_health.go | 6 +++--- internal/{ => controller}/api/handler_job.go | 6 +++--- internal/{ => controller}/api/handler_metrics.go | 2 +- internal/{ => controller}/api/handler_node.go | 6 +++--- internal/{ => controller}/api/handler_public_test.go | 6 +++--- internal/{ => controller}/api/health/checker.go | 0 .../{ => controller}/api/health/checker_public_test.go | 2 +- internal/{ => controller}/api/health/gen/api.yaml | 0 internal/{ => controller}/api/health/gen/cfg.yaml | 0 internal/{ => controller}/api/health/gen/generate.go | 0 internal/{ => controller}/api/health/gen/health.gen.go | 2 +- internal/{ => controller}/api/health/health.go | 2 +- internal/{ => controller}/api/health/health_get.go | 2 +- .../{ => controller}/api/health/health_get_public_test.go | 6 +++--- internal/{ => controller}/api/health/health_ready_get.go | 2 +- .../api/health/health_ready_get_public_test.go | 6 +++--- internal/{ => controller}/api/health/health_status_get.go | 2 +- .../api/health/health_status_get_public_test.go | 6 +++--- internal/{ => controller}/api/health/types.go | 0 internal/{ => controller}/api/job/gen/api.yaml | 0 internal/{ => controller}/api/job/gen/cfg.yaml | 0 internal/{ => controller}/api/job/gen/generate.go | 0 internal/{ => controller}/api/job/gen/job.gen.go | 2 +- internal/{ => controller}/api/job/job.go | 2 +- internal/{ => controller}/api/job/job_delete.go | 2 +- .../{ => controller}/api/job/job_delete_public_test.go | 6 +++--- internal/{ => controller}/api/job/job_get.go | 2 +- internal/{ => controller}/api/job/job_get_public_test.go | 6 +++--- internal/{ => controller}/api/job/job_list.go | 2 +- internal/{ => controller}/api/job/job_list_public_test.go | 6 +++--- internal/{ => controller}/api/job/job_retry.go | 2 +- .../{ => controller}/api/job/job_retry_public_test.go | 6 +++--- internal/{ => controller}/api/job/types.go | 0 internal/{ => controller}/api/metrics/metrics.go | 0 internal/{ => controller}/api/metrics/metrics_get.go | 0 .../api/metrics/metrics_get_public_test.go | 4 ++-- internal/{ => controller}/api/metrics/types.go | 0 internal/{ => controller}/api/middleware.go | 2 +- internal/{ => controller}/api/middleware_audit.go | 0 internal/{ => controller}/api/middleware_audit_test.go | 0 internal/{ => controller}/api/middleware_test.go | 0 internal/{ => controller}/api/node/command_exec_post.go | 2 +- .../api/node/command_exec_post_public_test.go | 6 +++--- internal/{ => controller}/api/node/command_shell_post.go | 2 +- .../api/node/command_shell_post_public_test.go | 6 +++--- internal/{ => controller}/api/node/file_deploy_post.go | 2 +- .../api/node/file_deploy_post_public_test.go | 6 +++--- internal/{ => controller}/api/node/file_status_post.go | 2 +- .../api/node/file_status_post_public_test.go | 6 +++--- internal/{ => controller}/api/node/gen/api.yaml | 0 internal/{ => controller}/api/node/gen/cfg.yaml | 0 internal/{ => controller}/api/node/gen/generate.go | 0 internal/{ => controller}/api/node/gen/node.gen.go | 2 +- .../api/node/network_dns_get_by_interface.go | 2 +- .../api/node/network_dns_get_by_interface_public_test.go | 6 +++--- .../api/node/network_dns_put_by_interface.go | 2 +- .../api/node/network_dns_put_by_interface_public_test.go | 6 +++--- internal/{ => controller}/api/node/network_ping_post.go | 2 +- .../api/node/network_ping_post_public_test.go | 6 +++--- internal/{ => controller}/api/node/node.go | 2 +- internal/{ => controller}/api/node/node_disk_get.go | 2 +- .../api/node/node_disk_get_public_test.go | 6 +++--- internal/{ => controller}/api/node/node_hostname_get.go | 2 +- .../api/node/node_hostname_get_public_test.go | 6 +++--- internal/{ => controller}/api/node/node_load_get.go | 2 +- .../api/node/node_load_get_public_test.go | 6 +++--- internal/{ => controller}/api/node/node_memory_get.go | 2 +- .../api/node/node_memory_get_public_test.go | 6 +++--- internal/{ => controller}/api/node/node_os_get.go | 2 +- .../{ => controller}/api/node/node_os_get_public_test.go | 6 +++--- internal/{ => controller}/api/node/node_status_get.go | 2 +- .../api/node/node_status_get_public_test.go | 6 +++--- .../{ => controller}/api/node/node_status_get_test.go | 0 internal/{ => controller}/api/node/node_uptime_get.go | 2 +- .../api/node/node_uptime_get_public_test.go | 6 +++--- internal/{ => controller}/api/node/types.go | 0 internal/{ => controller}/api/node/validate.go | 0 internal/{ => controller}/api/server.go | 6 +++--- internal/{ => controller}/api/server_public_test.go | 2 +- internal/{ => controller}/api/types.go | 0 internal/{api => controller}/heartbeat.go | 2 +- internal/{api => controller}/heartbeat_test.go | 2 +- 168 files changed, 218 insertions(+), 218 deletions(-) rename internal/{ => controller}/api/agent/agent.go (96%) rename internal/{ => controller}/api/agent/agent_drain.go (97%) rename internal/{ => controller}/api/agent/agent_drain_public_test.go (98%) rename internal/{ => controller}/api/agent/agent_get.go (96%) rename internal/{ => controller}/api/agent/agent_get_public_test.go (98%) rename internal/{ => controller}/api/agent/agent_list.go (99%) rename internal/{ => controller}/api/agent/agent_list_public_test.go (98%) rename internal/{ => controller}/api/agent/agent_list_test.go (100%) rename internal/{ => controller}/api/agent/agent_undrain.go (97%) rename internal/{ => controller}/api/agent/agent_undrain_public_test.go (98%) rename internal/{ => controller}/api/agent/gen/agent.gen.go (99%) rename internal/{ => controller}/api/agent/gen/api.yaml (100%) rename internal/{ => controller}/api/agent/gen/cfg.yaml (100%) rename internal/{ => controller}/api/agent/gen/generate.go (100%) rename internal/{ => controller}/api/agent/types.go (100%) rename internal/{ => controller}/api/agent/validate.go (100%) rename internal/{ => controller}/api/audit/audit.go (96%) rename internal/{ => controller}/api/audit/audit_export.go (96%) rename internal/{ => controller}/api/audit/audit_export_public_test.go (97%) rename internal/{ => controller}/api/audit/audit_get.go (96%) rename internal/{ => controller}/api/audit/audit_get_public_test.go (97%) rename internal/{ => controller}/api/audit/audit_list.go (97%) rename internal/{ => controller}/api/audit/audit_list_public_test.go (98%) rename internal/{ => controller}/api/audit/fakes_public_test.go (97%) rename internal/{ => controller}/api/audit/gen/api.yaml (100%) rename internal/{ => controller}/api/audit/gen/audit.gen.go (99%) rename internal/{ => controller}/api/audit/gen/cfg.yaml (100%) rename internal/{ => controller}/api/audit/gen/generate.go (100%) rename internal/{ => controller}/api/audit/types.go (100%) rename internal/{ => controller}/api/common/gen/api.yaml (100%) rename internal/{ => controller}/api/common/gen/cfg.yaml (100%) rename internal/{ => controller}/api/common/gen/common.gen.go (100%) rename internal/{ => controller}/api/common/gen/generate.go (100%) rename internal/{ => controller}/api/docker/container.go (96%) rename internal/{ => controller}/api/docker/container_create.go (97%) rename internal/{ => controller}/api/docker/container_create_public_test.go (98%) rename internal/{ => controller}/api/docker/container_exec.go (98%) rename internal/{ => controller}/api/docker/container_exec_public_test.go (98%) rename internal/{ => controller}/api/docker/container_image_remove.go (97%) rename internal/{ => controller}/api/docker/container_image_remove_public_test.go (98%) rename internal/{ => controller}/api/docker/container_inspect.go (98%) rename internal/{ => controller}/api/docker/container_inspect_public_test.go (98%) rename internal/{ => controller}/api/docker/container_list.go (98%) rename internal/{ => controller}/api/docker/container_list_public_test.go (98%) rename internal/{ => controller}/api/docker/container_pull.go (97%) rename internal/{ => controller}/api/docker/container_pull_public_test.go (98%) rename internal/{ => controller}/api/docker/container_remove.go (97%) rename internal/{ => controller}/api/docker/container_remove_public_test.go (98%) rename internal/{ => controller}/api/docker/container_start.go (97%) rename internal/{ => controller}/api/docker/container_start_public_test.go (98%) rename internal/{ => controller}/api/docker/container_stop.go (97%) rename internal/{ => controller}/api/docker/container_stop_public_test.go (98%) rename internal/{ => controller}/api/docker/convert.go (100%) rename internal/{ => controller}/api/docker/convert_test.go (100%) rename internal/{ => controller}/api/docker/gen/api.yaml (100%) rename internal/{ => controller}/api/docker/gen/cfg.yaml (100%) rename internal/{ => controller}/api/docker/gen/docker.gen.go (99%) rename internal/{ => controller}/api/docker/gen/generate.go (100%) rename internal/{ => controller}/api/docker/test_ptr_public_test.go (100%) rename internal/{ => controller}/api/docker/types.go (100%) rename internal/{ => controller}/api/docker/validate.go (100%) rename internal/{ => controller}/api/file/file.go (96%) rename internal/{ => controller}/api/file/file_delete.go (97%) rename internal/{ => controller}/api/file/file_delete_public_test.go (97%) rename internal/{ => controller}/api/file/file_get.go (97%) rename internal/{ => controller}/api/file/file_get_public_test.go (97%) rename internal/{ => controller}/api/file/file_list.go (97%) rename internal/{ => controller}/api/file/file_list_public_test.go (97%) rename internal/{ => controller}/api/file/file_upload.go (98%) rename internal/{ => controller}/api/file/file_upload_public_test.go (98%) rename internal/{ => controller}/api/file/gen/api.yaml (100%) rename internal/{ => controller}/api/file/gen/cfg.yaml (100%) rename internal/{ => controller}/api/file/gen/file.gen.go (99%) rename internal/{ => controller}/api/file/gen/generate.go (100%) rename internal/{ => controller}/api/file/mocks/generate.go (100%) rename internal/{ => controller}/api/file/mocks/mocks.go (100%) rename internal/{ => controller}/api/file/mocks/types.gen.go (100%) rename internal/{ => controller}/api/file/types.go (100%) rename internal/{ => controller}/api/file/validate.go (100%) rename internal/{ => controller}/api/file/validate_test.go (100%) rename internal/{ => controller}/api/gen/api.yaml (100%) rename internal/{ => controller}/api/handler.go (100%) rename internal/{ => controller}/api/handler_agent.go (91%) rename internal/{ => controller}/api/handler_audit.go (91%) rename internal/{ => controller}/api/handler_docker.go (91%) rename internal/{ => controller}/api/handler_file.go (91%) rename internal/{ => controller}/api/handler_health.go (92%) rename internal/{ => controller}/api/handler_job.go (91%) rename internal/{ => controller}/api/handler_metrics.go (96%) rename internal/{ => controller}/api/handler_node.go (91%) rename internal/{ => controller}/api/handler_public_test.go (98%) rename internal/{ => controller}/api/health/checker.go (100%) rename internal/{ => controller}/api/health/checker_public_test.go (98%) rename internal/{ => controller}/api/health/gen/api.yaml (100%) rename internal/{ => controller}/api/health/gen/cfg.yaml (100%) rename internal/{ => controller}/api/health/gen/generate.go (100%) rename internal/{ => controller}/api/health/gen/health.gen.go (99%) rename internal/{ => controller}/api/health/health.go (96%) rename internal/{ => controller}/api/health/health_get.go (95%) rename internal/{ => controller}/api/health/health_get_public_test.go (94%) rename internal/{ => controller}/api/health/health_ready_get.go (96%) rename internal/{ => controller}/api/health/health_ready_get_public_test.go (96%) rename internal/{ => controller}/api/health/health_status_get.go (99%) rename internal/{ => controller}/api/health/health_status_get_public_test.go (99%) rename internal/{ => controller}/api/health/types.go (100%) rename internal/{ => controller}/api/job/gen/api.yaml (100%) rename internal/{ => controller}/api/job/gen/cfg.yaml (100%) rename internal/{ => controller}/api/job/gen/generate.go (100%) rename internal/{ => controller}/api/job/gen/job.gen.go (99%) rename internal/{ => controller}/api/job/job.go (96%) rename internal/{ => controller}/api/job/job_delete.go (96%) rename internal/{ => controller}/api/job/job_delete_public_test.go (97%) rename internal/{ => controller}/api/job/job_get.go (98%) rename internal/{ => controller}/api/job/job_get_public_test.go (99%) rename internal/{ => controller}/api/job/job_list.go (98%) rename internal/{ => controller}/api/job/job_list_public_test.go (98%) rename internal/{ => controller}/api/job/job_retry.go (97%) rename internal/{ => controller}/api/job/job_retry_public_test.go (98%) rename internal/{ => controller}/api/job/types.go (100%) rename internal/{ => controller}/api/metrics/metrics.go (100%) rename internal/{ => controller}/api/metrics/metrics_get.go (100%) rename internal/{ => controller}/api/metrics/metrics_get_public_test.go (97%) rename internal/{ => controller}/api/metrics/types.go (100%) rename internal/{ => controller}/api/middleware.go (98%) rename internal/{ => controller}/api/middleware_audit.go (100%) rename internal/{ => controller}/api/middleware_audit_test.go (100%) rename internal/{ => controller}/api/middleware_test.go (100%) rename internal/{ => controller}/api/node/command_exec_post.go (98%) rename internal/{ => controller}/api/node/command_exec_post_public_test.go (98%) rename internal/{ => controller}/api/node/command_shell_post.go (98%) rename internal/{ => controller}/api/node/command_shell_post_public_test.go (98%) rename internal/{ => controller}/api/node/file_deploy_post.go (97%) rename internal/{ => controller}/api/node/file_deploy_post_public_test.go (98%) rename internal/{ => controller}/api/node/file_status_post.go (97%) rename internal/{ => controller}/api/node/file_status_post_public_test.go (98%) rename internal/{ => controller}/api/node/gen/api.yaml (100%) rename internal/{ => controller}/api/node/gen/cfg.yaml (100%) rename internal/{ => controller}/api/node/gen/generate.go (100%) rename internal/{ => controller}/api/node/gen/node.gen.go (99%) rename internal/{ => controller}/api/node/network_dns_get_by_interface.go (98%) rename internal/{ => controller}/api/node/network_dns_get_by_interface_public_test.go (98%) rename internal/{ => controller}/api/node/network_dns_put_by_interface.go (98%) rename internal/{ => controller}/api/node/network_dns_put_by_interface_public_test.go (98%) rename internal/{ => controller}/api/node/network_ping_post.go (98%) rename internal/{ => controller}/api/node/network_ping_post_public_test.go (98%) rename internal/{ => controller}/api/node/node.go (96%) rename internal/{ => controller}/api/node/node_disk_get.go (98%) rename internal/{ => controller}/api/node/node_disk_get_public_test.go (98%) rename internal/{ => controller}/api/node/node_hostname_get.go (98%) rename internal/{ => controller}/api/node/node_hostname_get_public_test.go (98%) rename internal/{ => controller}/api/node/node_load_get.go (98%) rename internal/{ => controller}/api/node/node_load_get_public_test.go (98%) rename internal/{ => controller}/api/node/node_memory_get.go (98%) rename internal/{ => controller}/api/node/node_memory_get_public_test.go (98%) rename internal/{ => controller}/api/node/node_os_get.go (98%) rename internal/{ => controller}/api/node/node_os_get_public_test.go (98%) rename internal/{ => controller}/api/node/node_status_get.go (98%) rename internal/{ => controller}/api/node/node_status_get_public_test.go (98%) rename internal/{ => controller}/api/node/node_status_get_test.go (100%) rename internal/{ => controller}/api/node/node_uptime_get.go (98%) rename internal/{ => controller}/api/node/node_uptime_get_public_test.go (98%) rename internal/{ => controller}/api/node/types.go (100%) rename internal/{ => controller}/api/node/validate.go (100%) rename internal/{ => controller}/api/server.go (93%) rename internal/{ => controller}/api/server_public_test.go (99%) rename internal/{ => controller}/api/types.go (100%) rename internal/{api => controller}/heartbeat.go (99%) rename internal/{api => controller}/heartbeat_test.go (99%) diff --git a/internal/api/agent/agent.go b/internal/controller/api/agent/agent.go similarity index 96% rename from internal/api/agent/agent.go rename to internal/controller/api/agent/agent.go index 0a0a0cd9..321b3e40 100644 --- a/internal/api/agent/agent.go +++ b/internal/controller/api/agent/agent.go @@ -24,7 +24,7 @@ package agent import ( "log/slog" - "github.com/retr0h/osapi/internal/api/agent/gen" + "github.com/retr0h/osapi/internal/controller/api/agent/gen" "github.com/retr0h/osapi/internal/job/client" ) diff --git a/internal/api/agent/agent_drain.go b/internal/controller/api/agent/agent_drain.go similarity index 97% rename from internal/api/agent/agent_drain.go rename to internal/controller/api/agent/agent_drain.go index 9bedd39a..27cc507b 100644 --- a/internal/api/agent/agent_drain.go +++ b/internal/controller/api/agent/agent_drain.go @@ -25,7 +25,7 @@ import ( "fmt" "strings" - "github.com/retr0h/osapi/internal/api/agent/gen" + "github.com/retr0h/osapi/internal/controller/api/agent/gen" "github.com/retr0h/osapi/internal/job" ) diff --git a/internal/api/agent/agent_drain_public_test.go b/internal/controller/api/agent/agent_drain_public_test.go similarity index 98% rename from internal/api/agent/agent_drain_public_test.go rename to internal/controller/api/agent/agent_drain_public_test.go index 002e8a3e..da87121d 100644 --- a/internal/api/agent/agent_drain_public_test.go +++ b/internal/controller/api/agent/agent_drain_public_test.go @@ -33,9 +33,9 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apiagent "github.com/retr0h/osapi/internal/api/agent" - "github.com/retr0h/osapi/internal/api/agent/gen" + "github.com/retr0h/osapi/internal/controller/api" + apiagent "github.com/retr0h/osapi/internal/controller/api/agent" + "github.com/retr0h/osapi/internal/controller/api/agent/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" jobtypes "github.com/retr0h/osapi/internal/job" diff --git a/internal/api/agent/agent_get.go b/internal/controller/api/agent/agent_get.go similarity index 96% rename from internal/api/agent/agent_get.go rename to internal/controller/api/agent/agent_get.go index be5e733d..d9e05da0 100644 --- a/internal/api/agent/agent_get.go +++ b/internal/controller/api/agent/agent_get.go @@ -24,7 +24,7 @@ import ( "context" "strings" - "github.com/retr0h/osapi/internal/api/agent/gen" + "github.com/retr0h/osapi/internal/controller/api/agent/gen" ) // GetAgentDetails retrieves detailed information about a specific agent. diff --git a/internal/api/agent/agent_get_public_test.go b/internal/controller/api/agent/agent_get_public_test.go similarity index 98% rename from internal/api/agent/agent_get_public_test.go rename to internal/controller/api/agent/agent_get_public_test.go index 22e846a4..d3b27d06 100644 --- a/internal/api/agent/agent_get_public_test.go +++ b/internal/controller/api/agent/agent_get_public_test.go @@ -34,9 +34,9 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apiagent "github.com/retr0h/osapi/internal/api/agent" - "github.com/retr0h/osapi/internal/api/agent/gen" + "github.com/retr0h/osapi/internal/controller/api" + apiagent "github.com/retr0h/osapi/internal/controller/api/agent" + "github.com/retr0h/osapi/internal/controller/api/agent/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" jobtypes "github.com/retr0h/osapi/internal/job" diff --git a/internal/api/agent/agent_list.go b/internal/controller/api/agent/agent_list.go similarity index 99% rename from internal/api/agent/agent_list.go rename to internal/controller/api/agent/agent_list.go index 9b72a693..387ffc11 100644 --- a/internal/api/agent/agent_list.go +++ b/internal/controller/api/agent/agent_list.go @@ -25,7 +25,7 @@ import ( "fmt" "time" - "github.com/retr0h/osapi/internal/api/agent/gen" + "github.com/retr0h/osapi/internal/controller/api/agent/gen" "github.com/retr0h/osapi/internal/job" ) diff --git a/internal/api/agent/agent_list_public_test.go b/internal/controller/api/agent/agent_list_public_test.go similarity index 98% rename from internal/api/agent/agent_list_public_test.go rename to internal/controller/api/agent/agent_list_public_test.go index 4818b557..213d25a3 100644 --- a/internal/api/agent/agent_list_public_test.go +++ b/internal/controller/api/agent/agent_list_public_test.go @@ -34,9 +34,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apiagent "github.com/retr0h/osapi/internal/api/agent" - "github.com/retr0h/osapi/internal/api/agent/gen" + "github.com/retr0h/osapi/internal/controller/api" + apiagent "github.com/retr0h/osapi/internal/controller/api/agent" + "github.com/retr0h/osapi/internal/controller/api/agent/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" jobtypes "github.com/retr0h/osapi/internal/job" diff --git a/internal/api/agent/agent_list_test.go b/internal/controller/api/agent/agent_list_test.go similarity index 100% rename from internal/api/agent/agent_list_test.go rename to internal/controller/api/agent/agent_list_test.go diff --git a/internal/api/agent/agent_undrain.go b/internal/controller/api/agent/agent_undrain.go similarity index 97% rename from internal/api/agent/agent_undrain.go rename to internal/controller/api/agent/agent_undrain.go index 84b9e376..247f675d 100644 --- a/internal/api/agent/agent_undrain.go +++ b/internal/controller/api/agent/agent_undrain.go @@ -25,7 +25,7 @@ import ( "fmt" "strings" - "github.com/retr0h/osapi/internal/api/agent/gen" + "github.com/retr0h/osapi/internal/controller/api/agent/gen" "github.com/retr0h/osapi/internal/job" ) diff --git a/internal/api/agent/agent_undrain_public_test.go b/internal/controller/api/agent/agent_undrain_public_test.go similarity index 98% rename from internal/api/agent/agent_undrain_public_test.go rename to internal/controller/api/agent/agent_undrain_public_test.go index 3ebab922..8a051e45 100644 --- a/internal/api/agent/agent_undrain_public_test.go +++ b/internal/controller/api/agent/agent_undrain_public_test.go @@ -33,9 +33,9 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apiagent "github.com/retr0h/osapi/internal/api/agent" - "github.com/retr0h/osapi/internal/api/agent/gen" + "github.com/retr0h/osapi/internal/controller/api" + apiagent "github.com/retr0h/osapi/internal/controller/api/agent" + "github.com/retr0h/osapi/internal/controller/api/agent/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" jobtypes "github.com/retr0h/osapi/internal/job" diff --git a/internal/api/agent/gen/agent.gen.go b/internal/controller/api/agent/gen/agent.gen.go similarity index 99% rename from internal/api/agent/gen/agent.gen.go rename to internal/controller/api/agent/gen/agent.gen.go index 9c0f4d19..9c03d731 100644 --- a/internal/api/agent/gen/agent.gen.go +++ b/internal/controller/api/agent/gen/agent.gen.go @@ -13,7 +13,7 @@ import ( "github.com/labstack/echo/v4" "github.com/oapi-codegen/runtime" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" - externalRef0 "github.com/retr0h/osapi/internal/api/common/gen" + externalRef0 "github.com/retr0h/osapi/internal/controller/api/common/gen" ) const ( diff --git a/internal/api/agent/gen/api.yaml b/internal/controller/api/agent/gen/api.yaml similarity index 100% rename from internal/api/agent/gen/api.yaml rename to internal/controller/api/agent/gen/api.yaml diff --git a/internal/api/agent/gen/cfg.yaml b/internal/controller/api/agent/gen/cfg.yaml similarity index 100% rename from internal/api/agent/gen/cfg.yaml rename to internal/controller/api/agent/gen/cfg.yaml diff --git a/internal/api/agent/gen/generate.go b/internal/controller/api/agent/gen/generate.go similarity index 100% rename from internal/api/agent/gen/generate.go rename to internal/controller/api/agent/gen/generate.go diff --git a/internal/api/agent/types.go b/internal/controller/api/agent/types.go similarity index 100% rename from internal/api/agent/types.go rename to internal/controller/api/agent/types.go diff --git a/internal/api/agent/validate.go b/internal/controller/api/agent/validate.go similarity index 100% rename from internal/api/agent/validate.go rename to internal/controller/api/agent/validate.go diff --git a/internal/api/audit/audit.go b/internal/controller/api/audit/audit.go similarity index 96% rename from internal/api/audit/audit.go rename to internal/controller/api/audit/audit.go index cc727ac2..c42661fb 100644 --- a/internal/api/audit/audit.go +++ b/internal/controller/api/audit/audit.go @@ -24,7 +24,7 @@ package audit import ( "log/slog" - "github.com/retr0h/osapi/internal/api/audit/gen" + "github.com/retr0h/osapi/internal/controller/api/audit/gen" auditstore "github.com/retr0h/osapi/internal/audit" ) diff --git a/internal/api/audit/audit_export.go b/internal/controller/api/audit/audit_export.go similarity index 96% rename from internal/api/audit/audit_export.go rename to internal/controller/api/audit/audit_export.go index 5070fe74..51cecec1 100644 --- a/internal/api/audit/audit_export.go +++ b/internal/controller/api/audit/audit_export.go @@ -24,7 +24,7 @@ import ( "context" "log/slog" - "github.com/retr0h/osapi/internal/api/audit/gen" + "github.com/retr0h/osapi/internal/controller/api/audit/gen" ) // GetAuditExport returns all audit log entries without pagination. diff --git a/internal/api/audit/audit_export_public_test.go b/internal/controller/api/audit/audit_export_public_test.go similarity index 97% rename from internal/api/audit/audit_export_public_test.go rename to internal/controller/api/audit/audit_export_public_test.go index 7ca1ece0..ea580dbb 100644 --- a/internal/api/audit/audit_export_public_test.go +++ b/internal/controller/api/audit/audit_export_public_test.go @@ -32,9 +32,9 @@ import ( "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - auditapi "github.com/retr0h/osapi/internal/api/audit" - "github.com/retr0h/osapi/internal/api/audit/gen" + "github.com/retr0h/osapi/internal/controller/api" + auditapi "github.com/retr0h/osapi/internal/controller/api/audit" + "github.com/retr0h/osapi/internal/controller/api/audit/gen" auditstore "github.com/retr0h/osapi/internal/audit" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" diff --git a/internal/api/audit/audit_get.go b/internal/controller/api/audit/audit_get.go similarity index 96% rename from internal/api/audit/audit_get.go rename to internal/controller/api/audit/audit_get.go index d971389e..ea7d336e 100644 --- a/internal/api/audit/audit_get.go +++ b/internal/controller/api/audit/audit_get.go @@ -25,7 +25,7 @@ import ( "log/slog" "strings" - "github.com/retr0h/osapi/internal/api/audit/gen" + "github.com/retr0h/osapi/internal/controller/api/audit/gen" ) // GetAuditLogByID returns a single audit log entry by ID. diff --git a/internal/api/audit/audit_get_public_test.go b/internal/controller/api/audit/audit_get_public_test.go similarity index 97% rename from internal/api/audit/audit_get_public_test.go rename to internal/controller/api/audit/audit_get_public_test.go index f9df38a5..55c0275b 100644 --- a/internal/api/audit/audit_get_public_test.go +++ b/internal/controller/api/audit/audit_get_public_test.go @@ -34,9 +34,9 @@ import ( openapi_types "github.com/oapi-codegen/runtime/types" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - auditapi "github.com/retr0h/osapi/internal/api/audit" - "github.com/retr0h/osapi/internal/api/audit/gen" + "github.com/retr0h/osapi/internal/controller/api" + auditapi "github.com/retr0h/osapi/internal/controller/api/audit" + "github.com/retr0h/osapi/internal/controller/api/audit/gen" auditstore "github.com/retr0h/osapi/internal/audit" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" diff --git a/internal/api/audit/audit_list.go b/internal/controller/api/audit/audit_list.go similarity index 97% rename from internal/api/audit/audit_list.go rename to internal/controller/api/audit/audit_list.go index 4a7181c8..0245fd80 100644 --- a/internal/api/audit/audit_list.go +++ b/internal/controller/api/audit/audit_list.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/audit/gen" + "github.com/retr0h/osapi/internal/controller/api/audit/gen" auditstore "github.com/retr0h/osapi/internal/audit" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/audit/audit_list_public_test.go b/internal/controller/api/audit/audit_list_public_test.go similarity index 98% rename from internal/api/audit/audit_list_public_test.go rename to internal/controller/api/audit/audit_list_public_test.go index 8b4cabe5..c0a64b91 100644 --- a/internal/api/audit/audit_list_public_test.go +++ b/internal/controller/api/audit/audit_list_public_test.go @@ -32,9 +32,9 @@ import ( "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - auditapi "github.com/retr0h/osapi/internal/api/audit" - "github.com/retr0h/osapi/internal/api/audit/gen" + "github.com/retr0h/osapi/internal/controller/api" + auditapi "github.com/retr0h/osapi/internal/controller/api/audit" + "github.com/retr0h/osapi/internal/controller/api/audit/gen" auditstore "github.com/retr0h/osapi/internal/audit" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" diff --git a/internal/api/audit/fakes_public_test.go b/internal/controller/api/audit/fakes_public_test.go similarity index 97% rename from internal/api/audit/fakes_public_test.go rename to internal/controller/api/audit/fakes_public_test.go index 5683c2f4..ef73f949 100644 --- a/internal/api/audit/fakes_public_test.go +++ b/internal/controller/api/audit/fakes_public_test.go @@ -24,7 +24,7 @@ import ( "context" "log/slog" - auditapi "github.com/retr0h/osapi/internal/api/audit" + auditapi "github.com/retr0h/osapi/internal/controller/api/audit" auditstore "github.com/retr0h/osapi/internal/audit" ) diff --git a/internal/api/audit/gen/api.yaml b/internal/controller/api/audit/gen/api.yaml similarity index 100% rename from internal/api/audit/gen/api.yaml rename to internal/controller/api/audit/gen/api.yaml diff --git a/internal/api/audit/gen/audit.gen.go b/internal/controller/api/audit/gen/audit.gen.go similarity index 99% rename from internal/api/audit/gen/audit.gen.go rename to internal/controller/api/audit/gen/audit.gen.go index 5d18f94a..44c7c56e 100644 --- a/internal/api/audit/gen/audit.gen.go +++ b/internal/controller/api/audit/gen/audit.gen.go @@ -14,7 +14,7 @@ import ( "github.com/oapi-codegen/runtime" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" openapi_types "github.com/oapi-codegen/runtime/types" - externalRef0 "github.com/retr0h/osapi/internal/api/common/gen" + externalRef0 "github.com/retr0h/osapi/internal/controller/api/common/gen" ) const ( diff --git a/internal/api/audit/gen/cfg.yaml b/internal/controller/api/audit/gen/cfg.yaml similarity index 100% rename from internal/api/audit/gen/cfg.yaml rename to internal/controller/api/audit/gen/cfg.yaml diff --git a/internal/api/audit/gen/generate.go b/internal/controller/api/audit/gen/generate.go similarity index 100% rename from internal/api/audit/gen/generate.go rename to internal/controller/api/audit/gen/generate.go diff --git a/internal/api/audit/types.go b/internal/controller/api/audit/types.go similarity index 100% rename from internal/api/audit/types.go rename to internal/controller/api/audit/types.go diff --git a/internal/api/common/gen/api.yaml b/internal/controller/api/common/gen/api.yaml similarity index 100% rename from internal/api/common/gen/api.yaml rename to internal/controller/api/common/gen/api.yaml diff --git a/internal/api/common/gen/cfg.yaml b/internal/controller/api/common/gen/cfg.yaml similarity index 100% rename from internal/api/common/gen/cfg.yaml rename to internal/controller/api/common/gen/cfg.yaml diff --git a/internal/api/common/gen/common.gen.go b/internal/controller/api/common/gen/common.gen.go similarity index 100% rename from internal/api/common/gen/common.gen.go rename to internal/controller/api/common/gen/common.gen.go diff --git a/internal/api/common/gen/generate.go b/internal/controller/api/common/gen/generate.go similarity index 100% rename from internal/api/common/gen/generate.go rename to internal/controller/api/common/gen/generate.go diff --git a/internal/api/docker/container.go b/internal/controller/api/docker/container.go similarity index 96% rename from internal/api/docker/container.go rename to internal/controller/api/docker/container.go index affe0702..18202f42 100644 --- a/internal/api/docker/container.go +++ b/internal/controller/api/docker/container.go @@ -24,7 +24,7 @@ package container import ( "log/slog" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job/client" ) diff --git a/internal/api/docker/container_create.go b/internal/controller/api/docker/container_create.go similarity index 97% rename from internal/api/docker/container_create.go rename to internal/controller/api/docker/container_create.go index b147458e..f02e62e3 100644 --- a/internal/api/docker/container_create.go +++ b/internal/controller/api/docker/container_create.go @@ -27,7 +27,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/docker/container_create_public_test.go b/internal/controller/api/docker/container_create_public_test.go similarity index 98% rename from internal/api/docker/container_create_public_test.go rename to internal/controller/api/docker/container_create_public_test.go index 85893a52..0ab903de 100644 --- a/internal/api/docker/container_create_public_test.go +++ b/internal/controller/api/docker/container_create_public_test.go @@ -35,9 +35,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apicontainer "github.com/retr0h/osapi/internal/api/docker" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api" + apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" diff --git a/internal/api/docker/container_exec.go b/internal/controller/api/docker/container_exec.go similarity index 98% rename from internal/api/docker/container_exec.go rename to internal/controller/api/docker/container_exec.go index 2704aac6..0b96c417 100644 --- a/internal/api/docker/container_exec.go +++ b/internal/controller/api/docker/container_exec.go @@ -27,7 +27,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/docker/container_exec_public_test.go b/internal/controller/api/docker/container_exec_public_test.go similarity index 98% rename from internal/api/docker/container_exec_public_test.go rename to internal/controller/api/docker/container_exec_public_test.go index 5b59f734..38fa40e9 100644 --- a/internal/api/docker/container_exec_public_test.go +++ b/internal/controller/api/docker/container_exec_public_test.go @@ -35,9 +35,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apicontainer "github.com/retr0h/osapi/internal/api/docker" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api" + apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" diff --git a/internal/api/docker/container_image_remove.go b/internal/controller/api/docker/container_image_remove.go similarity index 97% rename from internal/api/docker/container_image_remove.go rename to internal/controller/api/docker/container_image_remove.go index 8df98dd7..f10bcf99 100644 --- a/internal/api/docker/container_image_remove.go +++ b/internal/controller/api/docker/container_image_remove.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/docker/container_image_remove_public_test.go b/internal/controller/api/docker/container_image_remove_public_test.go similarity index 98% rename from internal/api/docker/container_image_remove_public_test.go rename to internal/controller/api/docker/container_image_remove_public_test.go index debf424c..f52f4a3f 100644 --- a/internal/api/docker/container_image_remove_public_test.go +++ b/internal/controller/api/docker/container_image_remove_public_test.go @@ -33,9 +33,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apicontainer "github.com/retr0h/osapi/internal/api/docker" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api" + apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" diff --git a/internal/api/docker/container_inspect.go b/internal/controller/api/docker/container_inspect.go similarity index 98% rename from internal/api/docker/container_inspect.go rename to internal/controller/api/docker/container_inspect.go index 700b6177..8303082f 100644 --- a/internal/api/docker/container_inspect.go +++ b/internal/controller/api/docker/container_inspect.go @@ -27,7 +27,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/docker/container_inspect_public_test.go b/internal/controller/api/docker/container_inspect_public_test.go similarity index 98% rename from internal/api/docker/container_inspect_public_test.go rename to internal/controller/api/docker/container_inspect_public_test.go index 25488f12..fa5d811f 100644 --- a/internal/api/docker/container_inspect_public_test.go +++ b/internal/controller/api/docker/container_inspect_public_test.go @@ -34,9 +34,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apicontainer "github.com/retr0h/osapi/internal/api/docker" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api" + apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" diff --git a/internal/api/docker/container_list.go b/internal/controller/api/docker/container_list.go similarity index 98% rename from internal/api/docker/container_list.go rename to internal/controller/api/docker/container_list.go index b4e4dbb4..2e43ef7e 100644 --- a/internal/api/docker/container_list.go +++ b/internal/controller/api/docker/container_list.go @@ -27,7 +27,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/docker/container_list_public_test.go b/internal/controller/api/docker/container_list_public_test.go similarity index 98% rename from internal/api/docker/container_list_public_test.go rename to internal/controller/api/docker/container_list_public_test.go index 61f9427b..b6f14b75 100644 --- a/internal/api/docker/container_list_public_test.go +++ b/internal/controller/api/docker/container_list_public_test.go @@ -34,9 +34,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apicontainer "github.com/retr0h/osapi/internal/api/docker" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api" + apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" diff --git a/internal/api/docker/container_pull.go b/internal/controller/api/docker/container_pull.go similarity index 97% rename from internal/api/docker/container_pull.go rename to internal/controller/api/docker/container_pull.go index f42963c6..e53f2776 100644 --- a/internal/api/docker/container_pull.go +++ b/internal/controller/api/docker/container_pull.go @@ -27,7 +27,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/docker/container_pull_public_test.go b/internal/controller/api/docker/container_pull_public_test.go similarity index 98% rename from internal/api/docker/container_pull_public_test.go rename to internal/controller/api/docker/container_pull_public_test.go index fd82c77a..327af4f2 100644 --- a/internal/api/docker/container_pull_public_test.go +++ b/internal/controller/api/docker/container_pull_public_test.go @@ -35,9 +35,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apicontainer "github.com/retr0h/osapi/internal/api/docker" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api" + apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" diff --git a/internal/api/docker/container_remove.go b/internal/controller/api/docker/container_remove.go similarity index 97% rename from internal/api/docker/container_remove.go rename to internal/controller/api/docker/container_remove.go index 0693f072..c88ee1fb 100644 --- a/internal/api/docker/container_remove.go +++ b/internal/controller/api/docker/container_remove.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/docker/container_remove_public_test.go b/internal/controller/api/docker/container_remove_public_test.go similarity index 98% rename from internal/api/docker/container_remove_public_test.go rename to internal/controller/api/docker/container_remove_public_test.go index a5130d5d..518053c5 100644 --- a/internal/api/docker/container_remove_public_test.go +++ b/internal/controller/api/docker/container_remove_public_test.go @@ -33,9 +33,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apicontainer "github.com/retr0h/osapi/internal/api/docker" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api" + apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" diff --git a/internal/api/docker/container_start.go b/internal/controller/api/docker/container_start.go similarity index 97% rename from internal/api/docker/container_start.go rename to internal/controller/api/docker/container_start.go index a3e4aa8d..9ff2fba5 100644 --- a/internal/api/docker/container_start.go +++ b/internal/controller/api/docker/container_start.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/docker/container_start_public_test.go b/internal/controller/api/docker/container_start_public_test.go similarity index 98% rename from internal/api/docker/container_start_public_test.go rename to internal/controller/api/docker/container_start_public_test.go index 088c104a..22e5a2db 100644 --- a/internal/api/docker/container_start_public_test.go +++ b/internal/controller/api/docker/container_start_public_test.go @@ -33,9 +33,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apicontainer "github.com/retr0h/osapi/internal/api/docker" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api" + apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" diff --git a/internal/api/docker/container_stop.go b/internal/controller/api/docker/container_stop.go similarity index 97% rename from internal/api/docker/container_stop.go rename to internal/controller/api/docker/container_stop.go index 46003dcf..0b1e4d43 100644 --- a/internal/api/docker/container_stop.go +++ b/internal/controller/api/docker/container_stop.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/docker/container_stop_public_test.go b/internal/controller/api/docker/container_stop_public_test.go similarity index 98% rename from internal/api/docker/container_stop_public_test.go rename to internal/controller/api/docker/container_stop_public_test.go index fde52bf9..0b488c5f 100644 --- a/internal/api/docker/container_stop_public_test.go +++ b/internal/controller/api/docker/container_stop_public_test.go @@ -34,9 +34,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apicontainer "github.com/retr0h/osapi/internal/api/docker" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api" + apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" diff --git a/internal/api/docker/convert.go b/internal/controller/api/docker/convert.go similarity index 100% rename from internal/api/docker/convert.go rename to internal/controller/api/docker/convert.go diff --git a/internal/api/docker/convert_test.go b/internal/controller/api/docker/convert_test.go similarity index 100% rename from internal/api/docker/convert_test.go rename to internal/controller/api/docker/convert_test.go diff --git a/internal/api/docker/gen/api.yaml b/internal/controller/api/docker/gen/api.yaml similarity index 100% rename from internal/api/docker/gen/api.yaml rename to internal/controller/api/docker/gen/api.yaml diff --git a/internal/api/docker/gen/cfg.yaml b/internal/controller/api/docker/gen/cfg.yaml similarity index 100% rename from internal/api/docker/gen/cfg.yaml rename to internal/controller/api/docker/gen/cfg.yaml diff --git a/internal/api/docker/gen/docker.gen.go b/internal/controller/api/docker/gen/docker.gen.go similarity index 99% rename from internal/api/docker/gen/docker.gen.go rename to internal/controller/api/docker/gen/docker.gen.go index 2bf4fcc0..8e3bf54e 100644 --- a/internal/api/docker/gen/docker.gen.go +++ b/internal/controller/api/docker/gen/docker.gen.go @@ -13,7 +13,7 @@ import ( "github.com/oapi-codegen/runtime" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" openapi_types "github.com/oapi-codegen/runtime/types" - externalRef0 "github.com/retr0h/osapi/internal/api/common/gen" + externalRef0 "github.com/retr0h/osapi/internal/controller/api/common/gen" ) const ( diff --git a/internal/api/docker/gen/generate.go b/internal/controller/api/docker/gen/generate.go similarity index 100% rename from internal/api/docker/gen/generate.go rename to internal/controller/api/docker/gen/generate.go diff --git a/internal/api/docker/test_ptr_public_test.go b/internal/controller/api/docker/test_ptr_public_test.go similarity index 100% rename from internal/api/docker/test_ptr_public_test.go rename to internal/controller/api/docker/test_ptr_public_test.go diff --git a/internal/api/docker/types.go b/internal/controller/api/docker/types.go similarity index 100% rename from internal/api/docker/types.go rename to internal/controller/api/docker/types.go diff --git a/internal/api/docker/validate.go b/internal/controller/api/docker/validate.go similarity index 100% rename from internal/api/docker/validate.go rename to internal/controller/api/docker/validate.go diff --git a/internal/api/file/file.go b/internal/controller/api/file/file.go similarity index 96% rename from internal/api/file/file.go rename to internal/controller/api/file/file.go index f5611db3..d67621a5 100644 --- a/internal/api/file/file.go +++ b/internal/controller/api/file/file.go @@ -24,7 +24,7 @@ package file import ( "log/slog" - "github.com/retr0h/osapi/internal/api/file/gen" + "github.com/retr0h/osapi/internal/controller/api/file/gen" ) // ensure that we've conformed to the `StrictServerInterface` with a compile-time check diff --git a/internal/api/file/file_delete.go b/internal/controller/api/file/file_delete.go similarity index 97% rename from internal/api/file/file_delete.go rename to internal/controller/api/file/file_delete.go index 7ffc88f5..56b78422 100644 --- a/internal/api/file/file_delete.go +++ b/internal/controller/api/file/file_delete.go @@ -28,7 +28,7 @@ import ( "github.com/nats-io/nats.go/jetstream" - "github.com/retr0h/osapi/internal/api/file/gen" + "github.com/retr0h/osapi/internal/controller/api/file/gen" ) // DeleteFileByName delete a file from the Object Store. diff --git a/internal/api/file/file_delete_public_test.go b/internal/controller/api/file/file_delete_public_test.go similarity index 97% rename from internal/api/file/file_delete_public_test.go rename to internal/controller/api/file/file_delete_public_test.go index 900a9f46..ccb3a349 100644 --- a/internal/api/file/file_delete_public_test.go +++ b/internal/controller/api/file/file_delete_public_test.go @@ -35,10 +35,10 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apifile "github.com/retr0h/osapi/internal/api/file" - "github.com/retr0h/osapi/internal/api/file/gen" - "github.com/retr0h/osapi/internal/api/file/mocks" + "github.com/retr0h/osapi/internal/controller/api" + apifile "github.com/retr0h/osapi/internal/controller/api/file" + "github.com/retr0h/osapi/internal/controller/api/file/gen" + "github.com/retr0h/osapi/internal/controller/api/file/mocks" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" ) diff --git a/internal/api/file/file_get.go b/internal/controller/api/file/file_get.go similarity index 97% rename from internal/api/file/file_get.go rename to internal/controller/api/file/file_get.go index d133b220..80dcd986 100644 --- a/internal/api/file/file_get.go +++ b/internal/controller/api/file/file_get.go @@ -30,7 +30,7 @@ import ( "github.com/nats-io/nats.go/jetstream" - "github.com/retr0h/osapi/internal/api/file/gen" + "github.com/retr0h/osapi/internal/controller/api/file/gen" ) // GetFileByName get metadata for a specific file in the Object Store. diff --git a/internal/api/file/file_get_public_test.go b/internal/controller/api/file/file_get_public_test.go similarity index 97% rename from internal/api/file/file_get_public_test.go rename to internal/controller/api/file/file_get_public_test.go index 4ffb770b..c2c21a93 100644 --- a/internal/api/file/file_get_public_test.go +++ b/internal/controller/api/file/file_get_public_test.go @@ -36,10 +36,10 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apifile "github.com/retr0h/osapi/internal/api/file" - "github.com/retr0h/osapi/internal/api/file/gen" - "github.com/retr0h/osapi/internal/api/file/mocks" + "github.com/retr0h/osapi/internal/controller/api" + apifile "github.com/retr0h/osapi/internal/controller/api/file" + "github.com/retr0h/osapi/internal/controller/api/file/gen" + "github.com/retr0h/osapi/internal/controller/api/file/mocks" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" ) diff --git a/internal/api/file/file_list.go b/internal/controller/api/file/file_list.go similarity index 97% rename from internal/api/file/file_list.go rename to internal/controller/api/file/file_list.go index b14c08ed..80854313 100644 --- a/internal/api/file/file_list.go +++ b/internal/controller/api/file/file_list.go @@ -29,7 +29,7 @@ import ( "github.com/nats-io/nats.go/jetstream" - "github.com/retr0h/osapi/internal/api/file/gen" + "github.com/retr0h/osapi/internal/controller/api/file/gen" ) // GetFiles list all files stored in the Object Store. diff --git a/internal/api/file/file_list_public_test.go b/internal/controller/api/file/file_list_public_test.go similarity index 97% rename from internal/api/file/file_list_public_test.go rename to internal/controller/api/file/file_list_public_test.go index f9e71d88..c19414f7 100644 --- a/internal/api/file/file_list_public_test.go +++ b/internal/controller/api/file/file_list_public_test.go @@ -35,10 +35,10 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apifile "github.com/retr0h/osapi/internal/api/file" - "github.com/retr0h/osapi/internal/api/file/gen" - "github.com/retr0h/osapi/internal/api/file/mocks" + "github.com/retr0h/osapi/internal/controller/api" + apifile "github.com/retr0h/osapi/internal/controller/api/file" + "github.com/retr0h/osapi/internal/controller/api/file/gen" + "github.com/retr0h/osapi/internal/controller/api/file/mocks" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" ) diff --git a/internal/api/file/file_upload.go b/internal/controller/api/file/file_upload.go similarity index 98% rename from internal/api/file/file_upload.go rename to internal/controller/api/file/file_upload.go index cc93e9f2..9dfd4ac8 100644 --- a/internal/api/file/file_upload.go +++ b/internal/controller/api/file/file_upload.go @@ -32,7 +32,7 @@ import ( "github.com/nats-io/nats.go" "github.com/nats-io/nats.go/jetstream" - "github.com/retr0h/osapi/internal/api/file/gen" + "github.com/retr0h/osapi/internal/controller/api/file/gen" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/file/file_upload_public_test.go b/internal/controller/api/file/file_upload_public_test.go similarity index 98% rename from internal/api/file/file_upload_public_test.go rename to internal/controller/api/file/file_upload_public_test.go index 284218e5..4b90e32a 100644 --- a/internal/api/file/file_upload_public_test.go +++ b/internal/controller/api/file/file_upload_public_test.go @@ -39,10 +39,10 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apifile "github.com/retr0h/osapi/internal/api/file" - "github.com/retr0h/osapi/internal/api/file/gen" - "github.com/retr0h/osapi/internal/api/file/mocks" + "github.com/retr0h/osapi/internal/controller/api" + apifile "github.com/retr0h/osapi/internal/controller/api/file" + "github.com/retr0h/osapi/internal/controller/api/file/gen" + "github.com/retr0h/osapi/internal/controller/api/file/mocks" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" ) diff --git a/internal/api/file/gen/api.yaml b/internal/controller/api/file/gen/api.yaml similarity index 100% rename from internal/api/file/gen/api.yaml rename to internal/controller/api/file/gen/api.yaml diff --git a/internal/api/file/gen/cfg.yaml b/internal/controller/api/file/gen/cfg.yaml similarity index 100% rename from internal/api/file/gen/cfg.yaml rename to internal/controller/api/file/gen/cfg.yaml diff --git a/internal/api/file/gen/file.gen.go b/internal/controller/api/file/gen/file.gen.go similarity index 99% rename from internal/api/file/gen/file.gen.go rename to internal/controller/api/file/gen/file.gen.go index 3287df6f..152a53f1 100644 --- a/internal/api/file/gen/file.gen.go +++ b/internal/controller/api/file/gen/file.gen.go @@ -14,7 +14,7 @@ import ( "github.com/oapi-codegen/runtime" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" openapi_types "github.com/oapi-codegen/runtime/types" - externalRef0 "github.com/retr0h/osapi/internal/api/common/gen" + externalRef0 "github.com/retr0h/osapi/internal/controller/api/common/gen" ) const ( diff --git a/internal/api/file/gen/generate.go b/internal/controller/api/file/gen/generate.go similarity index 100% rename from internal/api/file/gen/generate.go rename to internal/controller/api/file/gen/generate.go diff --git a/internal/api/file/mocks/generate.go b/internal/controller/api/file/mocks/generate.go similarity index 100% rename from internal/api/file/mocks/generate.go rename to internal/controller/api/file/mocks/generate.go diff --git a/internal/api/file/mocks/mocks.go b/internal/controller/api/file/mocks/mocks.go similarity index 100% rename from internal/api/file/mocks/mocks.go rename to internal/controller/api/file/mocks/mocks.go diff --git a/internal/api/file/mocks/types.gen.go b/internal/controller/api/file/mocks/types.gen.go similarity index 100% rename from internal/api/file/mocks/types.gen.go rename to internal/controller/api/file/mocks/types.gen.go diff --git a/internal/api/file/types.go b/internal/controller/api/file/types.go similarity index 100% rename from internal/api/file/types.go rename to internal/controller/api/file/types.go diff --git a/internal/api/file/validate.go b/internal/controller/api/file/validate.go similarity index 100% rename from internal/api/file/validate.go rename to internal/controller/api/file/validate.go diff --git a/internal/api/file/validate_test.go b/internal/controller/api/file/validate_test.go similarity index 100% rename from internal/api/file/validate_test.go rename to internal/controller/api/file/validate_test.go diff --git a/internal/api/gen/api.yaml b/internal/controller/api/gen/api.yaml similarity index 100% rename from internal/api/gen/api.yaml rename to internal/controller/api/gen/api.yaml diff --git a/internal/api/handler.go b/internal/controller/api/handler.go similarity index 100% rename from internal/api/handler.go rename to internal/controller/api/handler.go diff --git a/internal/api/handler_agent.go b/internal/controller/api/handler_agent.go similarity index 91% rename from internal/api/handler_agent.go rename to internal/controller/api/handler_agent.go index 52d0c18a..b75ad5ac 100644 --- a/internal/api/handler_agent.go +++ b/internal/controller/api/handler_agent.go @@ -24,8 +24,8 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" - "github.com/retr0h/osapi/internal/api/agent" - agentGen "github.com/retr0h/osapi/internal/api/agent/gen" + "github.com/retr0h/osapi/internal/controller/api/agent" + agentGen "github.com/retr0h/osapi/internal/controller/api/agent/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/job/client" ) @@ -45,7 +45,7 @@ func (s *Server) GetAgentHandler( return scopeMiddleware( handler, tokenManager, - s.appConfig.API.Server.Security.SigningKey, + s.appConfig.Controller.API.Security.SigningKey, agentGen.BearerAuthScopes, s.customRoles, ) diff --git a/internal/api/handler_audit.go b/internal/controller/api/handler_audit.go similarity index 91% rename from internal/api/handler_audit.go rename to internal/controller/api/handler_audit.go index 4cfb9851..4ea4b00f 100644 --- a/internal/api/handler_audit.go +++ b/internal/controller/api/handler_audit.go @@ -24,8 +24,8 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" - audithandler "github.com/retr0h/osapi/internal/api/audit" - auditGen "github.com/retr0h/osapi/internal/api/audit/gen" + audithandler "github.com/retr0h/osapi/internal/controller/api/audit" + auditGen "github.com/retr0h/osapi/internal/controller/api/audit/gen" auditstore "github.com/retr0h/osapi/internal/audit" "github.com/retr0h/osapi/internal/authtoken" ) @@ -45,7 +45,7 @@ func (s *Server) GetAuditHandler( return scopeMiddleware( handler, tokenManager, - s.appConfig.API.Server.Security.SigningKey, + s.appConfig.Controller.API.Security.SigningKey, auditGen.BearerAuthScopes, s.customRoles, ) diff --git a/internal/api/handler_docker.go b/internal/controller/api/handler_docker.go similarity index 91% rename from internal/api/handler_docker.go rename to internal/controller/api/handler_docker.go index 1d672437..2a64370e 100644 --- a/internal/api/handler_docker.go +++ b/internal/controller/api/handler_docker.go @@ -24,8 +24,8 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" - docker "github.com/retr0h/osapi/internal/api/docker" - dockerGen "github.com/retr0h/osapi/internal/api/docker/gen" + docker "github.com/retr0h/osapi/internal/controller/api/docker" + dockerGen "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/job/client" ) @@ -45,7 +45,7 @@ func (s *Server) GetDockerHandler( return scopeMiddleware( handler, tokenManager, - s.appConfig.API.Server.Security.SigningKey, + s.appConfig.Controller.API.Security.SigningKey, dockerGen.BearerAuthScopes, s.customRoles, ) diff --git a/internal/api/handler_file.go b/internal/controller/api/handler_file.go similarity index 91% rename from internal/api/handler_file.go rename to internal/controller/api/handler_file.go index 8030d462..43e56a64 100644 --- a/internal/api/handler_file.go +++ b/internal/controller/api/handler_file.go @@ -24,8 +24,8 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" - "github.com/retr0h/osapi/internal/api/file" - fileGen "github.com/retr0h/osapi/internal/api/file/gen" + "github.com/retr0h/osapi/internal/controller/api/file" + fileGen "github.com/retr0h/osapi/internal/controller/api/file/gen" "github.com/retr0h/osapi/internal/authtoken" ) @@ -44,7 +44,7 @@ func (s *Server) GetFileHandler( return scopeMiddleware( handler, tokenManager, - s.appConfig.API.Server.Security.SigningKey, + s.appConfig.Controller.API.Security.SigningKey, fileGen.BearerAuthScopes, s.customRoles, ) diff --git a/internal/api/handler_health.go b/internal/controller/api/handler_health.go similarity index 92% rename from internal/api/handler_health.go rename to internal/controller/api/handler_health.go index 18f68f80..5320b037 100644 --- a/internal/api/handler_health.go +++ b/internal/controller/api/handler_health.go @@ -26,8 +26,8 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" - "github.com/retr0h/osapi/internal/api/health" - healthGen "github.com/retr0h/osapi/internal/api/health/gen" + "github.com/retr0h/osapi/internal/controller/api/health" + healthGen "github.com/retr0h/osapi/internal/controller/api/health/gen" "github.com/retr0h/osapi/internal/authtoken" ) @@ -59,7 +59,7 @@ func (s *Server) GetHealthHandler( return scopeMiddleware( handler, tokenManager, - s.appConfig.API.Server.Security.SigningKey, + s.appConfig.Controller.API.Security.SigningKey, healthGen.BearerAuthScopes, s.customRoles, ) diff --git a/internal/api/handler_job.go b/internal/controller/api/handler_job.go similarity index 91% rename from internal/api/handler_job.go rename to internal/controller/api/handler_job.go index 74ce244a..c3f95e1b 100644 --- a/internal/api/handler_job.go +++ b/internal/controller/api/handler_job.go @@ -24,8 +24,8 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" - apijob "github.com/retr0h/osapi/internal/api/job" - jobGen "github.com/retr0h/osapi/internal/api/job/gen" + apijob "github.com/retr0h/osapi/internal/controller/api/job" + jobGen "github.com/retr0h/osapi/internal/controller/api/job/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/job/client" ) @@ -45,7 +45,7 @@ func (s *Server) GetJobHandler( return scopeMiddleware( handler, tokenManager, - s.appConfig.API.Server.Security.SigningKey, + s.appConfig.Controller.API.Security.SigningKey, jobGen.BearerAuthScopes, s.customRoles, ) diff --git a/internal/api/handler_metrics.go b/internal/controller/api/handler_metrics.go similarity index 96% rename from internal/api/handler_metrics.go rename to internal/controller/api/handler_metrics.go index 69f69444..8fdb04de 100644 --- a/internal/api/handler_metrics.go +++ b/internal/controller/api/handler_metrics.go @@ -25,7 +25,7 @@ import ( "github.com/labstack/echo/v4" - "github.com/retr0h/osapi/internal/api/metrics" + "github.com/retr0h/osapi/internal/controller/api/metrics" ) // GetMetricsHandler returns a handler that registers the Prometheus scrape endpoint. diff --git a/internal/api/handler_node.go b/internal/controller/api/handler_node.go similarity index 91% rename from internal/api/handler_node.go rename to internal/controller/api/handler_node.go index 2d502ea3..7b999f51 100644 --- a/internal/api/handler_node.go +++ b/internal/controller/api/handler_node.go @@ -24,8 +24,8 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" - "github.com/retr0h/osapi/internal/api/node" - nodeGen "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node" + nodeGen "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/job/client" ) @@ -45,7 +45,7 @@ func (s *Server) GetNodeHandler( return scopeMiddleware( handler, tokenManager, - s.appConfig.API.Server.Security.SigningKey, + s.appConfig.Controller.API.Security.SigningKey, nodeGen.BearerAuthScopes, s.customRoles, ) diff --git a/internal/api/handler_public_test.go b/internal/controller/api/handler_public_test.go similarity index 98% rename from internal/api/handler_public_test.go rename to internal/controller/api/handler_public_test.go index 5ea228d9..ba862b34 100644 --- a/internal/api/handler_public_test.go +++ b/internal/controller/api/handler_public_test.go @@ -32,9 +32,9 @@ import ( "github.com/labstack/echo/v4" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - fileMocks "github.com/retr0h/osapi/internal/api/file/mocks" - "github.com/retr0h/osapi/internal/api/health" + "github.com/retr0h/osapi/internal/controller/api" + fileMocks "github.com/retr0h/osapi/internal/controller/api/file/mocks" + "github.com/retr0h/osapi/internal/controller/api/health" auditstore "github.com/retr0h/osapi/internal/audit" "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job/mocks" diff --git a/internal/api/health/checker.go b/internal/controller/api/health/checker.go similarity index 100% rename from internal/api/health/checker.go rename to internal/controller/api/health/checker.go diff --git a/internal/api/health/checker_public_test.go b/internal/controller/api/health/checker_public_test.go similarity index 98% rename from internal/api/health/checker_public_test.go rename to internal/controller/api/health/checker_public_test.go index f58f9deb..2e1e3e6c 100644 --- a/internal/api/health/checker_public_test.go +++ b/internal/controller/api/health/checker_public_test.go @@ -27,7 +27,7 @@ import ( "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api/health" + "github.com/retr0h/osapi/internal/controller/api/health" ) type CheckerPublicTestSuite struct { diff --git a/internal/api/health/gen/api.yaml b/internal/controller/api/health/gen/api.yaml similarity index 100% rename from internal/api/health/gen/api.yaml rename to internal/controller/api/health/gen/api.yaml diff --git a/internal/api/health/gen/cfg.yaml b/internal/controller/api/health/gen/cfg.yaml similarity index 100% rename from internal/api/health/gen/cfg.yaml rename to internal/controller/api/health/gen/cfg.yaml diff --git a/internal/api/health/gen/generate.go b/internal/controller/api/health/gen/generate.go similarity index 100% rename from internal/api/health/gen/generate.go rename to internal/controller/api/health/gen/generate.go diff --git a/internal/api/health/gen/health.gen.go b/internal/controller/api/health/gen/health.gen.go similarity index 99% rename from internal/api/health/gen/health.gen.go rename to internal/controller/api/health/gen/health.gen.go index 748988f2..5c5dd392 100644 --- a/internal/api/health/gen/health.gen.go +++ b/internal/controller/api/health/gen/health.gen.go @@ -11,7 +11,7 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" - externalRef0 "github.com/retr0h/osapi/internal/api/common/gen" + externalRef0 "github.com/retr0h/osapi/internal/controller/api/common/gen" ) const ( diff --git a/internal/api/health/health.go b/internal/controller/api/health/health.go similarity index 96% rename from internal/api/health/health.go rename to internal/controller/api/health/health.go index 1632bdbe..1917ab61 100644 --- a/internal/api/health/health.go +++ b/internal/controller/api/health/health.go @@ -25,7 +25,7 @@ import ( "log/slog" "time" - "github.com/retr0h/osapi/internal/api/health/gen" + "github.com/retr0h/osapi/internal/controller/api/health/gen" ) // ensure that we've conformed to the `StrictServerInterface` with a compile-time check diff --git a/internal/api/health/health_get.go b/internal/controller/api/health/health_get.go similarity index 95% rename from internal/api/health/health_get.go rename to internal/controller/api/health/health_get.go index 6bae78c6..a3056c62 100644 --- a/internal/api/health/health_get.go +++ b/internal/controller/api/health/health_get.go @@ -23,7 +23,7 @@ package health import ( "context" - "github.com/retr0h/osapi/internal/api/health/gen" + "github.com/retr0h/osapi/internal/controller/api/health/gen" ) // GetHealth liveness probe — always returns 200 if the process is running. diff --git a/internal/api/health/health_get_public_test.go b/internal/controller/api/health/health_get_public_test.go similarity index 94% rename from internal/api/health/health_get_public_test.go rename to internal/controller/api/health/health_get_public_test.go index 0ef6aede..34a24d7e 100644 --- a/internal/api/health/health_get_public_test.go +++ b/internal/controller/api/health/health_get_public_test.go @@ -31,9 +31,9 @@ import ( "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - "github.com/retr0h/osapi/internal/api/health" - "github.com/retr0h/osapi/internal/api/health/gen" + "github.com/retr0h/osapi/internal/controller/api" + "github.com/retr0h/osapi/internal/controller/api/health" + "github.com/retr0h/osapi/internal/controller/api/health/gen" "github.com/retr0h/osapi/internal/config" ) diff --git a/internal/api/health/health_ready_get.go b/internal/controller/api/health/health_ready_get.go similarity index 96% rename from internal/api/health/health_ready_get.go rename to internal/controller/api/health/health_ready_get.go index cc2e02dc..10c09061 100644 --- a/internal/api/health/health_ready_get.go +++ b/internal/controller/api/health/health_ready_get.go @@ -23,7 +23,7 @@ package health import ( "context" - "github.com/retr0h/osapi/internal/api/health/gen" + "github.com/retr0h/osapi/internal/controller/api/health/gen" ) // GetHealthReady readiness probe — returns 200 when dependencies are reachable. diff --git a/internal/api/health/health_ready_get_public_test.go b/internal/controller/api/health/health_ready_get_public_test.go similarity index 96% rename from internal/api/health/health_ready_get_public_test.go rename to internal/controller/api/health/health_ready_get_public_test.go index 85d08ccb..d8245857 100644 --- a/internal/api/health/health_ready_get_public_test.go +++ b/internal/controller/api/health/health_ready_get_public_test.go @@ -32,9 +32,9 @@ import ( "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - "github.com/retr0h/osapi/internal/api/health" - "github.com/retr0h/osapi/internal/api/health/gen" + "github.com/retr0h/osapi/internal/controller/api" + "github.com/retr0h/osapi/internal/controller/api/health" + "github.com/retr0h/osapi/internal/controller/api/health/gen" "github.com/retr0h/osapi/internal/config" ) diff --git a/internal/api/health/health_status_get.go b/internal/controller/api/health/health_status_get.go similarity index 99% rename from internal/api/health/health_status_get.go rename to internal/controller/api/health/health_status_get.go index aa439e9a..cd484c39 100644 --- a/internal/api/health/health_status_get.go +++ b/internal/controller/api/health/health_status_get.go @@ -25,7 +25,7 @@ import ( "sync" "time" - "github.com/retr0h/osapi/internal/api/health/gen" + "github.com/retr0h/osapi/internal/controller/api/health/gen" ) // GetHealthStatus returns per-component health status with system metrics (authenticated). diff --git a/internal/api/health/health_status_get_public_test.go b/internal/controller/api/health/health_status_get_public_test.go similarity index 99% rename from internal/api/health/health_status_get_public_test.go rename to internal/controller/api/health/health_status_get_public_test.go index 136a7b61..e5aae19b 100644 --- a/internal/api/health/health_status_get_public_test.go +++ b/internal/controller/api/health/health_status_get_public_test.go @@ -32,9 +32,9 @@ import ( "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - "github.com/retr0h/osapi/internal/api/health" - "github.com/retr0h/osapi/internal/api/health/gen" + "github.com/retr0h/osapi/internal/controller/api" + "github.com/retr0h/osapi/internal/controller/api/health" + "github.com/retr0h/osapi/internal/controller/api/health/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" ) diff --git a/internal/api/health/types.go b/internal/controller/api/health/types.go similarity index 100% rename from internal/api/health/types.go rename to internal/controller/api/health/types.go diff --git a/internal/api/job/gen/api.yaml b/internal/controller/api/job/gen/api.yaml similarity index 100% rename from internal/api/job/gen/api.yaml rename to internal/controller/api/job/gen/api.yaml diff --git a/internal/api/job/gen/cfg.yaml b/internal/controller/api/job/gen/cfg.yaml similarity index 100% rename from internal/api/job/gen/cfg.yaml rename to internal/controller/api/job/gen/cfg.yaml diff --git a/internal/api/job/gen/generate.go b/internal/controller/api/job/gen/generate.go similarity index 100% rename from internal/api/job/gen/generate.go rename to internal/controller/api/job/gen/generate.go diff --git a/internal/api/job/gen/job.gen.go b/internal/controller/api/job/gen/job.gen.go similarity index 99% rename from internal/api/job/gen/job.gen.go rename to internal/controller/api/job/gen/job.gen.go index d09a7c2a..09e46803 100644 --- a/internal/api/job/gen/job.gen.go +++ b/internal/controller/api/job/gen/job.gen.go @@ -13,7 +13,7 @@ import ( "github.com/oapi-codegen/runtime" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" openapi_types "github.com/oapi-codegen/runtime/types" - externalRef0 "github.com/retr0h/osapi/internal/api/common/gen" + externalRef0 "github.com/retr0h/osapi/internal/controller/api/common/gen" ) const ( diff --git a/internal/api/job/job.go b/internal/controller/api/job/job.go similarity index 96% rename from internal/api/job/job.go rename to internal/controller/api/job/job.go index 9d643730..06f0552c 100644 --- a/internal/api/job/job.go +++ b/internal/controller/api/job/job.go @@ -24,7 +24,7 @@ package job import ( "log/slog" - "github.com/retr0h/osapi/internal/api/job/gen" + "github.com/retr0h/osapi/internal/controller/api/job/gen" "github.com/retr0h/osapi/internal/job/client" ) diff --git a/internal/api/job/job_delete.go b/internal/controller/api/job/job_delete.go similarity index 96% rename from internal/api/job/job_delete.go rename to internal/controller/api/job/job_delete.go index 7af15405..681d5823 100644 --- a/internal/api/job/job_delete.go +++ b/internal/controller/api/job/job_delete.go @@ -25,7 +25,7 @@ import ( "log/slog" "strings" - "github.com/retr0h/osapi/internal/api/job/gen" + "github.com/retr0h/osapi/internal/controller/api/job/gen" ) // DeleteJobByID deletes a specific job by its ID. diff --git a/internal/api/job/job_delete_public_test.go b/internal/controller/api/job/job_delete_public_test.go similarity index 97% rename from internal/api/job/job_delete_public_test.go rename to internal/controller/api/job/job_delete_public_test.go index e0de9ba0..bfb0e318 100644 --- a/internal/api/job/job_delete_public_test.go +++ b/internal/controller/api/job/job_delete_public_test.go @@ -34,9 +34,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apijob "github.com/retr0h/osapi/internal/api/job" - "github.com/retr0h/osapi/internal/api/job/gen" + "github.com/retr0h/osapi/internal/controller/api" + apijob "github.com/retr0h/osapi/internal/controller/api/job" + "github.com/retr0h/osapi/internal/controller/api/job/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" jobmocks "github.com/retr0h/osapi/internal/job/mocks" diff --git a/internal/api/job/job_get.go b/internal/controller/api/job/job_get.go similarity index 98% rename from internal/api/job/job_get.go rename to internal/controller/api/job/job_get.go index cd3c6610..daabb389 100644 --- a/internal/api/job/job_get.go +++ b/internal/controller/api/job/job_get.go @@ -28,7 +28,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/job/gen" + "github.com/retr0h/osapi/internal/controller/api/job/gen" ) // GetJobByID retrieves details of a specific job by its ID. diff --git a/internal/api/job/job_get_public_test.go b/internal/controller/api/job/job_get_public_test.go similarity index 99% rename from internal/api/job/job_get_public_test.go rename to internal/controller/api/job/job_get_public_test.go index 67eaf5ab..845e7ef9 100644 --- a/internal/api/job/job_get_public_test.go +++ b/internal/controller/api/job/job_get_public_test.go @@ -36,9 +36,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apijob "github.com/retr0h/osapi/internal/api/job" - "github.com/retr0h/osapi/internal/api/job/gen" + "github.com/retr0h/osapi/internal/controller/api" + apijob "github.com/retr0h/osapi/internal/controller/api/job" + "github.com/retr0h/osapi/internal/controller/api/job/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" jobtypes "github.com/retr0h/osapi/internal/job" diff --git a/internal/api/job/job_list.go b/internal/controller/api/job/job_list.go similarity index 98% rename from internal/api/job/job_list.go rename to internal/controller/api/job/job_list.go index 60c8b62d..b89820dc 100644 --- a/internal/api/job/job_list.go +++ b/internal/controller/api/job/job_list.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/job/gen" + "github.com/retr0h/osapi/internal/controller/api/job/gen" "github.com/retr0h/osapi/internal/job/client" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/job/job_list_public_test.go b/internal/controller/api/job/job_list_public_test.go similarity index 98% rename from internal/api/job/job_list_public_test.go rename to internal/controller/api/job/job_list_public_test.go index 10489653..372532cc 100644 --- a/internal/api/job/job_list_public_test.go +++ b/internal/controller/api/job/job_list_public_test.go @@ -34,9 +34,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apijob "github.com/retr0h/osapi/internal/api/job" - "github.com/retr0h/osapi/internal/api/job/gen" + "github.com/retr0h/osapi/internal/controller/api" + apijob "github.com/retr0h/osapi/internal/controller/api/job" + "github.com/retr0h/osapi/internal/controller/api/job/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" jobtypes "github.com/retr0h/osapi/internal/job" diff --git a/internal/api/job/job_retry.go b/internal/controller/api/job/job_retry.go similarity index 97% rename from internal/api/job/job_retry.go rename to internal/controller/api/job/job_retry.go index 0d98392f..51150bf6 100644 --- a/internal/api/job/job_retry.go +++ b/internal/controller/api/job/job_retry.go @@ -27,7 +27,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/job/gen" + "github.com/retr0h/osapi/internal/controller/api/job/gen" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/job/job_retry_public_test.go b/internal/controller/api/job/job_retry_public_test.go similarity index 98% rename from internal/api/job/job_retry_public_test.go rename to internal/controller/api/job/job_retry_public_test.go index 6f735a98..a4ec9b50 100644 --- a/internal/api/job/job_retry_public_test.go +++ b/internal/controller/api/job/job_retry_public_test.go @@ -34,9 +34,9 @@ import ( "github.com/google/uuid" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apijob "github.com/retr0h/osapi/internal/api/job" - "github.com/retr0h/osapi/internal/api/job/gen" + "github.com/retr0h/osapi/internal/controller/api" + apijob "github.com/retr0h/osapi/internal/controller/api/job" + "github.com/retr0h/osapi/internal/controller/api/job/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job/client" diff --git a/internal/api/job/types.go b/internal/controller/api/job/types.go similarity index 100% rename from internal/api/job/types.go rename to internal/controller/api/job/types.go diff --git a/internal/api/metrics/metrics.go b/internal/controller/api/metrics/metrics.go similarity index 100% rename from internal/api/metrics/metrics.go rename to internal/controller/api/metrics/metrics.go diff --git a/internal/api/metrics/metrics_get.go b/internal/controller/api/metrics/metrics_get.go similarity index 100% rename from internal/api/metrics/metrics_get.go rename to internal/controller/api/metrics/metrics_get.go diff --git a/internal/api/metrics/metrics_get_public_test.go b/internal/controller/api/metrics/metrics_get_public_test.go similarity index 97% rename from internal/api/metrics/metrics_get_public_test.go rename to internal/controller/api/metrics/metrics_get_public_test.go index 88c9e90c..35f80615 100644 --- a/internal/api/metrics/metrics_get_public_test.go +++ b/internal/controller/api/metrics/metrics_get_public_test.go @@ -30,8 +30,8 @@ import ( "github.com/labstack/echo/v4" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - "github.com/retr0h/osapi/internal/api/metrics" + "github.com/retr0h/osapi/internal/controller/api" + "github.com/retr0h/osapi/internal/controller/api/metrics" "github.com/retr0h/osapi/internal/config" ) diff --git a/internal/api/metrics/types.go b/internal/controller/api/metrics/types.go similarity index 100% rename from internal/api/metrics/types.go rename to internal/controller/api/metrics/types.go diff --git a/internal/api/middleware.go b/internal/controller/api/middleware.go similarity index 98% rename from internal/api/middleware.go rename to internal/controller/api/middleware.go index a7626089..87a89725 100644 --- a/internal/api/middleware.go +++ b/internal/controller/api/middleware.go @@ -28,7 +28,7 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" - "github.com/retr0h/osapi/internal/api/common/gen" + "github.com/retr0h/osapi/internal/controller/api/common/gen" "github.com/retr0h/osapi/internal/authtoken" ) diff --git a/internal/api/middleware_audit.go b/internal/controller/api/middleware_audit.go similarity index 100% rename from internal/api/middleware_audit.go rename to internal/controller/api/middleware_audit.go diff --git a/internal/api/middleware_audit_test.go b/internal/controller/api/middleware_audit_test.go similarity index 100% rename from internal/api/middleware_audit_test.go rename to internal/controller/api/middleware_audit_test.go diff --git a/internal/api/middleware_test.go b/internal/controller/api/middleware_test.go similarity index 100% rename from internal/api/middleware_test.go rename to internal/controller/api/middleware_test.go diff --git a/internal/api/node/command_exec_post.go b/internal/controller/api/node/command_exec_post.go similarity index 98% rename from internal/api/node/command_exec_post.go rename to internal/controller/api/node/command_exec_post.go index 75e5bf05..8cd738bc 100644 --- a/internal/api/node/command_exec_post.go +++ b/internal/controller/api/node/command_exec_post.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/node/command_exec_post_public_test.go b/internal/controller/api/node/command_exec_post_public_test.go similarity index 98% rename from internal/api/node/command_exec_post_public_test.go rename to internal/controller/api/node/command_exec_post_public_test.go index 76f8c0d4..9fd25ffe 100644 --- a/internal/api/node/command_exec_post_public_test.go +++ b/internal/controller/api/node/command_exec_post_public_test.go @@ -34,9 +34,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" jobmocks "github.com/retr0h/osapi/internal/job/mocks" diff --git a/internal/api/node/command_shell_post.go b/internal/controller/api/node/command_shell_post.go similarity index 98% rename from internal/api/node/command_shell_post.go rename to internal/controller/api/node/command_shell_post.go index 05beb722..8a43a34b 100644 --- a/internal/api/node/command_shell_post.go +++ b/internal/controller/api/node/command_shell_post.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/node/command_shell_post_public_test.go b/internal/controller/api/node/command_shell_post_public_test.go similarity index 98% rename from internal/api/node/command_shell_post_public_test.go rename to internal/controller/api/node/command_shell_post_public_test.go index c04e930d..9bd638c8 100644 --- a/internal/api/node/command_shell_post_public_test.go +++ b/internal/controller/api/node/command_shell_post_public_test.go @@ -34,9 +34,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" jobmocks "github.com/retr0h/osapi/internal/job/mocks" diff --git a/internal/api/node/file_deploy_post.go b/internal/controller/api/node/file_deploy_post.go similarity index 97% rename from internal/api/node/file_deploy_post.go rename to internal/controller/api/node/file_deploy_post.go index 79f24971..4656654d 100644 --- a/internal/api/node/file_deploy_post.go +++ b/internal/controller/api/node/file_deploy_post.go @@ -24,7 +24,7 @@ import ( "context" "log/slog" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/node/file_deploy_post_public_test.go b/internal/controller/api/node/file_deploy_post_public_test.go similarity index 98% rename from internal/api/node/file_deploy_post_public_test.go rename to internal/controller/api/node/file_deploy_post_public_test.go index d3c41dfc..f0e852f2 100644 --- a/internal/api/node/file_deploy_post_public_test.go +++ b/internal/controller/api/node/file_deploy_post_public_test.go @@ -34,9 +34,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" jobmocks "github.com/retr0h/osapi/internal/job/mocks" diff --git a/internal/api/node/file_status_post.go b/internal/controller/api/node/file_status_post.go similarity index 97% rename from internal/api/node/file_status_post.go rename to internal/controller/api/node/file_status_post.go index b02b2448..76f699f5 100644 --- a/internal/api/node/file_status_post.go +++ b/internal/controller/api/node/file_status_post.go @@ -24,7 +24,7 @@ import ( "context" "log/slog" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/node/file_status_post_public_test.go b/internal/controller/api/node/file_status_post_public_test.go similarity index 98% rename from internal/api/node/file_status_post_public_test.go rename to internal/controller/api/node/file_status_post_public_test.go index 51a4acc9..e6792767 100644 --- a/internal/api/node/file_status_post_public_test.go +++ b/internal/controller/api/node/file_status_post_public_test.go @@ -34,9 +34,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" jobmocks "github.com/retr0h/osapi/internal/job/mocks" diff --git a/internal/api/node/gen/api.yaml b/internal/controller/api/node/gen/api.yaml similarity index 100% rename from internal/api/node/gen/api.yaml rename to internal/controller/api/node/gen/api.yaml diff --git a/internal/api/node/gen/cfg.yaml b/internal/controller/api/node/gen/cfg.yaml similarity index 100% rename from internal/api/node/gen/cfg.yaml rename to internal/controller/api/node/gen/cfg.yaml diff --git a/internal/api/node/gen/generate.go b/internal/controller/api/node/gen/generate.go similarity index 100% rename from internal/api/node/gen/generate.go rename to internal/controller/api/node/gen/generate.go diff --git a/internal/api/node/gen/node.gen.go b/internal/controller/api/node/gen/node.gen.go similarity index 99% rename from internal/api/node/gen/node.gen.go rename to internal/controller/api/node/gen/node.gen.go index 0ccef950..678e09b3 100644 --- a/internal/api/node/gen/node.gen.go +++ b/internal/controller/api/node/gen/node.gen.go @@ -13,7 +13,7 @@ import ( "github.com/oapi-codegen/runtime" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" openapi_types "github.com/oapi-codegen/runtime/types" - externalRef0 "github.com/retr0h/osapi/internal/api/common/gen" + externalRef0 "github.com/retr0h/osapi/internal/controller/api/common/gen" ) const ( diff --git a/internal/api/node/network_dns_get_by_interface.go b/internal/controller/api/node/network_dns_get_by_interface.go similarity index 98% rename from internal/api/node/network_dns_get_by_interface.go rename to internal/controller/api/node/network_dns_get_by_interface.go index a9ba7727..c9f4c46b 100644 --- a/internal/api/node/network_dns_get_by_interface.go +++ b/internal/controller/api/node/network_dns_get_by_interface.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" ) diff --git a/internal/api/node/network_dns_get_by_interface_public_test.go b/internal/controller/api/node/network_dns_get_by_interface_public_test.go similarity index 98% rename from internal/api/node/network_dns_get_by_interface_public_test.go rename to internal/controller/api/node/network_dns_get_by_interface_public_test.go index 5659e94e..b1d63bf3 100644 --- a/internal/api/node/network_dns_get_by_interface_public_test.go +++ b/internal/controller/api/node/network_dns_get_by_interface_public_test.go @@ -33,9 +33,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" jobmocks "github.com/retr0h/osapi/internal/job/mocks" diff --git a/internal/api/node/network_dns_put_by_interface.go b/internal/controller/api/node/network_dns_put_by_interface.go similarity index 98% rename from internal/api/node/network_dns_put_by_interface.go rename to internal/controller/api/node/network_dns_put_by_interface.go index 97e3d1c4..737cd53a 100644 --- a/internal/api/node/network_dns_put_by_interface.go +++ b/internal/controller/api/node/network_dns_put_by_interface.go @@ -27,7 +27,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/node/network_dns_put_by_interface_public_test.go b/internal/controller/api/node/network_dns_put_by_interface_public_test.go similarity index 98% rename from internal/api/node/network_dns_put_by_interface_public_test.go rename to internal/controller/api/node/network_dns_put_by_interface_public_test.go index 1bb8b0de..95bfccee 100644 --- a/internal/api/node/network_dns_put_by_interface_public_test.go +++ b/internal/controller/api/node/network_dns_put_by_interface_public_test.go @@ -35,9 +35,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" jobmocks "github.com/retr0h/osapi/internal/job/mocks" diff --git a/internal/api/node/network_ping_post.go b/internal/controller/api/node/network_ping_post.go similarity index 98% rename from internal/api/node/network_ping_post.go rename to internal/controller/api/node/network_ping_post.go index d2a95aef..adf846cb 100644 --- a/internal/api/node/network_ping_post.go +++ b/internal/controller/api/node/network_ping_post.go @@ -28,7 +28,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/provider/network/ping" "github.com/retr0h/osapi/internal/validation" diff --git a/internal/api/node/network_ping_post_public_test.go b/internal/controller/api/node/network_ping_post_public_test.go similarity index 98% rename from internal/api/node/network_ping_post_public_test.go rename to internal/controller/api/node/network_ping_post_public_test.go index c2ee2dd7..d6ada9f9 100644 --- a/internal/api/node/network_ping_post_public_test.go +++ b/internal/controller/api/node/network_ping_post_public_test.go @@ -35,9 +35,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" jobmocks "github.com/retr0h/osapi/internal/job/mocks" diff --git a/internal/api/node/node.go b/internal/controller/api/node/node.go similarity index 96% rename from internal/api/node/node.go rename to internal/controller/api/node/node.go index 2cf4bd8e..de763128 100644 --- a/internal/api/node/node.go +++ b/internal/controller/api/node/node.go @@ -24,7 +24,7 @@ package node import ( "log/slog" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job/client" ) diff --git a/internal/api/node/node_disk_get.go b/internal/controller/api/node/node_disk_get.go similarity index 98% rename from internal/api/node/node_disk_get.go rename to internal/controller/api/node/node_disk_get.go index 60ce97fe..0b0edbd0 100644 --- a/internal/api/node/node_disk_get.go +++ b/internal/controller/api/node/node_disk_get.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" ) diff --git a/internal/api/node/node_disk_get_public_test.go b/internal/controller/api/node/node_disk_get_public_test.go similarity index 98% rename from internal/api/node/node_disk_get_public_test.go rename to internal/controller/api/node/node_disk_get_public_test.go index 86c93a7b..a9f59e66 100644 --- a/internal/api/node/node_disk_get_public_test.go +++ b/internal/controller/api/node/node_disk_get_public_test.go @@ -33,9 +33,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" diff --git a/internal/api/node/node_hostname_get.go b/internal/controller/api/node/node_hostname_get.go similarity index 98% rename from internal/api/node/node_hostname_get.go rename to internal/controller/api/node/node_hostname_get.go index d15768fc..39b1b6a2 100644 --- a/internal/api/node/node_hostname_get.go +++ b/internal/controller/api/node/node_hostname_get.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" ) diff --git a/internal/api/node/node_hostname_get_public_test.go b/internal/controller/api/node/node_hostname_get_public_test.go similarity index 98% rename from internal/api/node/node_hostname_get_public_test.go rename to internal/controller/api/node/node_hostname_get_public_test.go index 60089ecb..111ce5fe 100644 --- a/internal/api/node/node_hostname_get_public_test.go +++ b/internal/controller/api/node/node_hostname_get_public_test.go @@ -33,9 +33,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" diff --git a/internal/api/node/node_load_get.go b/internal/controller/api/node/node_load_get.go similarity index 98% rename from internal/api/node/node_load_get.go rename to internal/controller/api/node/node_load_get.go index e98eea85..fe955505 100644 --- a/internal/api/node/node_load_get.go +++ b/internal/controller/api/node/node_load_get.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/provider/node/load" ) diff --git a/internal/api/node/node_load_get_public_test.go b/internal/controller/api/node/node_load_get_public_test.go similarity index 98% rename from internal/api/node/node_load_get_public_test.go rename to internal/controller/api/node/node_load_get_public_test.go index 2307bf65..711b8220 100644 --- a/internal/api/node/node_load_get_public_test.go +++ b/internal/controller/api/node/node_load_get_public_test.go @@ -33,9 +33,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" jobmocks "github.com/retr0h/osapi/internal/job/mocks" diff --git a/internal/api/node/node_memory_get.go b/internal/controller/api/node/node_memory_get.go similarity index 98% rename from internal/api/node/node_memory_get.go rename to internal/controller/api/node/node_memory_get.go index 46a0369f..690294a5 100644 --- a/internal/api/node/node_memory_get.go +++ b/internal/controller/api/node/node_memory_get.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/provider/node/mem" ) diff --git a/internal/api/node/node_memory_get_public_test.go b/internal/controller/api/node/node_memory_get_public_test.go similarity index 98% rename from internal/api/node/node_memory_get_public_test.go rename to internal/controller/api/node/node_memory_get_public_test.go index 1a8f3f02..ad331c8a 100644 --- a/internal/api/node/node_memory_get_public_test.go +++ b/internal/controller/api/node/node_memory_get_public_test.go @@ -33,9 +33,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" jobmocks "github.com/retr0h/osapi/internal/job/mocks" diff --git a/internal/api/node/node_os_get.go b/internal/controller/api/node/node_os_get.go similarity index 98% rename from internal/api/node/node_os_get.go rename to internal/controller/api/node/node_os_get.go index 1d9eaaf4..9549be4a 100644 --- a/internal/api/node/node_os_get.go +++ b/internal/controller/api/node/node_os_get.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/provider/node/host" ) diff --git a/internal/api/node/node_os_get_public_test.go b/internal/controller/api/node/node_os_get_public_test.go similarity index 98% rename from internal/api/node/node_os_get_public_test.go rename to internal/controller/api/node/node_os_get_public_test.go index 04c8d546..d7a4b061 100644 --- a/internal/api/node/node_os_get_public_test.go +++ b/internal/controller/api/node/node_os_get_public_test.go @@ -33,9 +33,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" jobmocks "github.com/retr0h/osapi/internal/job/mocks" diff --git a/internal/api/node/node_status_get.go b/internal/controller/api/node/node_status_get.go similarity index 98% rename from internal/api/node/node_status_get.go rename to internal/controller/api/node/node_status_get.go index 62eedc0c..17332192 100644 --- a/internal/api/node/node_status_get.go +++ b/internal/controller/api/node/node_status_get.go @@ -27,7 +27,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" ) diff --git a/internal/api/node/node_status_get_public_test.go b/internal/controller/api/node/node_status_get_public_test.go similarity index 98% rename from internal/api/node/node_status_get_public_test.go rename to internal/controller/api/node/node_status_get_public_test.go index ba71ce29..3178001c 100644 --- a/internal/api/node/node_status_get_public_test.go +++ b/internal/controller/api/node/node_status_get_public_test.go @@ -34,9 +34,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" jobtypes "github.com/retr0h/osapi/internal/job" diff --git a/internal/api/node/node_status_get_test.go b/internal/controller/api/node/node_status_get_test.go similarity index 100% rename from internal/api/node/node_status_get_test.go rename to internal/controller/api/node/node_status_get_test.go diff --git a/internal/api/node/node_uptime_get.go b/internal/controller/api/node/node_uptime_get.go similarity index 98% rename from internal/api/node/node_uptime_get.go rename to internal/controller/api/node/node_uptime_get.go index a4f39aa2..17e44f28 100644 --- a/internal/api/node/node_uptime_get.go +++ b/internal/controller/api/node/node_uptime_get.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" ) diff --git a/internal/api/node/node_uptime_get_public_test.go b/internal/controller/api/node/node_uptime_get_public_test.go similarity index 98% rename from internal/api/node/node_uptime_get_public_test.go rename to internal/controller/api/node/node_uptime_get_public_test.go index 9757086e..912a967b 100644 --- a/internal/api/node/node_uptime_get_public_test.go +++ b/internal/controller/api/node/node_uptime_get_public_test.go @@ -33,9 +33,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" diff --git a/internal/api/node/types.go b/internal/controller/api/node/types.go similarity index 100% rename from internal/api/node/types.go rename to internal/controller/api/node/types.go diff --git a/internal/api/node/validate.go b/internal/controller/api/node/validate.go similarity index 100% rename from internal/api/node/validate.go rename to internal/controller/api/node/validate.go diff --git a/internal/api/server.go b/internal/controller/api/server.go similarity index 93% rename from internal/api/server.go rename to internal/controller/api/server.go index 3194d4fc..2dcd0956 100644 --- a/internal/api/server.go +++ b/internal/controller/api/server.go @@ -46,7 +46,7 @@ func New( // Initialize CORS configuration corsConfig := middleware.CORSConfig{} - allowOrigins := appConfig.API.Server.Security.CORS.AllowOrigins + allowOrigins := appConfig.Controller.API.Security.CORS.AllowOrigins if len(allowOrigins) > 0 { corsConfig.AllowOrigins = allowOrigins } @@ -60,7 +60,7 @@ func New( // Build custom roles map from config. var customRoles map[string][]string - if cfgRoles := appConfig.API.Server.Security.Roles; len(cfgRoles) > 0 { + if cfgRoles := appConfig.Controller.API.Security.Roles; len(cfgRoles) > 0 { customRoles = make(map[string][]string, len(cfgRoles)) for name, role := range cfgRoles { customRoles[name] = role.Permissions @@ -90,7 +90,7 @@ func New( func (s *Server) Start() { go func() { s.logger.Info("starting server") - listenAddr := fmt.Sprintf(":%d", s.appConfig.API.Port) + listenAddr := fmt.Sprintf(":%d", s.appConfig.Controller.API.Port) if err := s.Echo.Start(listenAddr); err != nil && err != http.ErrServerClosed { s.logger.Error( "failed to start server", diff --git a/internal/api/server_public_test.go b/internal/controller/api/server_public_test.go similarity index 99% rename from internal/api/server_public_test.go rename to internal/controller/api/server_public_test.go index 0cb251b4..bf8f1d11 100644 --- a/internal/api/server_public_test.go +++ b/internal/controller/api/server_public_test.go @@ -32,7 +32,7 @@ import ( "github.com/labstack/echo/v4" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" + "github.com/retr0h/osapi/internal/controller/api" auditstore "github.com/retr0h/osapi/internal/audit" "github.com/retr0h/osapi/internal/config" ) diff --git a/internal/api/types.go b/internal/controller/api/types.go similarity index 100% rename from internal/api/types.go rename to internal/controller/api/types.go diff --git a/internal/api/heartbeat.go b/internal/controller/heartbeat.go similarity index 99% rename from internal/api/heartbeat.go rename to internal/controller/heartbeat.go index 62d0a746..ca36a2a2 100644 --- a/internal/api/heartbeat.go +++ b/internal/controller/heartbeat.go @@ -18,7 +18,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -package api +package controller import ( "context" diff --git a/internal/api/heartbeat_test.go b/internal/controller/heartbeat_test.go similarity index 99% rename from internal/api/heartbeat_test.go rename to internal/controller/heartbeat_test.go index f001c46e..07bfb1ef 100644 --- a/internal/api/heartbeat_test.go +++ b/internal/controller/heartbeat_test.go @@ -18,7 +18,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -package api +package controller import ( "context" From 78033c16cc75148fe4023049c4f5ce52c4dad6fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=A0=CF=85=CE=B1=CE=B7=20=D7=A0=CF=85=CE=B1=CE=B7=D1=95?= =?UTF-8?q?=CF=83=CE=B7?= Date: Thu, 19 Mar 2026 22:06:53 -0700 Subject: [PATCH 05/12] refactor: move internal/notify to internal/controller/notify MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- internal/{ => controller}/notify/log.go | 0 internal/{ => controller}/notify/log_public_test.go | 2 +- internal/{ => controller}/notify/mocks/generate.go | 0 internal/{ => controller}/notify/mocks/types.gen.go | 2 +- internal/{ => controller}/notify/types.go | 0 internal/{ => controller}/notify/watcher.go | 0 internal/{ => controller}/notify/watcher_test.go | 0 7 files changed, 2 insertions(+), 2 deletions(-) rename internal/{ => controller}/notify/log.go (100%) rename internal/{ => controller}/notify/log_public_test.go (97%) rename internal/{ => controller}/notify/mocks/generate.go (100%) rename internal/{ => controller}/notify/mocks/types.gen.go (95%) rename internal/{ => controller}/notify/types.go (100%) rename internal/{ => controller}/notify/watcher.go (100%) rename internal/{ => controller}/notify/watcher_test.go (100%) diff --git a/internal/notify/log.go b/internal/controller/notify/log.go similarity index 100% rename from internal/notify/log.go rename to internal/controller/notify/log.go diff --git a/internal/notify/log_public_test.go b/internal/controller/notify/log_public_test.go similarity index 97% rename from internal/notify/log_public_test.go rename to internal/controller/notify/log_public_test.go index f84811d6..3bda8ff9 100644 --- a/internal/notify/log_public_test.go +++ b/internal/controller/notify/log_public_test.go @@ -28,7 +28,7 @@ import ( "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/notify" + "github.com/retr0h/osapi/internal/controller/notify" ) type LogNotifierPublicTestSuite struct { diff --git a/internal/notify/mocks/generate.go b/internal/controller/notify/mocks/generate.go similarity index 100% rename from internal/notify/mocks/generate.go rename to internal/controller/notify/mocks/generate.go diff --git a/internal/notify/mocks/types.gen.go b/internal/controller/notify/mocks/types.gen.go similarity index 95% rename from internal/notify/mocks/types.gen.go rename to internal/controller/notify/mocks/types.gen.go index c6f56815..1801f4d6 100644 --- a/internal/notify/mocks/types.gen.go +++ b/internal/controller/notify/mocks/types.gen.go @@ -9,7 +9,7 @@ import ( reflect "reflect" gomock "github.com/golang/mock/gomock" - notify "github.com/retr0h/osapi/internal/notify" + notify "github.com/retr0h/osapi/internal/controller/notify" ) // MockNotifier is a mock of Notifier interface. diff --git a/internal/notify/types.go b/internal/controller/notify/types.go similarity index 100% rename from internal/notify/types.go rename to internal/controller/notify/types.go diff --git a/internal/notify/watcher.go b/internal/controller/notify/watcher.go similarity index 100% rename from internal/notify/watcher.go rename to internal/controller/notify/watcher.go diff --git a/internal/notify/watcher_test.go b/internal/controller/notify/watcher_test.go similarity index 100% rename from internal/notify/watcher_test.go rename to internal/controller/notify/watcher_test.go From 4437377882ad24343c2227371a2db8431aa0978c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=A0=CF=85=CE=B1=CE=B7=20=D7=A0=CF=85=CE=B1=CE=B7=D1=95?= =?UTF-8?q?=CF=83=CE=B7?= Date: Thu, 19 Mar 2026 22:20:44 -0700 Subject: [PATCH 06/12] refactor: rename api server cmd to controller MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove cmd/api.go parent, add cmd/controller.go - Rename apiServerCmd → controllerCmd, apiServerStartCmd → controllerStartCmd - Rename client api → client controller commands - Update all appConfig.API references to appConfig.Controller - Fix all test config literals (config.API → config.Controller) - Update setupAPIServer → setupController and related functions 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- cmd/api.go | 36 ------------------ cmd/client.go | 8 ++-- cmd/{client_api.go => client_controller.go} | 10 ++--- ..._status.go => client_controller_status.go} | 10 ++--- cmd/{api_server.go => controller.go} | 38 ++++++++++--------- ...pi_server_setup.go => controller_setup.go} | 27 ++++++------- ...pi_server_start.go => controller_start.go} | 19 +++++----- cmd/nats_heartbeat.go | 6 +-- cmd/start.go | 14 +++---- cmd/token_generate.go | 2 +- cmd/token_validate.go | 2 +- internal/config/schema_public_test.go | 12 +++--- internal/config/schema_test.go | 4 +- .../api/agent/agent_drain_public_test.go | 4 +- .../api/agent/agent_get_public_test.go | 4 +- .../api/agent/agent_list_public_test.go | 4 +- .../api/agent/agent_undrain_public_test.go | 4 +- .../api/audit/audit_export_public_test.go | 4 +- .../api/audit/audit_get_public_test.go | 4 +- .../api/audit/audit_list_public_test.go | 4 +- .../docker/container_create_public_test.go | 4 +- .../api/docker/container_exec_public_test.go | 4 +- .../container_image_remove_public_test.go | 4 +- .../docker/container_inspect_public_test.go | 4 +- .../api/docker/container_list_public_test.go | 4 +- .../api/docker/container_pull_public_test.go | 4 +- .../docker/container_remove_public_test.go | 4 +- .../api/docker/container_start_public_test.go | 4 +- .../api/docker/container_stop_public_test.go | 4 +- .../api/file/file_delete_public_test.go | 4 +- .../api/file/file_get_public_test.go | 4 +- .../api/file/file_list_public_test.go | 4 +- .../api/file/file_upload_public_test.go | 4 +- .../controller/api/handler_public_test.go | 4 +- .../health/health_status_get_public_test.go | 4 +- .../api/job/job_delete_public_test.go | 4 +- .../controller/api/job/job_get_public_test.go | 4 +- .../api/job/job_list_public_test.go | 4 +- .../api/job/job_retry_public_test.go | 4 +- .../api/node/command_exec_post_public_test.go | 4 +- .../node/command_shell_post_public_test.go | 4 +- .../api/node/file_deploy_post_public_test.go | 4 +- .../api/node/file_status_post_public_test.go | 4 +- ...etwork_dns_get_by_interface_public_test.go | 4 +- ...etwork_dns_put_by_interface_public_test.go | 4 +- .../api/node/network_ping_post_public_test.go | 4 +- .../api/node/node_disk_get_public_test.go | 4 +- .../api/node/node_hostname_get_public_test.go | 4 +- .../api/node/node_load_get_public_test.go | 4 +- .../api/node/node_memory_get_public_test.go | 4 +- .../api/node/node_os_get_public_test.go | 4 +- .../api/node/node_status_get_public_test.go | 4 +- .../api/node/node_uptime_get_public_test.go | 4 +- internal/controller/api/server_public_test.go | 28 +++++++------- 54 files changed, 171 insertions(+), 205 deletions(-) delete mode 100644 cmd/api.go rename cmd/{client_api.go => client_controller.go} (85%) rename cmd/{client_api_status.go => client_controller_status.go} (84%) rename cmd/{api_server.go => controller.go} (62%) rename cmd/{api_server_setup.go => controller_setup.go} (96%) rename cmd/{api_server_start.go => controller_start.go} (76%) diff --git a/cmd/api.go b/cmd/api.go deleted file mode 100644 index 5150af18..00000000 --- a/cmd/api.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) 2024 John Dewey - -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: - -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. - -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -// Package cmd provides CLI commands for OSAPI. -package cmd - -import ( - "github.com/spf13/cobra" -) - -// apiCmd represents the api command. -var apiCmd = &cobra.Command{ - Use: "api", - Short: "The api subcommand", -} - -func init() { - rootCmd.AddCommand(apiCmd) -} diff --git a/cmd/client.go b/cmd/client.go index c8c7f733..7a1c2391 100644 --- a/cmd/client.go +++ b/cmd/client.go @@ -58,12 +58,12 @@ var clientCmd = &cobra.Command{ "client configuration", slog.String("config_file", viper.ConfigFileUsed()), slog.Bool("debug", appConfig.Debug), - slog.String("api.client.url", appConfig.API.URL), + slog.String("controller.client.url", appConfig.Controller.Client.URL), ) sdkClient = client.New( - appConfig.API.URL, - appConfig.API.Client.Security.BearerToken, + appConfig.Controller.Client.URL, + appConfig.Controller.Client.Security.BearerToken, client.WithLogger(logger), ) }, @@ -82,5 +82,5 @@ func init() { clientCmd.PersistentFlags(). StringP("target", "T", "_any", "Target: _any, _all, hostname, or label (group:web.dev)") - _ = viper.BindPFlag("api.client.url", clientCmd.PersistentFlags().Lookup("url")) + _ = viper.BindPFlag("controller.client.url", clientCmd.PersistentFlags().Lookup("url")) } diff --git a/cmd/client_api.go b/cmd/client_controller.go similarity index 85% rename from cmd/client_api.go rename to cmd/client_controller.go index dac51171..f81a8593 100644 --- a/cmd/client_api.go +++ b/cmd/client_controller.go @@ -24,12 +24,12 @@ import ( "github.com/spf13/cobra" ) -// clientAPICmd represents the api parent command. -var clientAPICmd = &cobra.Command{ - Use: "api", - Short: "API server commands", +// clientControllerCmd represents the controller parent command. +var clientControllerCmd = &cobra.Command{ + Use: "controller", + Short: "Controller commands", } func init() { - clientCmd.AddCommand(clientAPICmd) + clientCmd.AddCommand(clientControllerCmd) } diff --git a/cmd/client_api_status.go b/cmd/client_controller_status.go similarity index 84% rename from cmd/client_api_status.go rename to cmd/client_controller_status.go index 0cd344bf..eb5118e7 100644 --- a/cmd/client_api_status.go +++ b/cmd/client_controller_status.go @@ -28,11 +28,11 @@ import ( "github.com/retr0h/osapi/internal/cli" ) -// clientAPIStatusCmd shows health status for the API server. -var clientAPIStatusCmd = &cobra.Command{ +// clientControllerStatusCmd shows health status for the controller. +var clientControllerStatusCmd = &cobra.Command{ Use: "status", - Short: "API server component health", - Long: `Show health status for all registered API servers.`, + Short: "Controller component health", + Long: `Show health status for all registered controllers.`, Run: func(cmd *cobra.Command, _ []string) { ctx := cmd.Context() @@ -53,5 +53,5 @@ var clientAPIStatusCmd = &cobra.Command{ } func init() { - clientAPICmd.AddCommand(clientAPIStatusCmd) + clientControllerCmd.AddCommand(clientControllerStatusCmd) } diff --git a/cmd/api_server.go b/cmd/controller.go similarity index 62% rename from cmd/api_server.go rename to cmd/controller.go index e716cfbb..cec62a04 100644 --- a/cmd/api_server.go +++ b/cmd/controller.go @@ -32,10 +32,12 @@ import ( "github.com/retr0h/osapi/internal/config" ) -// apiServerCmd represents the apiServer command. -var apiServerCmd = &cobra.Command{ - Use: "server", - Short: "The server subcommand", +// controllerCmd represents the controller command. +var controllerCmd = &cobra.Command{ + Use: "controller", + Short: "Manage the controller process", + Long: `Manage the control plane process. The controller runs the REST API, +component heartbeat, and condition notification watcher.`, PersistentPreRun: func(_ *cobra.Command, _ []string) { cli.ValidateDistribution(logger) @@ -51,32 +53,32 @@ var apiServerCmd = &cobra.Command{ } logger.Debug( - "api server configuration", + "controller configuration", slog.String("config_file", viper.ConfigFileUsed()), slog.Bool("debug", appConfig.Debug), - slog.Int("api.server.port", appConfig.API.Port), - slog.String("api.server.nats.host", appConfig.API.NATS.Host), - slog.Int("api.server.nats.port", appConfig.API.NATS.Port), - slog.String("api.server.nats.client_name", appConfig.API.NATS.ClientName), - slog.String("api.server.nats.namespace", appConfig.API.NATS.Namespace), - slog.String("api.server.nats.auth.type", appConfig.API.NATS.Auth.Type), + slog.Int("controller.api.port", appConfig.Controller.API.Port), + slog.String("controller.nats.host", appConfig.Controller.NATS.Host), + slog.Int("controller.nats.port", appConfig.Controller.NATS.Port), + slog.String("controller.nats.client_name", appConfig.Controller.NATS.ClientName), + slog.String("controller.nats.namespace", appConfig.Controller.NATS.Namespace), + slog.String("controller.nats.auth.type", appConfig.Controller.NATS.Auth.Type), slog.String( - "api.server.security.cors.allow_origins", - strings.Join(appConfig.API.Server.Security.CORS.AllowOrigins, ","), + "controller.api.security.cors.allow_origins", + strings.Join(appConfig.Controller.API.Security.CORS.AllowOrigins, ","), ), slog.String( - "api.server.security.signing_key", - maskedAppConfig.API.Server.Security.SigningKey, + "controller.api.security.signing_key", + maskedAppConfig.Controller.API.Security.SigningKey, ), ) }, } func init() { - apiCmd.AddCommand(apiServerCmd) + rootCmd.AddCommand(controllerCmd) - apiServerCmd.PersistentFlags(). + controllerCmd.PersistentFlags(). IntP("port", "p", 8080, "Port the server will bind to") - _ = viper.BindPFlag("api.server.port", apiServerCmd.PersistentFlags().Lookup("port")) + _ = viper.BindPFlag("controller.api.port", controllerCmd.PersistentFlags().Lookup("port")) } diff --git a/cmd/api_server_setup.go b/cmd/controller_setup.go similarity index 96% rename from cmd/api_server_setup.go rename to cmd/controller_setup.go index e61395f4..75ee9128 100644 --- a/cmd/api_server_setup.go +++ b/cmd/controller_setup.go @@ -35,16 +35,17 @@ import ( "github.com/nats-io/nats.go/jetstream" natsclient "github.com/osapi-io/nats-client/pkg/client" - "github.com/retr0h/osapi/internal/api" - "github.com/retr0h/osapi/internal/api/file" - "github.com/retr0h/osapi/internal/api/health" + "github.com/retr0h/osapi/internal/controller" + "github.com/retr0h/osapi/internal/controller/api" + "github.com/retr0h/osapi/internal/controller/api/file" + "github.com/retr0h/osapi/internal/controller/api/health" "github.com/retr0h/osapi/internal/audit" "github.com/retr0h/osapi/internal/cli" "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" jobclient "github.com/retr0h/osapi/internal/job/client" "github.com/retr0h/osapi/internal/messaging" - "github.com/retr0h/osapi/internal/notify" + "github.com/retr0h/osapi/internal/controller/notify" "github.com/retr0h/osapi/internal/provider/process" "github.com/retr0h/osapi/internal/validation" ) @@ -88,10 +89,10 @@ type natsBundle struct { objStore file.ObjectStoreManager } -// setupAPIServer connects to NATS, creates the API server with all handlers, +// setupController connects to NATS, creates the API server with all handlers, // and returns the server manager and NATS bundle. It is used by the standalone // API server start and combined start commands. -func setupAPIServer( +func setupController( ctx context.Context, log *slog.Logger, connCfg config.NATSConnection, @@ -135,12 +136,12 @@ func setupAPIServer( ) sm := api.New(appConfig, log, serverOpts...) - registerAPIHandlers( + registerControllerHandlers( sm, b.jobClient, checker, metricsProvider, metricsHandler, metricsPath, auditStore, b.objStore, ) - startAPIHeartbeat(ctx, log, b.registryKV) + startControllerHeartbeat(ctx, log, b.registryKV) startConditionWatcher(ctx, log, b.registryKV) return sm, b @@ -565,7 +566,7 @@ func createAuditStore( return store, []api.Option{api.WithAuditStore(store)} } -func registerAPIHandlers( +func registerControllerHandlers( sm ServerManager, jc jobclient.JobClient, checker health.Checker, @@ -639,10 +640,10 @@ func startConditionWatcher( }() } -// startAPIHeartbeat resolves the local hostname, creates a ComponentHeartbeat +// startControllerHeartbeat resolves the local hostname, creates a ComponentHeartbeat // for the API server, and starts it in a background goroutine. The heartbeat // deregisters when ctx is cancelled. -func startAPIHeartbeat( +func startControllerHeartbeat( ctx context.Context, log *slog.Logger, registryKV jetstream.KeyValue, @@ -650,13 +651,13 @@ func startAPIHeartbeat( hostname, err := os.Hostname() if err != nil { log.Warn( - "failed to resolve hostname for API heartbeat, using 'unknown'", + "failed to resolve hostname for controller heartbeat, using 'unknown'", slog.String("error", err.Error()), ) hostname = "unknown" } - hb := api.NewComponentHeartbeat( + hb := controller.NewComponentHeartbeat( log, registryKV, hostname, diff --git a/cmd/api_server_start.go b/cmd/controller_start.go similarity index 76% rename from cmd/api_server_start.go rename to cmd/controller_start.go index 1c67c431..20748da8 100644 --- a/cmd/api_server_start.go +++ b/cmd/controller_start.go @@ -30,16 +30,15 @@ import ( "github.com/retr0h/osapi/internal/telemetry" ) -// apiServerStartCmd represents the apiServerStart command. -var apiServerStartCmd = &cobra.Command{ +// controllerStartCmd represents the controller start command. +var controllerStartCmd = &cobra.Command{ Use: "start", - Short: "Start the server", - Long: `Start the API server. -`, + Short: "Start the controller", + Long: `Start the control plane process (API server, heartbeat, notifications).`, Run: func(cmd *cobra.Command, _ []string) { ctx := cmd.Context() - shutdownTracer, err := telemetry.InitTracer(ctx, "osapi-api", appConfig.Telemetry.Tracing) + shutdownTracer, err := telemetry.InitTracer(ctx, "osapi-controller", appConfig.Telemetry.Tracing) if err != nil { cli.LogFatal(logger, "failed to initialize tracer", err) } @@ -51,10 +50,10 @@ var apiServerStartCmd = &cobra.Command{ cli.LogFatal(logger, "failed to initialize meter", err) } - job.Init(appConfig.API.NATS.Namespace) + job.Init(appConfig.Controller.NATS.Namespace) - log := logger.With("component", "api") - sm, b := setupAPIServer(ctx, log, appConfig.API.NATS, metricsHandler, metricsPath) + log := logger.With("component", "controller") + sm, b := setupController(ctx, log, appConfig.Controller.NATS, metricsHandler, metricsPath) sm.Start() cli.RunServer(ctx, sm, func() { @@ -66,5 +65,5 @@ var apiServerStartCmd = &cobra.Command{ } func init() { - apiServerCmd.AddCommand(apiServerStartCmd) + controllerCmd.AddCommand(controllerStartCmd) } diff --git a/cmd/nats_heartbeat.go b/cmd/nats_heartbeat.go index a32c6382..360a80f0 100644 --- a/cmd/nats_heartbeat.go +++ b/cmd/nats_heartbeat.go @@ -29,7 +29,7 @@ import ( "github.com/nats-io/nats.go/jetstream" natsclient "github.com/osapi-io/nats-client/pkg/client" - "github.com/retr0h/osapi/internal/api" + "github.com/retr0h/osapi/internal/controller" "github.com/retr0h/osapi/internal/cli" "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/messaging" @@ -83,7 +83,7 @@ func startNATSHeartbeat( return } - hb := api.NewComponentHeartbeat( + hb := controller.NewComponentHeartbeat( log, registryKV, hostname, @@ -120,7 +120,7 @@ func startNATSHeartbeatFromKV( hostname = "unknown" } - hb := api.NewComponentHeartbeat( + hb := controller.NewComponentHeartbeat( log, registryKV, hostname, diff --git a/cmd/start.go b/cmd/start.go index 81b283d6..a35041ea 100644 --- a/cmd/start.go +++ b/cmd/start.go @@ -59,10 +59,10 @@ func (c *compositeLifecycle) Stop(ctx context.Context) { var startCmd = &cobra.Command{ Use: "start", Short: "Start all components (NATS, API server, agent)", - Long: `Start the embedded NATS server, API server, and agent in a single process. + Long: `Start the embedded NATS server, controller, and agent in a single process. This is the recommended way to run OSAPI on a single host. All three components -start in order (NATS → API → agent) and shut down gracefully on SIGINT/SIGTERM. +start in order (NATS → controller → agent) and shut down gracefully on SIGINT/SIGTERM. `, Run: func(cmd *cobra.Command, _ []string) { ctx := cmd.Context() @@ -89,12 +89,12 @@ start in order (NATS → API → agent) and shut down gracefully on SIGINT/SIGTE natsLog := logger.With("component", "nats") natsServer := setupNATSServer(ctx, natsLog) - sm, apiBundle := setupAPIServer( - ctx, logger.With("component", "api"), - appConfig.API.NATS, metricsHandler, metricsPath, + sm, controllerBundle := setupController( + ctx, logger.With("component", "controller"), + appConfig.Controller.NATS, metricsHandler, metricsPath, ) - startNATSHeartbeatFromKV(ctx, natsLog, apiBundle.registryKV) + startNATSHeartbeatFromKV(ctx, natsLog, controllerBundle.registryKV) agentServer, agentBundle := setupAgent( ctx, logger.With("component", "agent"), appConfig.Agent.NATS, @@ -113,7 +113,7 @@ start in order (NATS → API → agent) and shut down gracefully on SIGINT/SIGTE _ = shutdownMeter(context.Background()) _ = shutdownTracer(context.Background()) cli.CloseNATSClient(agentBundle.nc) - cli.CloseNATSClient(apiBundle.nc) + cli.CloseNATSClient(controllerBundle.nc) }) }, } diff --git a/cmd/token_generate.go b/cmd/token_generate.go index 009f29ae..a76f2190 100644 --- a/cmd/token_generate.go +++ b/cmd/token_generate.go @@ -48,7 +48,7 @@ var tokenGenerateCmd = &cobra.Command{ This command allows you to customize the token properties for various use cases. `, Run: func(cmd *cobra.Command, _ []string) { - signingKey := appConfig.API.Server.Security.SigningKey + signingKey := appConfig.Controller.API.Security.SigningKey roles, _ := cmd.Flags().GetStringSlice("roles") subject, _ := cmd.Flags().GetString("subject") permissions, _ := cmd.Flags().GetStringSlice("permissions") diff --git a/cmd/token_validate.go b/cmd/token_validate.go index 10ddfd63..c4e9daf7 100644 --- a/cmd/token_validate.go +++ b/cmd/token_validate.go @@ -47,7 +47,7 @@ var tokenValidateCmd = &cobra.Command{ This command ensures that the token is authentic, has not expired, and conforms to the expected roles and audience. `, Run: func(cmd *cobra.Command, _ []string) { - signingKey := appConfig.API.Server.Security.SigningKey + signingKey := appConfig.Controller.API.Security.SigningKey tokenString, _ := cmd.Flags().GetString("token") var tm TokenValidator = authtoken.New(logger) diff --git a/internal/config/schema_public_test.go b/internal/config/schema_public_test.go index a20975a8..4f618e86 100644 --- a/internal/config/schema_public_test.go +++ b/internal/config/schema_public_test.go @@ -42,13 +42,13 @@ func (s *ConfigPublicTestSuite) TestValidate() { { name: "valid config", config: config.Config{ - API: config.API{ + Controller: config.Controller{ Client: config.Client{ Security: config.ClientSecurity{ BearerToken: "test-bearer-token", }, }, - Server: config.Server{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: "test-signing-key", }, @@ -60,13 +60,13 @@ func (s *ConfigPublicTestSuite) TestValidate() { { name: "missing signing key", config: config.Config{ - API: config.API{ + Controller: config.Controller{ Client: config.Client{ Security: config.ClientSecurity{ BearerToken: "test-bearer-token", }, }, - Server: config.Server{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: "", }, @@ -79,13 +79,13 @@ func (s *ConfigPublicTestSuite) TestValidate() { { name: "missing bearer token", config: config.Config{ - API: config.API{ + Controller: config.Controller{ Client: config.Client{ Security: config.ClientSecurity{ BearerToken: "", }, }, - Server: config.Server{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: "test-signing-key", }, diff --git a/internal/config/schema_test.go b/internal/config/schema_test.go index 665d69d3..f423d3de 100644 --- a/internal/config/schema_test.go +++ b/internal/config/schema_test.go @@ -41,13 +41,13 @@ func (s *ConfigTestSuite) TestValidateRegisterValidatorsError() { } c := &Config{ - API: API{ + Controller: Controller{ Client: Client{ Security: ClientSecurity{ BearerToken: "test-token", }, }, - Server: Server{ + API: APIServer{ Security: ServerSecurity{ SigningKey: "test-key", }, diff --git a/internal/controller/api/agent/agent_drain_public_test.go b/internal/controller/api/agent/agent_drain_public_test.go index da87121d..808eb6ad 100644 --- a/internal/controller/api/agent/agent_drain_public_test.go +++ b/internal/controller/api/agent/agent_drain_public_test.go @@ -401,8 +401,8 @@ func (s *AgentDrainPublicTestSuite) TestDrainAgentRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacAgentDrainTestSigningKey, }, diff --git a/internal/controller/api/agent/agent_get_public_test.go b/internal/controller/api/agent/agent_get_public_test.go index d3b27d06..638fb607 100644 --- a/internal/controller/api/agent/agent_get_public_test.go +++ b/internal/controller/api/agent/agent_get_public_test.go @@ -326,8 +326,8 @@ func (s *AgentGetPublicTestSuite) TestGetAgentDetailsRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacAgentGetTestSigningKey, }, diff --git a/internal/controller/api/agent/agent_list_public_test.go b/internal/controller/api/agent/agent_list_public_test.go index 213d25a3..6740d07c 100644 --- a/internal/controller/api/agent/agent_list_public_test.go +++ b/internal/controller/api/agent/agent_list_public_test.go @@ -470,8 +470,8 @@ func (s *AgentListPublicTestSuite) TestGetAgentRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacAgentListTestSigningKey, }, diff --git a/internal/controller/api/agent/agent_undrain_public_test.go b/internal/controller/api/agent/agent_undrain_public_test.go index 8a051e45..294cc0b9 100644 --- a/internal/controller/api/agent/agent_undrain_public_test.go +++ b/internal/controller/api/agent/agent_undrain_public_test.go @@ -415,8 +415,8 @@ func (s *AgentUndrainPublicTestSuite) TestUndrainAgentRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacAgentUndrainTestSigningKey, }, diff --git a/internal/controller/api/audit/audit_export_public_test.go b/internal/controller/api/audit/audit_export_public_test.go index ea580dbb..19e43eee 100644 --- a/internal/controller/api/audit/audit_export_public_test.go +++ b/internal/controller/api/audit/audit_export_public_test.go @@ -262,8 +262,8 @@ func (s *AuditExportPublicTestSuite) TestGetAuditExportRBACHTTP() { } appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacAuditExportTestSigningKey, }, diff --git a/internal/controller/api/audit/audit_get_public_test.go b/internal/controller/api/audit/audit_get_public_test.go index 55c0275b..819293b2 100644 --- a/internal/controller/api/audit/audit_get_public_test.go +++ b/internal/controller/api/audit/audit_get_public_test.go @@ -257,8 +257,8 @@ func (s *AuditGetPublicTestSuite) TestGetAuditLogByIDRBACHTTP() { } appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacAuditGetTestSigningKey, }, diff --git a/internal/controller/api/audit/audit_list_public_test.go b/internal/controller/api/audit/audit_list_public_test.go index c0a64b91..4be51db7 100644 --- a/internal/controller/api/audit/audit_list_public_test.go +++ b/internal/controller/api/audit/audit_list_public_test.go @@ -349,8 +349,8 @@ func (s *AuditListPublicTestSuite) TestGetAuditLogsRBACHTTP() { } appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacAuditListTestSigningKey, }, diff --git a/internal/controller/api/docker/container_create_public_test.go b/internal/controller/api/docker/container_create_public_test.go index 0ab903de..f20c3e8f 100644 --- a/internal/controller/api/docker/container_create_public_test.go +++ b/internal/controller/api/docker/container_create_public_test.go @@ -404,8 +404,8 @@ func (s *ContainerCreatePublicTestSuite) TestPostNodeContainerDockerRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacContainerCreateTestSigningKey, }, diff --git a/internal/controller/api/docker/container_exec_public_test.go b/internal/controller/api/docker/container_exec_public_test.go index 38fa40e9..a9a72361 100644 --- a/internal/controller/api/docker/container_exec_public_test.go +++ b/internal/controller/api/docker/container_exec_public_test.go @@ -442,8 +442,8 @@ func (s *ContainerExecPublicTestSuite) TestPostNodeContainerDockerExecRBACHTTP() jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacContainerExecTestSigningKey, }, diff --git a/internal/controller/api/docker/container_image_remove_public_test.go b/internal/controller/api/docker/container_image_remove_public_test.go index f52f4a3f..6eb8ea9d 100644 --- a/internal/controller/api/docker/container_image_remove_public_test.go +++ b/internal/controller/api/docker/container_image_remove_public_test.go @@ -377,8 +377,8 @@ func (s *ContainerImageRemovePublicTestSuite) TestDeleteNodeContainerDockerImage jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacContainerImageRemoveTestSigningKey, }, diff --git a/internal/controller/api/docker/container_inspect_public_test.go b/internal/controller/api/docker/container_inspect_public_test.go index fa5d811f..73c88397 100644 --- a/internal/controller/api/docker/container_inspect_public_test.go +++ b/internal/controller/api/docker/container_inspect_public_test.go @@ -320,8 +320,8 @@ func (s *ContainerInspectPublicTestSuite) TestGetNodeContainerDockerByIDRBACHTTP jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacContainerInspectTestSigningKey, }, diff --git a/internal/controller/api/docker/container_list_public_test.go b/internal/controller/api/docker/container_list_public_test.go index b6f14b75..f3be894d 100644 --- a/internal/controller/api/docker/container_list_public_test.go +++ b/internal/controller/api/docker/container_list_public_test.go @@ -418,8 +418,8 @@ func (s *ContainerListPublicTestSuite) TestGetNodeContainerDockerRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacContainerListTestSigningKey, }, diff --git a/internal/controller/api/docker/container_pull_public_test.go b/internal/controller/api/docker/container_pull_public_test.go index 327af4f2..52f4e004 100644 --- a/internal/controller/api/docker/container_pull_public_test.go +++ b/internal/controller/api/docker/container_pull_public_test.go @@ -347,8 +347,8 @@ func (s *ContainerPullPublicTestSuite) TestPostNodeContainerDockerPullRBACHTTP() jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacContainerPullTestSigningKey, }, diff --git a/internal/controller/api/docker/container_remove_public_test.go b/internal/controller/api/docker/container_remove_public_test.go index 518053c5..ffebf4b6 100644 --- a/internal/controller/api/docker/container_remove_public_test.go +++ b/internal/controller/api/docker/container_remove_public_test.go @@ -341,8 +341,8 @@ func (s *ContainerRemovePublicTestSuite) TestDeleteNodeContainerDockerByIDRBACHT jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacContainerRemoveTestSigningKey, }, diff --git a/internal/controller/api/docker/container_start_public_test.go b/internal/controller/api/docker/container_start_public_test.go index 22e5a2db..7e71b72a 100644 --- a/internal/controller/api/docker/container_start_public_test.go +++ b/internal/controller/api/docker/container_start_public_test.go @@ -308,8 +308,8 @@ func (s *ContainerStartPublicTestSuite) TestPostNodeContainerDockerStartRBACHTTP jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacContainerStartTestSigningKey, }, diff --git a/internal/controller/api/docker/container_stop_public_test.go b/internal/controller/api/docker/container_stop_public_test.go index 0b488c5f..135ef92e 100644 --- a/internal/controller/api/docker/container_stop_public_test.go +++ b/internal/controller/api/docker/container_stop_public_test.go @@ -377,8 +377,8 @@ func (s *ContainerStopPublicTestSuite) TestPostNodeContainerDockerStopRBACHTTP() jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacContainerStopTestSigningKey, }, diff --git a/internal/controller/api/file/file_delete_public_test.go b/internal/controller/api/file/file_delete_public_test.go index ccb3a349..361fbeac 100644 --- a/internal/controller/api/file/file_delete_public_test.go +++ b/internal/controller/api/file/file_delete_public_test.go @@ -335,8 +335,8 @@ func (s *FileDeletePublicTestSuite) TestDeleteFileByNameRBACHTTP() { objMock := tc.setupMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacDeleteTestSigningKey, }, diff --git a/internal/controller/api/file/file_get_public_test.go b/internal/controller/api/file/file_get_public_test.go index c2c21a93..6882d261 100644 --- a/internal/controller/api/file/file_get_public_test.go +++ b/internal/controller/api/file/file_get_public_test.go @@ -330,8 +330,8 @@ func (s *FileGetPublicTestSuite) TestGetFileByNameRBACHTTP() { objMock := tc.setupMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacGetTestSigningKey, }, diff --git a/internal/controller/api/file/file_list_public_test.go b/internal/controller/api/file/file_list_public_test.go index c19414f7..6742d6d6 100644 --- a/internal/controller/api/file/file_list_public_test.go +++ b/internal/controller/api/file/file_list_public_test.go @@ -338,8 +338,8 @@ func (s *FileListPublicTestSuite) TestGetFilesRBACHTTP() { objMock := tc.setupMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacListTestSigningKey, }, diff --git a/internal/controller/api/file/file_upload_public_test.go b/internal/controller/api/file/file_upload_public_test.go index 4b90e32a..37b3ffc0 100644 --- a/internal/controller/api/file/file_upload_public_test.go +++ b/internal/controller/api/file/file_upload_public_test.go @@ -665,8 +665,8 @@ func (s *FileUploadPublicTestSuite) TestPostFileRBACHTTP() { objMock := tc.setupMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacUploadTestSigningKey, }, diff --git a/internal/controller/api/handler_public_test.go b/internal/controller/api/handler_public_test.go index ba862b34..26c23e14 100644 --- a/internal/controller/api/handler_public_test.go +++ b/internal/controller/api/handler_public_test.go @@ -72,8 +72,8 @@ func (s *HandlerPublicTestSuite) SetupTest() { s.mockJobClient = mocks.NewMockJobClient(s.mockCtrl) appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: "test-signing-key", }, diff --git a/internal/controller/api/health/health_status_get_public_test.go b/internal/controller/api/health/health_status_get_public_test.go index e5aae19b..b4ea7dee 100644 --- a/internal/controller/api/health/health_status_get_public_test.go +++ b/internal/controller/api/health/health_status_get_public_test.go @@ -782,8 +782,8 @@ func (s *HealthStatusGetPublicTestSuite) TestGetHealthStatusRBACHTTP() { } appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacHealthStatusTestSigningKey, }, diff --git a/internal/controller/api/job/job_delete_public_test.go b/internal/controller/api/job/job_delete_public_test.go index bfb0e318..a08c7cba 100644 --- a/internal/controller/api/job/job_delete_public_test.go +++ b/internal/controller/api/job/job_delete_public_test.go @@ -253,8 +253,8 @@ func (s *JobDeletePublicTestSuite) TestDeleteJobByIDRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacJobDeleteTestSigningKey, }, diff --git a/internal/controller/api/job/job_get_public_test.go b/internal/controller/api/job/job_get_public_test.go index 845e7ef9..4f8a78e9 100644 --- a/internal/controller/api/job/job_get_public_test.go +++ b/internal/controller/api/job/job_get_public_test.go @@ -587,8 +587,8 @@ func (s *JobGetPublicTestSuite) TestGetJobByIDRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacJobGetTestSigningKey, }, diff --git a/internal/controller/api/job/job_list_public_test.go b/internal/controller/api/job/job_list_public_test.go index 372532cc..9a3b51b2 100644 --- a/internal/controller/api/job/job_list_public_test.go +++ b/internal/controller/api/job/job_list_public_test.go @@ -509,8 +509,8 @@ func (s *JobListPublicTestSuite) TestListJobsRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacJobListTestSigningKey, }, diff --git a/internal/controller/api/job/job_retry_public_test.go b/internal/controller/api/job/job_retry_public_test.go index a4ec9b50..df444cea 100644 --- a/internal/controller/api/job/job_retry_public_test.go +++ b/internal/controller/api/job/job_retry_public_test.go @@ -383,8 +383,8 @@ func (s *JobRetryPublicTestSuite) TestRetryJobByIDRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacJobRetryTestSigningKey, }, diff --git a/internal/controller/api/node/command_exec_post_public_test.go b/internal/controller/api/node/command_exec_post_public_test.go index 9fd25ffe..48831344 100644 --- a/internal/controller/api/node/command_exec_post_public_test.go +++ b/internal/controller/api/node/command_exec_post_public_test.go @@ -538,8 +538,8 @@ func (s *CommandExecPostPublicTestSuite) TestPostCommandExecRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacExecTestSigningKey, }, diff --git a/internal/controller/api/node/command_shell_post_public_test.go b/internal/controller/api/node/command_shell_post_public_test.go index 9bd638c8..01cb5f88 100644 --- a/internal/controller/api/node/command_shell_post_public_test.go +++ b/internal/controller/api/node/command_shell_post_public_test.go @@ -514,8 +514,8 @@ func (s *CommandShellPostPublicTestSuite) TestPostCommandShellRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacShellTestSigningKey, }, diff --git a/internal/controller/api/node/file_deploy_post_public_test.go b/internal/controller/api/node/file_deploy_post_public_test.go index f0e852f2..50bd9d30 100644 --- a/internal/controller/api/node/file_deploy_post_public_test.go +++ b/internal/controller/api/node/file_deploy_post_public_test.go @@ -451,8 +451,8 @@ func (s *FileDeployPostPublicTestSuite) TestPostNodeFileDeployRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacFileDeployTestSigningKey, }, diff --git a/internal/controller/api/node/file_status_post_public_test.go b/internal/controller/api/node/file_status_post_public_test.go index e6792767..701beb94 100644 --- a/internal/controller/api/node/file_status_post_public_test.go +++ b/internal/controller/api/node/file_status_post_public_test.go @@ -380,8 +380,8 @@ func (s *FileStatusPostPublicTestSuite) TestPostNodeFileStatusRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacFileStatusTestSigningKey, }, diff --git a/internal/controller/api/node/network_dns_get_by_interface_public_test.go b/internal/controller/api/node/network_dns_get_by_interface_public_test.go index b1d63bf3..ed9bd254 100644 --- a/internal/controller/api/node/network_dns_get_by_interface_public_test.go +++ b/internal/controller/api/node/network_dns_get_by_interface_public_test.go @@ -454,8 +454,8 @@ func (s *NetworkDNSGetByInterfacePublicTestSuite) TestGetNetworkDNSByInterfaceRB jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacDNSGetTestSigningKey, }, diff --git a/internal/controller/api/node/network_dns_put_by_interface_public_test.go b/internal/controller/api/node/network_dns_put_by_interface_public_test.go index 95bfccee..7bb9a358 100644 --- a/internal/controller/api/node/network_dns_put_by_interface_public_test.go +++ b/internal/controller/api/node/network_dns_put_by_interface_public_test.go @@ -529,8 +529,8 @@ func (s *NetworkDNSPutByInterfacePublicTestSuite) TestPutNetworkDNSRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacDNSPutTestSigningKey, }, diff --git a/internal/controller/api/node/network_ping_post_public_test.go b/internal/controller/api/node/network_ping_post_public_test.go index d6ada9f9..194570df 100644 --- a/internal/controller/api/node/network_ping_post_public_test.go +++ b/internal/controller/api/node/network_ping_post_public_test.go @@ -509,8 +509,8 @@ func (s *NetworkPingPostPublicTestSuite) TestPostNetworkPingRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacPingTestSigningKey, }, diff --git a/internal/controller/api/node/node_disk_get_public_test.go b/internal/controller/api/node/node_disk_get_public_test.go index a9f59e66..7fcc26de 100644 --- a/internal/controller/api/node/node_disk_get_public_test.go +++ b/internal/controller/api/node/node_disk_get_public_test.go @@ -368,8 +368,8 @@ func (s *NodeDiskGetPublicTestSuite) TestGetNodeDiskRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacDiskTestSigningKey, }, diff --git a/internal/controller/api/node/node_hostname_get_public_test.go b/internal/controller/api/node/node_hostname_get_public_test.go index 111ce5fe..1b3cbdb7 100644 --- a/internal/controller/api/node/node_hostname_get_public_test.go +++ b/internal/controller/api/node/node_hostname_get_public_test.go @@ -385,8 +385,8 @@ func (s *NodeHostnameGetPublicTestSuite) TestGetNodeHostnameRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacTestSigningKey, }, diff --git a/internal/controller/api/node/node_load_get_public_test.go b/internal/controller/api/node/node_load_get_public_test.go index 711b8220..0b82ecdc 100644 --- a/internal/controller/api/node/node_load_get_public_test.go +++ b/internal/controller/api/node/node_load_get_public_test.go @@ -347,8 +347,8 @@ func (s *NodeLoadGetPublicTestSuite) TestGetNodeLoadRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacLoadTestSigningKey, }, diff --git a/internal/controller/api/node/node_memory_get_public_test.go b/internal/controller/api/node/node_memory_get_public_test.go index ad331c8a..ea80a9ff 100644 --- a/internal/controller/api/node/node_memory_get_public_test.go +++ b/internal/controller/api/node/node_memory_get_public_test.go @@ -347,8 +347,8 @@ func (s *NodeMemoryGetPublicTestSuite) TestGetNodeMemoryRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacMemoryTestSigningKey, }, diff --git a/internal/controller/api/node/node_os_get_public_test.go b/internal/controller/api/node/node_os_get_public_test.go index d7a4b061..9a25f243 100644 --- a/internal/controller/api/node/node_os_get_public_test.go +++ b/internal/controller/api/node/node_os_get_public_test.go @@ -346,8 +346,8 @@ func (s *NodeOSGetPublicTestSuite) TestGetNodeOSRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacOSTestSigningKey, }, diff --git a/internal/controller/api/node/node_status_get_public_test.go b/internal/controller/api/node/node_status_get_public_test.go index 3178001c..392a3917 100644 --- a/internal/controller/api/node/node_status_get_public_test.go +++ b/internal/controller/api/node/node_status_get_public_test.go @@ -456,8 +456,8 @@ func (s *NodeStatusGetPublicTestSuite) TestGetNodeStatusRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacStatusTestSigningKey, }, diff --git a/internal/controller/api/node/node_uptime_get_public_test.go b/internal/controller/api/node/node_uptime_get_public_test.go index 912a967b..2003175d 100644 --- a/internal/controller/api/node/node_uptime_get_public_test.go +++ b/internal/controller/api/node/node_uptime_get_public_test.go @@ -345,8 +345,8 @@ func (s *NodeUptimeGetPublicTestSuite) TestGetNodeUptimeRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacUptimeTestSigningKey, }, diff --git a/internal/controller/api/server_public_test.go b/internal/controller/api/server_public_test.go index bf8f1d11..77d88efa 100644 --- a/internal/controller/api/server_public_test.go +++ b/internal/controller/api/server_public_test.go @@ -50,8 +50,8 @@ func (s *ServerPublicTestSuite) TestNew() { { name: "creates server with default config", appConfig: config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: "test-key", }, @@ -62,8 +62,8 @@ func (s *ServerPublicTestSuite) TestNew() { { name: "creates server with custom roles", appConfig: config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: "test-key", Roles: map[string]config.CustomRole{ @@ -79,8 +79,8 @@ func (s *ServerPublicTestSuite) TestNew() { { name: "creates server with audit store option", appConfig: config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: "test-key", }, @@ -94,8 +94,8 @@ func (s *ServerPublicTestSuite) TestNew() { { name: "creates server with CORS origins", appConfig: config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: "test-key", CORS: config.CORS{ @@ -158,8 +158,8 @@ func (s *ServerPublicTestSuite) TestStartAndStop() { for _, tt := range tests { s.Run(tt.name, func() { appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Port: 0, Security: config.ServerSecurity{ SigningKey: "test-key", @@ -199,8 +199,8 @@ func (s *ServerPublicTestSuite) TestStartErrorPath() { port := ln.Addr().(*net.TCPAddr).Port appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Port: port, Security: config.ServerSecurity{ SigningKey: "test-key", @@ -234,8 +234,8 @@ func (s *ServerPublicTestSuite) TestStopErrorPath() { _ = ln.Close() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Port: port, Security: config.ServerSecurity{ SigningKey: "test-key", From e20ea2875a696a5f1b33734f72f9debb087ad65c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=A0=CF=85=CE=B1=CE=B7=20=D7=A0=CF=85=CE=B1=CE=B7=D1=95?= =?UTF-8?q?=CF=83=CE=B7?= Date: Thu, 19 Mar 2026 22:21:59 -0700 Subject: [PATCH 07/12] refactor: update integration test env vars for controller MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- test/integration/integration_test.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/integration/integration_test.go b/test/integration/integration_test.go index 833b1592..4c954978 100644 --- a/test/integration/integration_test.go +++ b/test/integration/integration_test.go @@ -155,17 +155,17 @@ func serverEnv() []string { return append(os.Environ(), fmt.Sprintf("OSAPI_NATS_SERVER_PORT=%d", natsPort), fmt.Sprintf("OSAPI_NATS_SERVER_STORE_DIR=%s", storeDir), - fmt.Sprintf("OSAPI_API_SERVER_PORT=%d", apiPort), - fmt.Sprintf("OSAPI_API_SERVER_NATS_PORT=%d", natsPort), + fmt.Sprintf("OSAPI_CONTROLLER_API_PORT=%d", apiPort), + fmt.Sprintf("OSAPI_CONTROLLER_NATS_PORT=%d", natsPort), fmt.Sprintf("OSAPI_AGENT_NATS_PORT=%d", natsPort), - fmt.Sprintf("OSAPI_API_CLIENT_SECURITY_BEARER_TOKEN=%s", token), + fmt.Sprintf("OSAPI_CONTROLLER_CLIENT_SECURITY_BEARER_TOKEN=%s", token), ) } func clientEnv() []string { return append(os.Environ(), - fmt.Sprintf("OSAPI_API_CLIENT_URL=http://127.0.0.1:%d", apiPort), - fmt.Sprintf("OSAPI_API_CLIENT_SECURITY_BEARER_TOKEN=%s", token), + fmt.Sprintf("OSAPI_CONTROLLER_CLIENT_URL=http://127.0.0.1:%d", apiPort), + fmt.Sprintf("OSAPI_CONTROLLER_CLIENT_SECURITY_BEARER_TOKEN=%s", token), ) } From 35ed9c03dc512169a145e0ff37bb05474cb1136b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=A0=CF=85=CE=B1=CE=B7=20=D7=A0=CF=85=CE=B1=CE=B7=D1=95?= =?UTF-8?q?=CF=83=CE=B7?= Date: Thu, 19 Mar 2026 22:25:28 -0700 Subject: [PATCH 08/12] docs: update all docs for controller rename MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update CLAUDE.md, configuration.md, architecture.md, system-architecture.md, development.md, health-checks.md, notifications.md, and intro.md. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- CLAUDE.md | 20 ++++---- .../docs/sidebar/architecture/architecture.md | 20 ++++---- .../architecture/system-architecture.md | 26 +++++----- docs/docs/sidebar/features/health-checks.md | 6 +-- docs/docs/sidebar/features/notifications.md | 6 +-- docs/docs/sidebar/intro.md | 2 +- docs/docs/sidebar/usage/configuration.md | 48 +++++++++---------- 7 files changed, 64 insertions(+), 64 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 6674f171..bb8a968a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -32,8 +32,8 @@ go test -run TestName -v ./internal/job/... # Run a single test ## Architecture (Quick Reference) -- **`cmd/`** - Cobra CLI commands (`client`, `node agent`, `api server`, `nats server`) -- **`internal/api/`** - Echo REST API by domain (`node/`, `job/`, `health/`, `audit/`, `common/`). Types are OpenAPI-generated (`*.gen.go`). Combined OpenAPI spec: `internal/api/gen/api.yaml` +- **`cmd/`** - Cobra CLI commands (`client`, `node agent`, `controller.api`, `nats server`) +- **`internal/controller/api/`** - Echo REST API by domain (`node/`, `job/`, `health/`, `audit/`, `common/`). Types are OpenAPI-generated (`*.gen.go`). Combined OpenAPI spec: `internal/controller/api/gen/api.yaml` - **`internal/job/`** - Job domain types, subject routing. `client/` for high-level ops - **`internal/agent/`** - Node agent: consumer/handler/processor pipeline for job execution - **`internal/provider/`** - Operation implementations: `node/{host,disk,mem,load}`, `network/{dns,ping}`, `process/` (process metrics) @@ -50,7 +50,7 @@ domain as a reference. Read the existing files before creating new ones. ### Step 1: OpenAPI Spec + Code Generation -Create `internal/api/{domain}/gen/` with three hand-written files: +Create `internal/controller/api/{domain}/gen/` with three hand-written files: - `api.yaml` — OpenAPI spec with paths, schemas, and `BearerAuth` security - `cfg.yaml` — oapi-codegen config (`strict-server: true`, import-mapping @@ -133,7 +133,7 @@ input must be validated, and the spec must declare how: ### Step 2: Handler Implementation -Create `internal/api/{domain}/`: +Create `internal/controller/api/{domain}/`: - `types.go` — domain struct, dependency interfaces (e.g., `Checker`) - `{domain}.go` — `New()` factory, compile-time interface check: @@ -150,10 +150,10 @@ Create `internal/api/{domain}/`: wrong permissions (403), valid token (200). Uses `api.New()` + `server.GetXxxHandler()` + `server.RegisterHandlers()` to wire through `scopeMiddleware`. - See existing examples in `internal/api/job/` and - `internal/api/audit/`. + See existing examples in `internal/controller/api/job/` and + `internal/controller/api/audit/`. -### Step 3: Server Wiring (4 files in `internal/api/`) +### Step 3: Server Wiring (4 files in `internal/controller/api/`) - `handler_{domain}.go` — `Get{Domain}Handler()` method that wraps the handler with `NewStrictHandler` + `scopeMiddleware`. Define @@ -167,21 +167,21 @@ Create `internal/api/{domain}/`: ### Step 4: Startup Wiring -- `cmd/api_server_start.go` — initialize the handler with real +- `cmd/controller_start.go` — initialize the handler with real dependencies and pass `api.With{Domain}Handler(h)` to `api.New()` ### Step 5: Update SDK The SDK client library lives in `pkg/sdk/client/`. Its generated HTTP client uses the same combined OpenAPI spec as the server -(`internal/api/gen/api.yaml`). Follow the rules in +(`internal/controller/api/gen/api.yaml`). Follow the rules in @docs/docs/sidebar/sdk/guidelines.md — especially: never expose `gen` types in public method signatures, add JSON tags to all result types, and wrap errors with context. **When modifying existing API specs:** -1. Make changes to `internal/api/{domain}/gen/api.yaml` in this repo +1. Make changes to `internal/controller/api/{domain}/gen/api.yaml` in this repo 2. Run `just generate` to regenerate server code (this also regenerates the combined spec via `redocly join`) 3. Run `go generate ./pkg/sdk/client/gen/...` to regenerate the SDK client diff --git a/docs/docs/sidebar/architecture/architecture.md b/docs/docs/sidebar/architecture/architecture.md index fdc55cfe..da732372 100644 --- a/docs/docs/sidebar/architecture/architecture.md +++ b/docs/docs/sidebar/architecture/architecture.md @@ -9,7 +9,7 @@ OSAPI turns Linux servers into managed appliances. You install a single binary, point it at a config file, and get a REST API and CLI for querying and changing system configuration — hostname, DNS, disk usage, memory, load averages, and more. State-changing operations run asynchronously through a job queue so the -API server itself never needs root privileges. +controller itself never needs root privileges. ## The Three Processes @@ -19,21 +19,21 @@ spread across many. ### NATS Server A lightweight message broker that stores job state and routes messages between -the API server and agents. OSAPI embeds a NATS server with JetStream enabled, so +the controller and agents. OSAPI embeds a NATS server with JetStream enabled, so you don't need to install anything extra — just run `osapi nats server start`. For production deployments with multiple hosts, you can point everything at an external NATS cluster instead of the embedded one. Just change the `nats.server` section in `osapi.yaml`. -### API Server +### Controller An HTTP server that exposes a REST API. It handles authentication (JWT), validates requests, and translates them into jobs that get published to NATS. -The API server never executes system commands directly — it creates a job and +The controller never executes system commands directly — it creates a job and returns a job ID. Clients poll for results. -Start it with `osapi api server start`. +Start it with `osapi controller start`. ### Agent @@ -54,7 +54,7 @@ The simplest setup. All three processes run on the same machine: graph TD subgraph host["Linux Host"] CLI["CLI"] - API["API Server"] + API["Controller"] Agent["Agent"] NATS["NATS (embedded)"] @@ -73,7 +73,7 @@ approach for single-host deployments: osapi start ``` -The CLI on the same host talks to the API server over localhost. This is useful +The CLI on the same host talks to the controller over localhost. This is useful for managing a single appliance or for development. ### Multi-Host @@ -85,7 +85,7 @@ the job routing system delivers work to the right place. ```mermaid graph TD CLI["CLI"] - API["API Server"] + API["Controller"] NATS["NATS (shared)"] W1["Agent (web-01)"] W2["Agent (web-02)"] @@ -113,7 +113,7 @@ When you run a command like `osapi client node hostname`: ```mermaid sequenceDiagram participant CLI - participant API as API Server + participant API as Controller participant NATS participant Agent @@ -128,7 +128,7 @@ sequenceDiagram API-->>CLI: 200 (result + job_id) ``` -The API server never touches the operating system directly. It's a thin +The controller never touches the operating system directly. It's a thin coordination layer between clients and agents. ## Further Reading diff --git a/docs/docs/sidebar/architecture/system-architecture.md b/docs/docs/sidebar/architecture/system-architecture.md index 17d98687..27d46c24 100644 --- a/docs/docs/sidebar/architecture/system-architecture.md +++ b/docs/docs/sidebar/architecture/system-architecture.md @@ -17,7 +17,7 @@ The system is organized into six layers, top to bottom: | -------------------------- | --------------------------------------- | ---------------------------------------------------------------------------------------- | | **CLI** | `cmd/` | Cobra command tree (thin wiring) | | **SDK Client** | `pkg/sdk/osapi` | OpenAPI-generated client used by CLI | -| **REST API** | `internal/api/` | Echo server with JWT middleware | +| **REST API** | `internal/controller/api/` | Echo server with JWT middleware | | **Job Client** | `internal/job/client/` | Business logic for job CRUD and status | | **NATS JetStream** | (external) | KV `job-queue`, Stream `JOBS`, KV `job-responses`, KV `agent-registry` | | **Agent / Provider Layer** | `internal/agent/`, `internal/provider/` | Consumes jobs, executes providers, evaluates conditions, drain lifecycle, heartbeat | @@ -26,7 +26,7 @@ The system is organized into six layers, top to bottom: ```mermaid graph TD CLI["CLI (cmd/)"] --> SDK["SDK Client (pkg/sdk/osapi)"] - SDK --> API["REST API (internal/api/)"] + SDK --> API["REST API (internal/controller/api/)"] API --> JobClient["Job Client (internal/job/client/)"] JobClient --> NATS["NATS JetStream"] NATS --> Agent["Agent (internal/agent/)"] @@ -42,7 +42,7 @@ execute the matching provider, and write results back to KV. The `osapi` binary exposes four top-level command groups: -- **`osapi api server start`** — starts the REST API server (Echo + JWT +- **`osapi controller start`** — starts the REST controller (Echo + JWT middleware) - **`osapi agent start`** — starts an agent that subscribes to NATS subjects and processes operations @@ -60,19 +60,19 @@ The CLI is a [Cobra][] command tree. Each file maps to a single command (e.g., wiring: it parses flags, reads config via Viper, and delegates to the appropriate internal package. -### REST API (`internal/api/`) +### REST API (`internal/controller/api/`) -The API server is built on [Echo][] with handlers generated from an OpenAPI spec +The controller is built on [Echo][] with handlers generated from an OpenAPI spec via [oapi-codegen][] (`*.gen.go` files). Domain handlers are organized into subpackages: | Package | Responsibility | | ---------------------- | ----------------------------------------------------------------------------------- | -| `internal/api/node/` | Node endpoints (hostname, status, disk, memory, load, network/dns, command/exec) | -| `internal/api/docker/` | Docker container endpoints (create, list, inspect, start, stop, remove, exec, pull) | -| `internal/api/job/` | Job queue endpoints (get, list, delete, retry, status) | -| `internal/api/health/` | Health check endpoints (liveness, readiness, status) | -| `internal/api/common/` | Shared middleware, error handling, collection responses | +| `internal/controller/api/node/` | Node endpoints (hostname, status, disk, memory, load, network/dns, command/exec) | +| `internal/controller/api/docker/` | Docker container endpoints (create, list, inspect, start, stop, remove, exec, pull) | +| `internal/controller/api/job/` | Job queue endpoints (get, list, delete, retry, status) | +| `internal/controller/api/health/` | Health check endpoints (liveness, readiness, status) | +| `internal/controller/api/common/` | Shared middleware, error handling, collection responses | | (metrics) | Prometheus endpoint (`/metrics`) via OpenTelemetry | All state-changing operations are dispatched as jobs through the job client @@ -119,7 +119,7 @@ provider interface and registering it in the agent's processor dispatch. ### Agent Lifecycle (`internal/agent/`) -All three runtime components — the API server, NATS server, and each agent — +All three runtime components — the controller, NATS server, and each agent — heartbeat into a shared registry KV bucket (`agent-registry`) at regular intervals. Each heartbeat record includes process metrics (CPU percent, RSS bytes, goroutine count) collected by `internal/provider/process`. This gives @@ -189,9 +189,9 @@ agent: group: 'web.dev' ``` -## Health Checks (`internal/api/health/`) +## Health Checks (`internal/controller/api/health/`) -The API server exposes three health check endpoints following the Kubernetes +The controller exposes three health check endpoints following the Kubernetes liveness/readiness probe pattern. These endpoints live outside the `/api/v1/` prefix at `/health` because they serve infrastructure concerns rather than business operations. diff --git a/docs/docs/sidebar/features/health-checks.md b/docs/docs/sidebar/features/health-checks.md index a0f9c37f..420ff0d1 100644 --- a/docs/docs/sidebar/features/health-checks.md +++ b/docs/docs/sidebar/features/health-checks.md @@ -5,9 +5,9 @@ sidebar_position: 5 # Health Checks OSAPI exposes health endpoints for load balancers, monitoring systems, and -operational tooling. These endpoints report whether the API server is alive, +operational tooling. These endpoints report whether the controller is alive, ready to serve traffic, and the status of its dependencies. All three runtime -components (API server, agent, NATS server) participate in a shared component +components (controller, agent, NATS server) participate in a shared component registry so operators can see the health of the entire deployment from a single endpoint. @@ -26,7 +26,7 @@ orchestrators (e.g., Kubernetes liveness probes) to detect hung processes. ### Readiness (`/health/ready`) -Checks connectivity to NATS and KV stores. Returns `200 OK` when the API server +Checks connectivity to NATS and KV stores. Returns `200 OK` when the controller can process requests, or `503 Service Unavailable` when dependencies are down. Use this for load balancer health checks to avoid routing traffic to an unready instance. diff --git a/docs/docs/sidebar/features/notifications.md b/docs/docs/sidebar/features/notifications.md index 0e333c28..8b723851 100644 --- a/docs/docs/sidebar/features/notifications.md +++ b/docs/docs/sidebar/features/notifications.md @@ -6,8 +6,8 @@ condition transitions and dispatches events through a pluggable backend. ## How It Works -Every component (agent, API server, NATS server) evaluates conditions on each -heartbeat and writes them to the registry KV bucket. A watcher on the API server +Every component (agent, controller, NATS server) evaluates conditions on each +heartbeat and writes them to the registry KV bucket. A watcher on the controller detects transitions: - **Fired**: a condition becomes active (e.g., `DiskPressure` crosses threshold) @@ -91,7 +91,7 @@ See [Configuration](../usage/configuration.md) for the full reference. ## Architecture -The watcher runs as a background goroutine in the API server. It monitors the +The watcher runs as a background goroutine in the controller. It monitors the registry KV bucket using NATS KV Watch. On each update it compares the previous condition set to the current one and emits `ConditionEvent`s for transitions. diff --git a/docs/docs/sidebar/intro.md b/docs/docs/sidebar/intro.md index ea7cfd23..5ba66759 100644 --- a/docs/docs/sidebar/intro.md +++ b/docs/docs/sidebar/intro.md @@ -63,7 +63,7 @@ Or start each component separately: ```bash osapi nats server start & -osapi api server start & +osapi controller start & osapi agent start & ``` diff --git a/docs/docs/sidebar/usage/configuration.md b/docs/docs/sidebar/usage/configuration.md index be150ca5..3d270c97 100644 --- a/docs/docs/sidebar/usage/configuration.md +++ b/docs/docs/sidebar/usage/configuration.md @@ -26,14 +26,14 @@ uppercased: | Config Key | Environment Variable | | ------------------------------------------------ | ------------------------------------------------------ | | `debug` | `OSAPI_DEBUG` | -| `api.server.port` | `OSAPI_API_SERVER_PORT` | -| `api.server.nats.host` | `OSAPI_API_SERVER_NATS_HOST` | -| `api.server.nats.port` | `OSAPI_API_SERVER_NATS_PORT` | -| `api.server.nats.client_name` | `OSAPI_API_SERVER_NATS_CLIENT_NAME` | -| `api.server.nats.namespace` | `OSAPI_API_SERVER_NATS_NAMESPACE` | -| `api.server.nats.auth.type` | `OSAPI_API_SERVER_NATS_AUTH_TYPE` | -| `api.server.security.signing_key` | `OSAPI_API_SERVER_SECURITY_SIGNING_KEY` | -| `api.client.security.bearer_token` | `OSAPI_API_CLIENT_SECURITY_BEARER_TOKEN` | +| `controller.api.port` | `OSAPI_CONTROLLER_API_PORT` | +| `controller.api.nats.host` | `OSAPI_CONTROLLER_API_NATS_HOST` | +| `controller.api.nats.port` | `OSAPI_CONTROLLER_API_NATS_PORT` | +| `controller.api.nats.client_name` | `OSAPI_CONTROLLER_API_NATS_CLIENT_NAME` | +| `controller.api.nats.namespace` | `OSAPI_CONTROLLER_API_NATS_NAMESPACE` | +| `controller.api.nats.auth.type` | `OSAPI_CONTROLLER_API_NATS_AUTH_TYPE` | +| `controller.api.security.signing_key` | `OSAPI_CONTROLLER_API_SECURITY_SIGNING_KEY` | +| `controller.client.security.bearer_token` | `OSAPI_CONTROLLER_CLIENT_SECURITY_BEARER_TOKEN` | | `nats.server.host` | `OSAPI_NATS_SERVER_HOST` | | `nats.server.port` | `OSAPI_NATS_SERVER_PORT` | | `nats.server.namespace` | `OSAPI_NATS_SERVER_NAMESPACE` | @@ -93,8 +93,8 @@ or client will start: | Key | Purpose | | ---------------------------------- | ----------------------------- | -| `api.server.security.signing_key` | HS256 key for signing JWTs | -| `api.client.security.bearer_token` | JWT sent with client requests | +| `controller.api.security.signing_key` | HS256 key for signing JWTs | +| `controller.client.security.bearer_token` | JWT sent with client requests | Generate a signing key with `openssl rand -hex 32`. Generate a bearer token with `osapi token generate`. @@ -102,7 +102,7 @@ Generate a signing key with `openssl rand -hex 32`. Generate a bearer token with ## Authentication Each NATS connection supports pluggable authentication. Set the `auth.type` -field in the relevant section (`nats.server`, `api.server.nats`, or +field in the relevant section (`nats.server`, `controller.api.nats`, or `agent.nats`): | Type | Description | Extra Fields | @@ -117,7 +117,7 @@ The embedded NATS server (`nats.server.auth`) accepts a list of users or nkeys: ```yaml nats: - server: + api: auth: type: user_pass users: @@ -127,12 +127,12 @@ nats: ### Client-Side Auth -API server and agent connections (`api.server.nats.auth`, `agent.nats.auth`) +API server and agent connections (`controller.api.nats.auth`, `agent.nats.auth`) authenticate as a single identity: ```yaml -api: - server: +controller: + api: nats: auth: type: user_pass @@ -154,13 +154,13 @@ of permissions: ### Custom Roles -You can define custom roles in the `api.server.security.roles` section. Custom +You can define custom roles in the `controller.api.security.roles` section. Custom roles override the default permission mapping for the same name, or define entirely new role names: ```yaml -api: - server: +controller: + api: security: roles: ops: @@ -198,7 +198,7 @@ NATS cluster without collisions. | `job-queue` (KV bucket) | `osapi-job-queue` | Set the same namespace value in `nats.server.namespace`, -`api.server.nats.namespace`, and `agent.nats.namespace` so all components agree +`controller.api.nats.namespace`, and `agent.nats.namespace` so all components agree on naming. An empty string disables prefixing. ## Full Reference @@ -210,7 +210,7 @@ Values shown are representative defaults from the repository's config file. # Enable verbose logging. debug: true -api: +controller: client: # Base URL the CLI client connects to. url: 'http://0.0.0.0:8080' @@ -219,7 +219,7 @@ api: # Generate with: osapi token generate bearer_token: '' - server: + api: # Port the REST API server listens on. port: 8080 nats: @@ -256,7 +256,7 @@ api: # - health:read nats: - server: + api: # Hostname the embedded NATS server binds to. host: 'localhost' # Port the embedded NATS server binds to. @@ -471,14 +471,14 @@ agent: ## Section Reference -### `api.client` +### `controller.client` | Key | Type | Description | | ----------------------- | ------ | ---------------------------------- | | `url` | string | Base URL the CLI client targets | | `security.bearer_token` | string | JWT for client auth (**required**) | -### `api.server` +### `controller.api` | Key | Type | Description | | ----------------------------- | -------- | ------------------------------------ | From 30ac979488efc3383beea82be209651f02bca721 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=A0=CF=85=CE=B1=CE=B7=20=D7=A0=CF=85=CE=B1=CE=B7=D1=95?= =?UTF-8?q?=CF=83=CE=B7?= Date: Thu, 19 Mar 2026 22:32:30 -0700 Subject: [PATCH 09/12] fix: update generated files, component type, and docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix import paths in *.gen.go and cfg.yaml files - Fix SDK client gen/generate.go path - Fix justfile redocly join path - Change heartbeat component type from "api" to "controller" - Update client controller status filter - Update architecture docs to describe controller sub-components - Fix health status handler to recognize "controller" type 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- cmd/client_controller_status.go | 2 +- cmd/controller_setup.go | 4 +- .../docs/sidebar/architecture/architecture.md | 14 ++-- .../mocks/gomock_reflect_3775270018/prog.go | 66 +++++++++++++++++++ internal/controller/api/agent/gen/cfg.yaml | 2 +- internal/controller/api/audit/gen/cfg.yaml | 2 +- internal/controller/api/docker/gen/cfg.yaml | 2 +- internal/controller/api/file/gen/cfg.yaml | 2 +- internal/controller/api/health/gen/cfg.yaml | 2 +- internal/controller/api/job/gen/cfg.yaml | 2 +- internal/controller/api/node/gen/cfg.yaml | 2 +- justfile | 2 +- pkg/sdk/client/gen/generate.go | 2 +- 13 files changed, 88 insertions(+), 16 deletions(-) create mode 100644 internal/agent/mocks/gomock_reflect_3775270018/prog.go diff --git a/cmd/client_controller_status.go b/cmd/client_controller_status.go index eb5118e7..026445fd 100644 --- a/cmd/client_controller_status.go +++ b/cmd/client_controller_status.go @@ -48,7 +48,7 @@ var clientControllerStatusCmd = &cobra.Command{ } fmt.Println() - displayComponentTable(resp.Data.Registry, "api") + displayComponentTable(resp.Data.Registry, "controller") }, } diff --git a/cmd/controller_setup.go b/cmd/controller_setup.go index 75ee9128..2bb32e86 100644 --- a/cmd/controller_setup.go +++ b/cmd/controller_setup.go @@ -506,7 +506,7 @@ func newMetricsProvider( entry.CPUPercent = reg.Process.CPUPercent entry.MemBytes = reg.Process.RSSBytes } - case "api", "nats": + case "controller", "nats": var reg job.ComponentRegistration if err := json.Unmarshal(kvEntry.Value(), ®); err != nil { continue @@ -662,7 +662,7 @@ func startControllerHeartbeat( registryKV, hostname, "0.1.0", - "api", + "controller", process.New(), 10*time.Second, process.ConditionThresholds{ diff --git a/docs/docs/sidebar/architecture/architecture.md b/docs/docs/sidebar/architecture/architecture.md index da732372..e90517dc 100644 --- a/docs/docs/sidebar/architecture/architecture.md +++ b/docs/docs/sidebar/architecture/architecture.md @@ -28,10 +28,16 @@ section in `osapi.yaml`. ### Controller -An HTTP server that exposes a REST API. It handles authentication (JWT), -validates requests, and translates them into jobs that get published to NATS. -The controller never executes system commands directly — it creates a job and -returns a job ID. Clients poll for results. +The control plane process. It runs several sub-components: + +- **REST API** — an HTTP server that handles authentication (JWT), validates + requests, and translates them into jobs published to NATS. The controller + never executes system commands directly — it creates a job and returns a + job ID. Clients poll for results. +- **Component heartbeat** — registers the controller in the agent registry so + `health status` can report its state. +- **Condition watcher** — monitors the registry KV for condition transitions + and dispatches notifications. Start it with `osapi controller start`. diff --git a/internal/agent/mocks/gomock_reflect_3775270018/prog.go b/internal/agent/mocks/gomock_reflect_3775270018/prog.go new file mode 100644 index 00000000..a7f5dad6 --- /dev/null +++ b/internal/agent/mocks/gomock_reflect_3775270018/prog.go @@ -0,0 +1,66 @@ + +package main + +import ( + "encoding/gob" + "flag" + "fmt" + "os" + "path" + "reflect" + + "github.com/golang/mock/mockgen/model" + + pkg_ "github.com/nats-io/nats.go/jetstream" +) + +var output = flag.String("output", "", "The output file name, or empty to use stdout.") + +func main() { + flag.Parse() + + its := []struct{ + sym string + typ reflect.Type + }{ + + { "Msg", reflect.TypeOf((*pkg_.Msg)(nil)).Elem()}, + + } + pkg := &model.Package{ + // NOTE: This behaves contrary to documented behaviour if the + // package name is not the final component of the import path. + // The reflect package doesn't expose the package name, though. + Name: path.Base("github.com/nats-io/nats.go/jetstream"), + } + + for _, it := range its { + intf, err := model.InterfaceFromInterfaceType(it.typ) + if err != nil { + fmt.Fprintf(os.Stderr, "Reflection: %v\n", err) + os.Exit(1) + } + intf.Name = it.sym + pkg.Interfaces = append(pkg.Interfaces, intf) + } + + outfile := os.Stdout + if len(*output) != 0 { + var err error + outfile, err = os.Create(*output) + if err != nil { + fmt.Fprintf(os.Stderr, "failed to open output file %q", *output) + } + defer func() { + if err := outfile.Close(); err != nil { + fmt.Fprintf(os.Stderr, "failed to close output file %q", *output) + os.Exit(1) + } + }() + } + + if err := gob.NewEncoder(outfile).Encode(pkg); err != nil { + fmt.Fprintf(os.Stderr, "gob encode: %v\n", err) + os.Exit(1) + } +} diff --git a/internal/controller/api/agent/gen/cfg.yaml b/internal/controller/api/agent/gen/cfg.yaml index 7a7b0cc3..0e070653 100644 --- a/internal/controller/api/agent/gen/cfg.yaml +++ b/internal/controller/api/agent/gen/cfg.yaml @@ -26,7 +26,7 @@ generate: echo-server: true strict-server: true import-mapping: - ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/api/common/gen + ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/controller/api/common/gen output-options: # to make sure that all types are generated skip-prune: true diff --git a/internal/controller/api/audit/gen/cfg.yaml b/internal/controller/api/audit/gen/cfg.yaml index d1720d59..081db3a2 100644 --- a/internal/controller/api/audit/gen/cfg.yaml +++ b/internal/controller/api/audit/gen/cfg.yaml @@ -26,7 +26,7 @@ generate: echo-server: true strict-server: true import-mapping: - ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/api/common/gen + ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/controller/api/common/gen output-options: # to make sure that all types are generated skip-prune: true diff --git a/internal/controller/api/docker/gen/cfg.yaml b/internal/controller/api/docker/gen/cfg.yaml index 042895cb..35725ecf 100644 --- a/internal/controller/api/docker/gen/cfg.yaml +++ b/internal/controller/api/docker/gen/cfg.yaml @@ -26,7 +26,7 @@ generate: echo-server: true strict-server: true import-mapping: - ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/api/common/gen + ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/controller/api/common/gen output-options: # to make sure that all types are generated skip-prune: true diff --git a/internal/controller/api/file/gen/cfg.yaml b/internal/controller/api/file/gen/cfg.yaml index 31b924dd..c0f2fdae 100644 --- a/internal/controller/api/file/gen/cfg.yaml +++ b/internal/controller/api/file/gen/cfg.yaml @@ -26,7 +26,7 @@ generate: echo-server: true strict-server: true import-mapping: - ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/api/common/gen + ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/controller/api/common/gen output-options: # to make sure that all types are generated skip-prune: true diff --git a/internal/controller/api/health/gen/cfg.yaml b/internal/controller/api/health/gen/cfg.yaml index 8c4514fb..778549d8 100644 --- a/internal/controller/api/health/gen/cfg.yaml +++ b/internal/controller/api/health/gen/cfg.yaml @@ -26,7 +26,7 @@ generate: echo-server: true strict-server: true import-mapping: - ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/api/common/gen + ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/controller/api/common/gen output-options: # to make sure that all types are generated skip-prune: true diff --git a/internal/controller/api/job/gen/cfg.yaml b/internal/controller/api/job/gen/cfg.yaml index a875ba7a..b65457ef 100644 --- a/internal/controller/api/job/gen/cfg.yaml +++ b/internal/controller/api/job/gen/cfg.yaml @@ -26,6 +26,6 @@ generate: echo-server: true strict-server: true import-mapping: - ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/api/common/gen + ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/controller/api/common/gen output-options: skip-prune: true diff --git a/internal/controller/api/node/gen/cfg.yaml b/internal/controller/api/node/gen/cfg.yaml index 62bf4119..dd2c0754 100644 --- a/internal/controller/api/node/gen/cfg.yaml +++ b/internal/controller/api/node/gen/cfg.yaml @@ -26,7 +26,7 @@ generate: echo-server: true strict-server: true import-mapping: - ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/api/common/gen + ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/controller/api/common/gen output-options: # to make sure that all types are generated skip-prune: true diff --git a/justfile b/justfile index 213885a9..edae3c2d 100644 --- a/justfile +++ b/justfile @@ -35,7 +35,7 @@ test: linux-tune # Generate code generate: - redocly join --prefix-tags-with-info-prop title -o internal/api/gen/api.yaml internal/api/*/gen/api.yaml + redocly join --prefix-tags-with-info-prop title -o internal/controller/api/gen/api.yaml internal/controller/api/*/gen/api.yaml just go::generate just docs::generate diff --git a/pkg/sdk/client/gen/generate.go b/pkg/sdk/client/gen/generate.go index 50ce9d2c..5dd41716 100644 --- a/pkg/sdk/client/gen/generate.go +++ b/pkg/sdk/client/gen/generate.go @@ -21,4 +21,4 @@ // Package gen contains generated code for the OSAPI REST API client. package gen -//go:generate go tool github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen -config cfg.yaml ../../../../internal/api/gen/api.yaml +//go:generate go tool github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen -config cfg.yaml ../../../../internal/controller/api/gen/api.yaml From d59417e0029761b7749437b338001db3f0d74047 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=A0=CF=85=CE=B1=CE=B7=20=D7=A0=CF=85=CE=B1=CE=B7=D1=95?= =?UTF-8?q?=CF=83=CE=B7?= Date: Thu, 19 Mar 2026 22:34:28 -0700 Subject: [PATCH 10/12] fix: update docusaurus and SDK gen paths for controller MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- docs/docusaurus.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docusaurus.config.ts b/docs/docusaurus.config.ts index 0d192152..80fb3aad 100644 --- a/docs/docusaurus.config.ts +++ b/docs/docusaurus.config.ts @@ -401,7 +401,7 @@ const config: Config = { docsPluginId: 'classic', config: { osapi: { - specPath: '../internal/api/gen/api.yaml', + specPath: '../internal/controller/api/gen/api.yaml', outputDir: 'docs/gen/api', sidebarOptions: { groupPathsBy: 'tag', From 0e8a1b49122c8c789120429f995992ff493a9339 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=A0=CF=85=CE=B1=CE=B7=20=D7=A0=CF=85=CE=B1=CE=B7=D1=95?= =?UTF-8?q?=CF=83=CE=B7?= Date: Thu, 19 Mar 2026 22:35:56 -0700 Subject: [PATCH 11/12] style: fix formatting from linter and complete renames MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix import ordering, indentation, and line wrapping applied by linter. Complete remaining API → Controller renames in docs and config types. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- cmd/controller_setup.go | 10 +- cmd/controller_start.go | 6 +- cmd/nats_heartbeat.go | 2 +- .../docs/sidebar/architecture/architecture.md | 8 +- .../architecture/system-architecture.md | 8 +- docs/docs/sidebar/usage/configuration.md | 32 +++--- ...6-03-19-rename-api-to-controller-design.md | 102 +++++++++-------- .../2026-03-19-rename-api-to-controller.md | 105 +++++++++++------- .../mocks/gomock_reflect_3775270018/prog.go | 7 +- internal/config/types.go | 2 +- .../api/agent/agent_drain_public_test.go | 4 +- .../api/agent/agent_get_public_test.go | 4 +- .../api/agent/agent_list_public_test.go | 4 +- .../api/agent/agent_undrain_public_test.go | 4 +- internal/controller/api/audit/audit.go | 2 +- .../api/audit/audit_export_public_test.go | 6 +- .../api/audit/audit_get_public_test.go | 6 +- internal/controller/api/audit/audit_list.go | 2 +- .../api/audit/audit_list_public_test.go | 6 +- .../controller/api/audit/fakes_public_test.go | 2 +- .../docker/container_create_public_test.go | 4 +- .../api/docker/container_exec_public_test.go | 4 +- .../container_image_remove_public_test.go | 4 +- .../docker/container_inspect_public_test.go | 4 +- .../api/docker/container_list_public_test.go | 4 +- .../api/docker/container_pull_public_test.go | 4 +- .../docker/container_remove_public_test.go | 4 +- .../api/docker/container_start_public_test.go | 4 +- .../api/docker/container_stop_public_test.go | 4 +- .../api/file/file_delete_public_test.go | 4 +- .../api/file/file_get_public_test.go | 4 +- .../api/file/file_list_public_test.go | 4 +- .../api/file/file_upload_public_test.go | 4 +- internal/controller/api/handler_agent.go | 2 +- internal/controller/api/handler_audit.go | 4 +- internal/controller/api/handler_docker.go | 2 +- internal/controller/api/handler_file.go | 2 +- internal/controller/api/handler_health.go | 2 +- internal/controller/api/handler_job.go | 2 +- internal/controller/api/handler_node.go | 2 +- .../controller/api/handler_public_test.go | 4 +- .../api/health/health_get_public_test.go | 2 +- .../health/health_ready_get_public_test.go | 2 +- .../health/health_status_get_public_test.go | 4 +- .../api/job/job_delete_public_test.go | 4 +- .../controller/api/job/job_get_public_test.go | 4 +- .../api/job/job_list_public_test.go | 4 +- .../api/job/job_retry_public_test.go | 4 +- .../api/metrics/metrics_get_public_test.go | 2 +- internal/controller/api/middleware.go | 2 +- .../api/node/command_exec_post_public_test.go | 4 +- .../node/command_shell_post_public_test.go | 4 +- .../api/node/file_deploy_post_public_test.go | 4 +- .../api/node/file_status_post_public_test.go | 4 +- ...etwork_dns_get_by_interface_public_test.go | 4 +- ...etwork_dns_put_by_interface_public_test.go | 4 +- .../api/node/network_ping_post_public_test.go | 4 +- .../api/node/node_disk_get_public_test.go | 4 +- .../api/node/node_hostname_get_public_test.go | 4 +- .../api/node/node_load_get_public_test.go | 4 +- .../api/node/node_memory_get_public_test.go | 4 +- .../api/node/node_os_get_public_test.go | 4 +- .../api/node/node_status_get_public_test.go | 4 +- .../api/node/node_uptime_get_public_test.go | 4 +- internal/controller/api/server_public_test.go | 2 +- 65 files changed, 251 insertions(+), 229 deletions(-) diff --git a/cmd/controller_setup.go b/cmd/controller_setup.go index 2bb32e86..f2010dc5 100644 --- a/cmd/controller_setup.go +++ b/cmd/controller_setup.go @@ -35,17 +35,17 @@ import ( "github.com/nats-io/nats.go/jetstream" natsclient "github.com/osapi-io/nats-client/pkg/client" + "github.com/retr0h/osapi/internal/audit" + "github.com/retr0h/osapi/internal/cli" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller" "github.com/retr0h/osapi/internal/controller/api" "github.com/retr0h/osapi/internal/controller/api/file" "github.com/retr0h/osapi/internal/controller/api/health" - "github.com/retr0h/osapi/internal/audit" - "github.com/retr0h/osapi/internal/cli" - "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/notify" "github.com/retr0h/osapi/internal/job" jobclient "github.com/retr0h/osapi/internal/job/client" "github.com/retr0h/osapi/internal/messaging" - "github.com/retr0h/osapi/internal/controller/notify" "github.com/retr0h/osapi/internal/provider/process" "github.com/retr0h/osapi/internal/validation" ) @@ -662,7 +662,7 @@ func startControllerHeartbeat( registryKV, hostname, "0.1.0", - "controller", + "controller", process.New(), 10*time.Second, process.ConditionThresholds{ diff --git a/cmd/controller_start.go b/cmd/controller_start.go index 20748da8..01bfc78d 100644 --- a/cmd/controller_start.go +++ b/cmd/controller_start.go @@ -38,7 +38,11 @@ var controllerStartCmd = &cobra.Command{ Run: func(cmd *cobra.Command, _ []string) { ctx := cmd.Context() - shutdownTracer, err := telemetry.InitTracer(ctx, "osapi-controller", appConfig.Telemetry.Tracing) + shutdownTracer, err := telemetry.InitTracer( + ctx, + "osapi-controller", + appConfig.Telemetry.Tracing, + ) if err != nil { cli.LogFatal(logger, "failed to initialize tracer", err) } diff --git a/cmd/nats_heartbeat.go b/cmd/nats_heartbeat.go index 360a80f0..72475199 100644 --- a/cmd/nats_heartbeat.go +++ b/cmd/nats_heartbeat.go @@ -29,9 +29,9 @@ import ( "github.com/nats-io/nats.go/jetstream" natsclient "github.com/osapi-io/nats-client/pkg/client" - "github.com/retr0h/osapi/internal/controller" "github.com/retr0h/osapi/internal/cli" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller" "github.com/retr0h/osapi/internal/messaging" "github.com/retr0h/osapi/internal/provider/process" ) diff --git a/docs/docs/sidebar/architecture/architecture.md b/docs/docs/sidebar/architecture/architecture.md index e90517dc..82f6528e 100644 --- a/docs/docs/sidebar/architecture/architecture.md +++ b/docs/docs/sidebar/architecture/architecture.md @@ -32,12 +32,12 @@ The control plane process. It runs several sub-components: - **REST API** — an HTTP server that handles authentication (JWT), validates requests, and translates them into jobs published to NATS. The controller - never executes system commands directly — it creates a job and returns a - job ID. Clients poll for results. + never executes system commands directly — it creates a job and returns a job + ID. Clients poll for results. - **Component heartbeat** — registers the controller in the agent registry so `health status` can report its state. -- **Condition watcher** — monitors the registry KV for condition transitions - and dispatches notifications. +- **Condition watcher** — monitors the registry KV for condition transitions and + dispatches notifications. Start it with `osapi controller start`. diff --git a/docs/docs/sidebar/architecture/system-architecture.md b/docs/docs/sidebar/architecture/system-architecture.md index 27d46c24..b066b7fc 100644 --- a/docs/docs/sidebar/architecture/system-architecture.md +++ b/docs/docs/sidebar/architecture/system-architecture.md @@ -17,7 +17,7 @@ The system is organized into six layers, top to bottom: | -------------------------- | --------------------------------------- | ---------------------------------------------------------------------------------------- | | **CLI** | `cmd/` | Cobra command tree (thin wiring) | | **SDK Client** | `pkg/sdk/osapi` | OpenAPI-generated client used by CLI | -| **REST API** | `internal/controller/api/` | Echo server with JWT middleware | +| **REST API** | `internal/controller/api/` | Echo server with JWT middleware | | **Job Client** | `internal/job/client/` | Business logic for job CRUD and status | | **NATS JetStream** | (external) | KV `job-queue`, Stream `JOBS`, KV `job-responses`, KV `agent-registry` | | **Agent / Provider Layer** | `internal/agent/`, `internal/provider/` | Consumes jobs, executes providers, evaluates conditions, drain lifecycle, heartbeat | @@ -66,14 +66,14 @@ The controller is built on [Echo][] with handlers generated from an OpenAPI spec via [oapi-codegen][] (`*.gen.go` files). Domain handlers are organized into subpackages: -| Package | Responsibility | -| ---------------------- | ----------------------------------------------------------------------------------- | +| Package | Responsibility | +| --------------------------------- | ----------------------------------------------------------------------------------- | | `internal/controller/api/node/` | Node endpoints (hostname, status, disk, memory, load, network/dns, command/exec) | | `internal/controller/api/docker/` | Docker container endpoints (create, list, inspect, start, stop, remove, exec, pull) | | `internal/controller/api/job/` | Job queue endpoints (get, list, delete, retry, status) | | `internal/controller/api/health/` | Health check endpoints (liveness, readiness, status) | | `internal/controller/api/common/` | Shared middleware, error handling, collection responses | -| (metrics) | Prometheus endpoint (`/metrics`) via OpenTelemetry | +| (metrics) | Prometheus endpoint (`/metrics`) via OpenTelemetry | All state-changing operations are dispatched as jobs through the job client layer rather than executed inline. Responses follow a uniform collection diff --git a/docs/docs/sidebar/usage/configuration.md b/docs/docs/sidebar/usage/configuration.md index 3d270c97..f36f133e 100644 --- a/docs/docs/sidebar/usage/configuration.md +++ b/docs/docs/sidebar/usage/configuration.md @@ -26,14 +26,14 @@ uppercased: | Config Key | Environment Variable | | ------------------------------------------------ | ------------------------------------------------------ | | `debug` | `OSAPI_DEBUG` | -| `controller.api.port` | `OSAPI_CONTROLLER_API_PORT` | -| `controller.api.nats.host` | `OSAPI_CONTROLLER_API_NATS_HOST` | -| `controller.api.nats.port` | `OSAPI_CONTROLLER_API_NATS_PORT` | -| `controller.api.nats.client_name` | `OSAPI_CONTROLLER_API_NATS_CLIENT_NAME` | -| `controller.api.nats.namespace` | `OSAPI_CONTROLLER_API_NATS_NAMESPACE` | -| `controller.api.nats.auth.type` | `OSAPI_CONTROLLER_API_NATS_AUTH_TYPE` | -| `controller.api.security.signing_key` | `OSAPI_CONTROLLER_API_SECURITY_SIGNING_KEY` | -| `controller.client.security.bearer_token` | `OSAPI_CONTROLLER_CLIENT_SECURITY_BEARER_TOKEN` | +| `controller.api.port` | `OSAPI_CONTROLLER_API_PORT` | +| `controller.api.nats.host` | `OSAPI_CONTROLLER_API_NATS_HOST` | +| `controller.api.nats.port` | `OSAPI_CONTROLLER_API_NATS_PORT` | +| `controller.api.nats.client_name` | `OSAPI_CONTROLLER_API_NATS_CLIENT_NAME` | +| `controller.api.nats.namespace` | `OSAPI_CONTROLLER_API_NATS_NAMESPACE` | +| `controller.api.nats.auth.type` | `OSAPI_CONTROLLER_API_NATS_AUTH_TYPE` | +| `controller.api.security.signing_key` | `OSAPI_CONTROLLER_API_SECURITY_SIGNING_KEY` | +| `controller.client.security.bearer_token` | `OSAPI_CONTROLLER_CLIENT_SECURITY_BEARER_TOKEN` | | `nats.server.host` | `OSAPI_NATS_SERVER_HOST` | | `nats.server.port` | `OSAPI_NATS_SERVER_PORT` | | `nats.server.namespace` | `OSAPI_NATS_SERVER_NAMESPACE` | @@ -91,9 +91,9 @@ Environment variables take precedence over file values. Two fields carry a `required` validation tag and must be set before the server or client will start: -| Key | Purpose | -| ---------------------------------- | ----------------------------- | -| `controller.api.security.signing_key` | HS256 key for signing JWTs | +| Key | Purpose | +| ----------------------------------------- | ----------------------------- | +| `controller.api.security.signing_key` | HS256 key for signing JWTs | | `controller.client.security.bearer_token` | JWT sent with client requests | Generate a signing key with `openssl rand -hex 32`. Generate a bearer token with @@ -154,9 +154,9 @@ of permissions: ### Custom Roles -You can define custom roles in the `controller.api.security.roles` section. Custom -roles override the default permission mapping for the same name, or define -entirely new role names: +You can define custom roles in the `controller.api.security.roles` section. +Custom roles override the default permission mapping for the same name, or +define entirely new role names: ```yaml controller: @@ -198,8 +198,8 @@ NATS cluster without collisions. | `job-queue` (KV bucket) | `osapi-job-queue` | Set the same namespace value in `nats.server.namespace`, -`controller.api.nats.namespace`, and `agent.nats.namespace` so all components agree -on naming. An empty string disables prefixing. +`controller.api.nats.namespace`, and `agent.nats.namespace` so all components +agree on naming. An empty string disables prefixing. ## Full Reference diff --git a/docs/plans/2026-03-19-rename-api-to-controller-design.md b/docs/plans/2026-03-19-rename-api-to-controller-design.md index 70fe9887..920374c9 100644 --- a/docs/plans/2026-03-19-rename-api-to-controller-design.md +++ b/docs/plans/2026-03-19-rename-api-to-controller-design.md @@ -2,8 +2,8 @@ ## Goal -Rename the "API server" to "controller" to reflect its role as the control -plane process that owns multiple sub-components (REST API, notification watcher, +Rename the "API server" to "controller" to reflect its role as the control plane +process that owns multiple sub-components (REST API, notification watcher, heartbeat, and future metrics server). ## Motivation @@ -94,30 +94,30 @@ type APIServer struct { } ``` -The `validate:"required"` tags on `signing_key` and `bearer_token` remain -on their existing structs (`ServerSecurity`, `ClientSecurity`). Validation -works the same way — Viper unmarshals into the new structure and the -validator walks the nested structs. +The `validate:"required"` tags on `signing_key` and `bearer_token` remain on +their existing structs (`ServerSecurity`, `ClientSecurity`). Validation works +the same way — Viper unmarshals into the new structure and the validator walks +the nested structs. ### Environment variable mapping -| Config Key | Environment Variable | -|---|---| -| `controller.client.url` | `OSAPI_CONTROLLER_CLIENT_URL` | -| `controller.client.security.bearer_token` | `OSAPI_CONTROLLER_CLIENT_SECURITY_BEARER_TOKEN` | -| `controller.api.port` | `OSAPI_CONTROLLER_API_PORT` | -| `controller.api.security.signing_key` | `OSAPI_CONTROLLER_API_SECURITY_SIGNING_KEY` | +| Config Key | Environment Variable | +| -------------------------------------------- | -------------------------------------------------- | +| `controller.client.url` | `OSAPI_CONTROLLER_CLIENT_URL` | +| `controller.client.security.bearer_token` | `OSAPI_CONTROLLER_CLIENT_SECURITY_BEARER_TOKEN` | +| `controller.api.port` | `OSAPI_CONTROLLER_API_PORT` | +| `controller.api.security.signing_key` | `OSAPI_CONTROLLER_API_SECURITY_SIGNING_KEY` | | `controller.api.security.cors.allow_origins` | `OSAPI_CONTROLLER_API_SECURITY_CORS_ALLOW_ORIGINS` | -| `controller.nats.host` | `OSAPI_CONTROLLER_NATS_HOST` | -| `controller.nats.port` | `OSAPI_CONTROLLER_NATS_PORT` | -| `controller.nats.client_name` | `OSAPI_CONTROLLER_NATS_CLIENT_NAME` | -| `controller.nats.namespace` | `OSAPI_CONTROLLER_NATS_NAMESPACE` | -| `controller.nats.auth.type` | `OSAPI_CONTROLLER_NATS_AUTH_TYPE` | +| `controller.nats.host` | `OSAPI_CONTROLLER_NATS_HOST` | +| `controller.nats.port` | `OSAPI_CONTROLLER_NATS_PORT` | +| `controller.nats.client_name` | `OSAPI_CONTROLLER_NATS_CLIENT_NAME` | +| `controller.nats.namespace` | `OSAPI_CONTROLLER_NATS_NAMESPACE` | +| `controller.nats.auth.type` | `OSAPI_CONTROLLER_NATS_AUTH_TYPE` | ## CLI Changes -| Before | After | -|---|---| +| Before | After | +| ------------------------ | ------------------------ | | `osapi api server start` | `osapi controller start` | Unchanged: @@ -131,52 +131,51 @@ Unchanged: ### Directory moves -| From | To | -|---|---| -| `internal/api/` | `internal/controller/api/` | +| From | To | +| ------------------ | ----------------------------- | +| `internal/api/` | `internal/controller/api/` | | `internal/notify/` | `internal/controller/notify/` | ### New files -| File | Purpose | -|---|---| +| File | Purpose | +| ----------------------------------- | --------------------------------------------------------------------------------------------------------------------- | | `internal/controller/controller.go` | Controller struct with Start/Stop. Owns the API server, heartbeat, and condition watcher. Implements `cli.Lifecycle`. | -| `cmd/controller.go` | `controllerCmd` parent command | -| `cmd/controller_start.go` | `controller start` subcommand | -| `cmd/controller_setup.go` | Setup logic (moved from `api_server_setup.go`), config paths updated | +| `cmd/controller.go` | `controllerCmd` parent command | +| `cmd/controller_start.go` | `controller start` subcommand | +| `cmd/controller_setup.go` | Setup logic (moved from `api_server_setup.go`), config paths updated | ### Removed files -| File | Reason | -|---|---| -| `cmd/api_server.go` | Replaced by `cmd/controller.go` | +| File | Reason | +| ------------------------- | ------------------------------------- | +| `cmd/api_server.go` | Replaced by `cmd/controller.go` | | `cmd/api_server_start.go` | Replaced by `cmd/controller_start.go` | | `cmd/api_server_setup.go` | Replaced by `cmd/controller_setup.go` | ### Modified files -| File | Change | -|---|---| -| `internal/config/types.go` | Replace `API` struct with `Controller` containing `APIServer`, `Client`, `NATSConnection`. Update `Config` struct field. | -| `cmd/start.go` | Call controller instead of API server | -| `cmd/client.go` | `appConfig.API` → `appConfig.Controller` | -| `cmd/client_*.go` | Update all config references | -| `test/integration/integration_test.go` | Update `api server start` → `controller start` in test harness | +| File | Change | +| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | +| `internal/config/types.go` | Replace `API` struct with `Controller` containing `APIServer`, `Client`, `NATSConnection`. Update `Config` struct field. | +| `cmd/start.go` | Call controller instead of API server | +| `cmd/client.go` | `appConfig.API` → `appConfig.Controller` | +| `cmd/client_*.go` | Update all config references | +| `test/integration/integration_test.go` | Update `api server start` → `controller start` in test harness | ### Heartbeat -`internal/api/heartbeat.go` moves to `internal/controller/heartbeat.go`. -The heartbeat registers the controller as a component in the registry KV. -It is a controller lifecycle concern — the API server doesn't need to know -about it. The agent has its own heartbeat in `internal/agent/` which is -unrelated. +`internal/api/heartbeat.go` moves to `internal/controller/heartbeat.go`. The +heartbeat registers the controller as a component in the registry KV. It is a +controller lifecycle concern — the API server doesn't need to know about it. The +agent has its own heartbeat in `internal/agent/` which is unrelated. ### Notify -`internal/notify/` moves to `internal/controller/notify/`. The condition -watcher monitors the registry KV and dispatches notifications. It runs as -a goroutine owned by the controller — it has no reason to exist outside -the controller process. +`internal/notify/` moves to `internal/controller/notify/`. The condition watcher +monitors the registry KV and dispatches notifications. It runs as a goroutine +owned by the controller — it has no reason to exist outside the controller +process. ## What doesn't change @@ -189,14 +188,13 @@ the controller process. ## Docs updates -- `docs/docs/sidebar/usage/configuration.md` — full config reference with - new `controller.*` keys and env var table -- `docs/docs/sidebar/architecture/architecture.md` — rename "API Server" - to "Controller" in process descriptions +- `docs/docs/sidebar/usage/configuration.md` — full config reference with new + `controller.*` keys and env var table +- `docs/docs/sidebar/architecture/architecture.md` — rename "API Server" to + "Controller" in process descriptions - `docs/docs/sidebar/architecture/system-architecture.md` — update package layout, handler structure references -- `docs/docs/sidebar/usage/cli/` — update command docs for - `controller start` +- `docs/docs/sidebar/usage/cli/` — update command docs for `controller start` - `docs/docs/sidebar/development/development.md` — quick reference commands - `docs/docs/sidebar/features/health-checks.md` — update references - `docs/docs/sidebar/features/notifications.md` — update references diff --git a/docs/plans/2026-03-19-rename-api-to-controller.md b/docs/plans/2026-03-19-rename-api-to-controller.md index e4ef9ed3..2f648477 100644 --- a/docs/plans/2026-03-19-rename-api-to-controller.md +++ b/docs/plans/2026-03-19-rename-api-to-controller.md @@ -1,8 +1,8 @@ # Rename API Server to Controller Implementation Plan > **For agentic workers:** REQUIRED: Use superpowers:subagent-driven-development -> (if subagents available) or superpowers:executing-plans to implement this plan. -> Steps use checkbox (`- [ ]`) syntax for tracking. +> (if subagents available) or superpowers:executing-plans to implement this +> plan. Steps use checkbox (`- [ ]`) syntax for tracking. **Goal:** Rename the "API server" to "controller" across config, CLI, code structure, and docs to reflect its role as the control plane process. @@ -22,6 +22,7 @@ Update all config from `api.*` to `controller.*`. ### Task 1: Update config types **Files:** + - Modify: `internal/config/types.go` - [ ] **Step 1: Replace API struct with Controller** @@ -58,8 +59,8 @@ Remove the old `API` and `Server` structs. Keep `Client`, `ClientSecurity`, - [ ] **Step 2: Verify it compiles (it won't — many references to fix)** -Run: `go build ./internal/config/...` -Expected: PASS (the config package itself should compile) +Run: `go build ./internal/config/...` Expected: PASS (the config package itself +should compile) - [ ] **Step 3: Commit** @@ -72,6 +73,7 @@ refactor(config): rename API struct to Controller ### Task 2: Update config YAML files **Files:** + - Modify: `osapi.yaml` - Modify: `test/integration/osapi.yaml` @@ -122,7 +124,7 @@ controller: host: localhost port: 4222 client_name: osapi-api-integration - namespace: "" + namespace: '' auth: type: none ``` @@ -140,9 +142,11 @@ refactor(config): rename api to controller in YAML files ### Task 3: Move internal/api/ to internal/controller/api/ **Files:** + - Move: `internal/api/` → `internal/controller/api/` - Move: `internal/api/heartbeat.go` → `internal/controller/heartbeat.go` -- Move: `internal/api/heartbeat_test.go` → `internal/controller/heartbeat_test.go` +- Move: `internal/api/heartbeat_test.go` → + `internal/controller/heartbeat_test.go` - [ ] **Step 1: Create directory and move files** @@ -156,6 +160,7 @@ git mv internal/controller/api/heartbeat_test.go internal/controller/heartbeat_t - [ ] **Step 2: Update package declaration in heartbeat files** Change `package api` to `package controller` in: + - `internal/controller/heartbeat.go` - `internal/controller/heartbeat_test.go` @@ -165,10 +170,14 @@ needed. - [ ] **Step 3: Update all import paths project-wide** Find and replace all occurrences: -- `"github.com/retr0h/osapi/internal/api"` → `"github.com/retr0h/osapi/internal/controller/api"` -- `"github.com/retr0h/osapi/internal/api/` → `"github.com/retr0h/osapi/internal/controller/api/` + +- `"github.com/retr0h/osapi/internal/api"` → + `"github.com/retr0h/osapi/internal/controller/api"` +- `"github.com/retr0h/osapi/internal/api/` → + `"github.com/retr0h/osapi/internal/controller/api/` Files that import `internal/api`: + - `cmd/api_server_setup.go` (will become `cmd/controller_setup.go` in Task 5) - `cmd/nats_heartbeat.go` - `cmd/start.go` @@ -191,6 +200,7 @@ refactor: move internal/api to internal/controller/api ### Task 4: Move internal/notify/ to internal/controller/notify/ **Files:** + - Move: `internal/notify/` → `internal/controller/notify/` - [ ] **Step 1: Move directory** @@ -202,9 +212,12 @@ git mv internal/notify internal/controller/notify - [ ] **Step 2: Update all import paths** Find and replace: -- `"github.com/retr0h/osapi/internal/notify"` → `"github.com/retr0h/osapi/internal/controller/notify"` + +- `"github.com/retr0h/osapi/internal/notify"` → + `"github.com/retr0h/osapi/internal/controller/notify"` Files that import `internal/notify`: + - `cmd/api_server_setup.go` (will become `cmd/controller_setup.go`) - [ ] **Step 3: Verify compilation** @@ -224,6 +237,7 @@ refactor: move internal/notify to internal/controller/notify ### Task 5: Create controller.go **Files:** + - Create: `internal/controller/controller.go` - [ ] **Step 1: Create the Controller struct** @@ -241,8 +255,8 @@ type Controller struct { ``` For now this is a thin wrapper. The existing setup logic in -`cmd/api_server_setup.go` already manages the lifecycle. The controller -struct provides a home for future sub-component ownership. +`cmd/api_server_setup.go` already manages the lifecycle. The controller struct +provides a home for future sub-component ownership. - [ ] **Step 2: Commit** @@ -255,6 +269,7 @@ feat: add internal/controller/controller.go ### Task 6: Rename CMD files **Files:** + - Remove: `cmd/api_server.go` - Remove: `cmd/api_server_start.go` - Remove: `cmd/api_server_setup.go` @@ -273,6 +288,7 @@ git mv cmd/api_server_setup.go cmd/controller_setup.go - [ ] **Step 2: Update cmd/controller.go** Rename `apiServerCmd` to `controllerCmd`. Change: + - `Use: "server"` → `Use: "start"` - Parent command: registered under `rootCmd` not `apiCmd` - Remove the `apiCmd` parent entirely @@ -280,9 +296,9 @@ Rename `apiServerCmd` to `controllerCmd`. Change: - Update log messages from "api server" to "controller" The command becomes `osapi controller start` (two levels: controller → start). -Actually per the spec it's just `osapi controller start` where `controller` -is the parent and `start` is the subcommand. Keep the parent for future -subcommands (e.g., `controller status`). +Actually per the spec it's just `osapi controller start` where `controller` is +the parent and `start` is the subcommand. Keep the parent for future subcommands +(e.g., `controller status`). - [ ] **Step 3: Update cmd/controller_start.go** @@ -306,6 +322,7 @@ subcommands (e.g., `controller status`). - `appConfig.API.Server.Security.Roles` → `appConfig.Controller.API.Security.Roles` - Update import paths: + - `internal/api` → `internal/controller/api` - `internal/notify` → `internal/controller/notify` @@ -324,6 +341,7 @@ refactor: rename api server cmd to controller ### Task 7: Update cmd/start.go **Files:** + - Modify: `cmd/start.go` - [ ] **Step 1: Update references** @@ -349,6 +367,7 @@ refactor: update start.go for controller rename ### Task 8: Update client and token commands **Files:** + - Modify: `cmd/client.go` - Modify: `cmd/token_generate.go` - Modify: `cmd/token_validate.go` @@ -390,6 +409,7 @@ refactor: update client and token commands for controller config ### Task 9: Update integration tests **Files:** + - Modify: `test/integration/integration_test.go` - Modify: `test/integration/osapi.yaml` (already done in Task 2) @@ -445,6 +465,7 @@ refactor: update integration tests for controller config ### Task 10: Update CLAUDE.md **Files:** + - Modify: `CLAUDE.md` - [ ] **Step 1: Update architecture section** @@ -467,6 +488,7 @@ docs: update CLAUDE.md for controller rename ### Task 11: Update Docusaurus docs **Files:** + - Modify: `docs/docs/sidebar/usage/configuration.md` - Modify: `docs/docs/sidebar/architecture/architecture.md` - Modify: `docs/docs/sidebar/architecture/system-architecture.md` @@ -478,6 +500,7 @@ docs: update CLAUDE.md for controller rename - [ ] **Step 1: Update configuration.md** Replace all `api.*` config keys with `controller.*` in: + - YAML examples - Environment variable table - Section reference tables @@ -568,30 +591,30 @@ just docs::build ## Files Modified Summary -| File | Change | -|---|---| -| `internal/config/types.go` | `API` → `Controller`, `Server` → `APIServer` | -| `osapi.yaml` | `api:` → `controller:` | -| `test/integration/osapi.yaml` | `api:` → `controller:` | -| `internal/api/` → `internal/controller/api/` | Directory move | -| `internal/notify/` → `internal/controller/notify/` | Directory move | -| `internal/controller/heartbeat.go` | Moved from `internal/api/`, package rename | -| `internal/controller/heartbeat_test.go` | Moved from `internal/api/`, package rename | -| `internal/controller/controller.go` | New file | -| `cmd/api_server.go` → `cmd/controller.go` | Rename + update | -| `cmd/api_server_start.go` → `cmd/controller_start.go` | Rename + update | -| `cmd/api_server_setup.go` → `cmd/controller_setup.go` | Rename + update | -| `cmd/start.go` | Config path updates | -| `cmd/client.go` | Config path + viper binding updates | -| `cmd/token_generate.go` | Config path updates | -| `cmd/token_validate.go` | Config path updates | -| `cmd/nats_heartbeat.go` | Import path update | -| `test/integration/integration_test.go` | Env var updates | -| `CLAUDE.md` | Architecture references | -| `docs/docs/sidebar/usage/configuration.md` | Full config reference | -| `docs/docs/sidebar/architecture/architecture.md` | Process descriptions | -| `docs/docs/sidebar/architecture/system-architecture.md` | Package layout | -| `docs/docs/sidebar/development/development.md` | Quick reference | -| `docs/docs/sidebar/features/health-checks.md` | References | -| `docs/docs/sidebar/features/notifications.md` | References | -| `docs/docs/sidebar/intro.md` | Startup commands | +| File | Change | +| ------------------------------------------------------- | -------------------------------------------- | +| `internal/config/types.go` | `API` → `Controller`, `Server` → `APIServer` | +| `osapi.yaml` | `api:` → `controller:` | +| `test/integration/osapi.yaml` | `api:` → `controller:` | +| `internal/api/` → `internal/controller/api/` | Directory move | +| `internal/notify/` → `internal/controller/notify/` | Directory move | +| `internal/controller/heartbeat.go` | Moved from `internal/api/`, package rename | +| `internal/controller/heartbeat_test.go` | Moved from `internal/api/`, package rename | +| `internal/controller/controller.go` | New file | +| `cmd/api_server.go` → `cmd/controller.go` | Rename + update | +| `cmd/api_server_start.go` → `cmd/controller_start.go` | Rename + update | +| `cmd/api_server_setup.go` → `cmd/controller_setup.go` | Rename + update | +| `cmd/start.go` | Config path updates | +| `cmd/client.go` | Config path + viper binding updates | +| `cmd/token_generate.go` | Config path updates | +| `cmd/token_validate.go` | Config path updates | +| `cmd/nats_heartbeat.go` | Import path update | +| `test/integration/integration_test.go` | Env var updates | +| `CLAUDE.md` | Architecture references | +| `docs/docs/sidebar/usage/configuration.md` | Full config reference | +| `docs/docs/sidebar/architecture/architecture.md` | Process descriptions | +| `docs/docs/sidebar/architecture/system-architecture.md` | Package layout | +| `docs/docs/sidebar/development/development.md` | Quick reference | +| `docs/docs/sidebar/features/health-checks.md` | References | +| `docs/docs/sidebar/features/notifications.md` | References | +| `docs/docs/sidebar/intro.md` | Startup commands | diff --git a/internal/agent/mocks/gomock_reflect_3775270018/prog.go b/internal/agent/mocks/gomock_reflect_3775270018/prog.go index a7f5dad6..b6caf2f3 100644 --- a/internal/agent/mocks/gomock_reflect_3775270018/prog.go +++ b/internal/agent/mocks/gomock_reflect_3775270018/prog.go @@ -1,4 +1,3 @@ - package main import ( @@ -19,13 +18,11 @@ var output = flag.String("output", "", "The output file name, or empty to use st func main() { flag.Parse() - its := []struct{ + its := []struct { sym string typ reflect.Type }{ - - { "Msg", reflect.TypeOf((*pkg_.Msg)(nil)).Elem()}, - + {"Msg", reflect.TypeOf((*pkg_.Msg)(nil)).Elem()}, } pkg := &model.Package{ // NOTE: This behaves contrary to documented behaviour if the diff --git a/internal/config/types.go b/internal/config/types.go index 5760044a..3d46ee33 100644 --- a/internal/config/types.go +++ b/internal/config/types.go @@ -230,7 +230,7 @@ type NATSConnection struct { // Controller holds the control plane configuration. type Controller struct { Client Client `mapstructure:"client"` - API APIServer `mapstructure:"api" mask:"struct"` + API APIServer `mapstructure:"api" mask:"struct"` NATS NATSConnection `mapstructure:"nats"` } diff --git a/internal/controller/api/agent/agent_drain_public_test.go b/internal/controller/api/agent/agent_drain_public_test.go index 808eb6ad..91e2c163 100644 --- a/internal/controller/api/agent/agent_drain_public_test.go +++ b/internal/controller/api/agent/agent_drain_public_test.go @@ -33,11 +33,11 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apiagent "github.com/retr0h/osapi/internal/controller/api/agent" "github.com/retr0h/osapi/internal/controller/api/agent/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" jobtypes "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" ) diff --git a/internal/controller/api/agent/agent_get_public_test.go b/internal/controller/api/agent/agent_get_public_test.go index 638fb607..039713ba 100644 --- a/internal/controller/api/agent/agent_get_public_test.go +++ b/internal/controller/api/agent/agent_get_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apiagent "github.com/retr0h/osapi/internal/controller/api/agent" "github.com/retr0h/osapi/internal/controller/api/agent/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" jobtypes "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/provider/node/host" diff --git a/internal/controller/api/agent/agent_list_public_test.go b/internal/controller/api/agent/agent_list_public_test.go index 6740d07c..26a10172 100644 --- a/internal/controller/api/agent/agent_list_public_test.go +++ b/internal/controller/api/agent/agent_list_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apiagent "github.com/retr0h/osapi/internal/controller/api/agent" "github.com/retr0h/osapi/internal/controller/api/agent/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" jobtypes "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/provider/node/host" diff --git a/internal/controller/api/agent/agent_undrain_public_test.go b/internal/controller/api/agent/agent_undrain_public_test.go index 294cc0b9..3d2b1c84 100644 --- a/internal/controller/api/agent/agent_undrain_public_test.go +++ b/internal/controller/api/agent/agent_undrain_public_test.go @@ -33,11 +33,11 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apiagent "github.com/retr0h/osapi/internal/controller/api/agent" "github.com/retr0h/osapi/internal/controller/api/agent/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" jobtypes "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" ) diff --git a/internal/controller/api/audit/audit.go b/internal/controller/api/audit/audit.go index c42661fb..5f7c497b 100644 --- a/internal/controller/api/audit/audit.go +++ b/internal/controller/api/audit/audit.go @@ -24,8 +24,8 @@ package audit import ( "log/slog" - "github.com/retr0h/osapi/internal/controller/api/audit/gen" auditstore "github.com/retr0h/osapi/internal/audit" + "github.com/retr0h/osapi/internal/controller/api/audit/gen" ) // ensure that we've conformed to the `StrictServerInterface` with a compile-time check diff --git a/internal/controller/api/audit/audit_export_public_test.go b/internal/controller/api/audit/audit_export_public_test.go index 19e43eee..d3afbed6 100644 --- a/internal/controller/api/audit/audit_export_public_test.go +++ b/internal/controller/api/audit/audit_export_public_test.go @@ -32,12 +32,12 @@ import ( "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/controller/api" - auditapi "github.com/retr0h/osapi/internal/controller/api/audit" - "github.com/retr0h/osapi/internal/controller/api/audit/gen" auditstore "github.com/retr0h/osapi/internal/audit" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + auditapi "github.com/retr0h/osapi/internal/controller/api/audit" + "github.com/retr0h/osapi/internal/controller/api/audit/gen" ) type AuditExportPublicTestSuite struct { diff --git a/internal/controller/api/audit/audit_get_public_test.go b/internal/controller/api/audit/audit_get_public_test.go index 819293b2..080d16fc 100644 --- a/internal/controller/api/audit/audit_get_public_test.go +++ b/internal/controller/api/audit/audit_get_public_test.go @@ -34,12 +34,12 @@ import ( openapi_types "github.com/oapi-codegen/runtime/types" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/controller/api" - auditapi "github.com/retr0h/osapi/internal/controller/api/audit" - "github.com/retr0h/osapi/internal/controller/api/audit/gen" auditstore "github.com/retr0h/osapi/internal/audit" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + auditapi "github.com/retr0h/osapi/internal/controller/api/audit" + "github.com/retr0h/osapi/internal/controller/api/audit/gen" ) type AuditGetPublicTestSuite struct { diff --git a/internal/controller/api/audit/audit_list.go b/internal/controller/api/audit/audit_list.go index 0245fd80..b8057efb 100644 --- a/internal/controller/api/audit/audit_list.go +++ b/internal/controller/api/audit/audit_list.go @@ -26,8 +26,8 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/controller/api/audit/gen" auditstore "github.com/retr0h/osapi/internal/audit" + "github.com/retr0h/osapi/internal/controller/api/audit/gen" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/controller/api/audit/audit_list_public_test.go b/internal/controller/api/audit/audit_list_public_test.go index 4be51db7..c11e3c3d 100644 --- a/internal/controller/api/audit/audit_list_public_test.go +++ b/internal/controller/api/audit/audit_list_public_test.go @@ -32,12 +32,12 @@ import ( "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/controller/api" - auditapi "github.com/retr0h/osapi/internal/controller/api/audit" - "github.com/retr0h/osapi/internal/controller/api/audit/gen" auditstore "github.com/retr0h/osapi/internal/audit" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + auditapi "github.com/retr0h/osapi/internal/controller/api/audit" + "github.com/retr0h/osapi/internal/controller/api/audit/gen" ) type AuditListPublicTestSuite struct { diff --git a/internal/controller/api/audit/fakes_public_test.go b/internal/controller/api/audit/fakes_public_test.go index ef73f949..50091f3f 100644 --- a/internal/controller/api/audit/fakes_public_test.go +++ b/internal/controller/api/audit/fakes_public_test.go @@ -24,8 +24,8 @@ import ( "context" "log/slog" - auditapi "github.com/retr0h/osapi/internal/controller/api/audit" auditstore "github.com/retr0h/osapi/internal/audit" + auditapi "github.com/retr0h/osapi/internal/controller/api/audit" ) // fakeStore is a simple in-memory audit store for handler tests. diff --git a/internal/controller/api/docker/container_create_public_test.go b/internal/controller/api/docker/container_create_public_test.go index f20c3e8f..966c17da 100644 --- a/internal/controller/api/docker/container_create_public_test.go +++ b/internal/controller/api/docker/container_create_public_test.go @@ -35,11 +35,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" "github.com/retr0h/osapi/internal/controller/api/docker/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" diff --git a/internal/controller/api/docker/container_exec_public_test.go b/internal/controller/api/docker/container_exec_public_test.go index a9a72361..d88eb419 100644 --- a/internal/controller/api/docker/container_exec_public_test.go +++ b/internal/controller/api/docker/container_exec_public_test.go @@ -35,11 +35,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" "github.com/retr0h/osapi/internal/controller/api/docker/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" diff --git a/internal/controller/api/docker/container_image_remove_public_test.go b/internal/controller/api/docker/container_image_remove_public_test.go index 6eb8ea9d..2fac2eef 100644 --- a/internal/controller/api/docker/container_image_remove_public_test.go +++ b/internal/controller/api/docker/container_image_remove_public_test.go @@ -33,11 +33,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" "github.com/retr0h/osapi/internal/controller/api/docker/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" diff --git a/internal/controller/api/docker/container_inspect_public_test.go b/internal/controller/api/docker/container_inspect_public_test.go index 73c88397..dfec173c 100644 --- a/internal/controller/api/docker/container_inspect_public_test.go +++ b/internal/controller/api/docker/container_inspect_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" "github.com/retr0h/osapi/internal/controller/api/docker/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" diff --git a/internal/controller/api/docker/container_list_public_test.go b/internal/controller/api/docker/container_list_public_test.go index f3be894d..5a87008c 100644 --- a/internal/controller/api/docker/container_list_public_test.go +++ b/internal/controller/api/docker/container_list_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" "github.com/retr0h/osapi/internal/controller/api/docker/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" diff --git a/internal/controller/api/docker/container_pull_public_test.go b/internal/controller/api/docker/container_pull_public_test.go index 52f4e004..f36fd6ef 100644 --- a/internal/controller/api/docker/container_pull_public_test.go +++ b/internal/controller/api/docker/container_pull_public_test.go @@ -35,11 +35,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" "github.com/retr0h/osapi/internal/controller/api/docker/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" diff --git a/internal/controller/api/docker/container_remove_public_test.go b/internal/controller/api/docker/container_remove_public_test.go index ffebf4b6..e7a9bef4 100644 --- a/internal/controller/api/docker/container_remove_public_test.go +++ b/internal/controller/api/docker/container_remove_public_test.go @@ -33,11 +33,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" "github.com/retr0h/osapi/internal/controller/api/docker/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" diff --git a/internal/controller/api/docker/container_start_public_test.go b/internal/controller/api/docker/container_start_public_test.go index 7e71b72a..1c965673 100644 --- a/internal/controller/api/docker/container_start_public_test.go +++ b/internal/controller/api/docker/container_start_public_test.go @@ -33,11 +33,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" "github.com/retr0h/osapi/internal/controller/api/docker/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" diff --git a/internal/controller/api/docker/container_stop_public_test.go b/internal/controller/api/docker/container_stop_public_test.go index 135ef92e..0cb8c4d5 100644 --- a/internal/controller/api/docker/container_stop_public_test.go +++ b/internal/controller/api/docker/container_stop_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" "github.com/retr0h/osapi/internal/controller/api/docker/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" diff --git a/internal/controller/api/file/file_delete_public_test.go b/internal/controller/api/file/file_delete_public_test.go index 361fbeac..4755a87b 100644 --- a/internal/controller/api/file/file_delete_public_test.go +++ b/internal/controller/api/file/file_delete_public_test.go @@ -35,12 +35,12 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apifile "github.com/retr0h/osapi/internal/controller/api/file" "github.com/retr0h/osapi/internal/controller/api/file/gen" "github.com/retr0h/osapi/internal/controller/api/file/mocks" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" ) type FileDeletePublicTestSuite struct { diff --git a/internal/controller/api/file/file_get_public_test.go b/internal/controller/api/file/file_get_public_test.go index 6882d261..45ec781e 100644 --- a/internal/controller/api/file/file_get_public_test.go +++ b/internal/controller/api/file/file_get_public_test.go @@ -36,12 +36,12 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apifile "github.com/retr0h/osapi/internal/controller/api/file" "github.com/retr0h/osapi/internal/controller/api/file/gen" "github.com/retr0h/osapi/internal/controller/api/file/mocks" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" ) type FileGetPublicTestSuite struct { diff --git a/internal/controller/api/file/file_list_public_test.go b/internal/controller/api/file/file_list_public_test.go index 6742d6d6..d88b21f6 100644 --- a/internal/controller/api/file/file_list_public_test.go +++ b/internal/controller/api/file/file_list_public_test.go @@ -35,12 +35,12 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apifile "github.com/retr0h/osapi/internal/controller/api/file" "github.com/retr0h/osapi/internal/controller/api/file/gen" "github.com/retr0h/osapi/internal/controller/api/file/mocks" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" ) type FileListPublicTestSuite struct { diff --git a/internal/controller/api/file/file_upload_public_test.go b/internal/controller/api/file/file_upload_public_test.go index 37b3ffc0..69ee3421 100644 --- a/internal/controller/api/file/file_upload_public_test.go +++ b/internal/controller/api/file/file_upload_public_test.go @@ -39,12 +39,12 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apifile "github.com/retr0h/osapi/internal/controller/api/file" "github.com/retr0h/osapi/internal/controller/api/file/gen" "github.com/retr0h/osapi/internal/controller/api/file/mocks" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" ) type FileUploadPublicTestSuite struct { diff --git a/internal/controller/api/handler_agent.go b/internal/controller/api/handler_agent.go index b75ad5ac..a9c4e200 100644 --- a/internal/controller/api/handler_agent.go +++ b/internal/controller/api/handler_agent.go @@ -24,9 +24,9 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" + "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/controller/api/agent" agentGen "github.com/retr0h/osapi/internal/controller/api/agent/gen" - "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/job/client" ) diff --git a/internal/controller/api/handler_audit.go b/internal/controller/api/handler_audit.go index 4ea4b00f..2b56f13d 100644 --- a/internal/controller/api/handler_audit.go +++ b/internal/controller/api/handler_audit.go @@ -24,10 +24,10 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" - audithandler "github.com/retr0h/osapi/internal/controller/api/audit" - auditGen "github.com/retr0h/osapi/internal/controller/api/audit/gen" auditstore "github.com/retr0h/osapi/internal/audit" "github.com/retr0h/osapi/internal/authtoken" + audithandler "github.com/retr0h/osapi/internal/controller/api/audit" + auditGen "github.com/retr0h/osapi/internal/controller/api/audit/gen" ) // GetAuditHandler returns audit handler for registration. diff --git a/internal/controller/api/handler_docker.go b/internal/controller/api/handler_docker.go index 2a64370e..50a3ec58 100644 --- a/internal/controller/api/handler_docker.go +++ b/internal/controller/api/handler_docker.go @@ -24,9 +24,9 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" + "github.com/retr0h/osapi/internal/authtoken" docker "github.com/retr0h/osapi/internal/controller/api/docker" dockerGen "github.com/retr0h/osapi/internal/controller/api/docker/gen" - "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/job/client" ) diff --git a/internal/controller/api/handler_file.go b/internal/controller/api/handler_file.go index 43e56a64..0f4619f8 100644 --- a/internal/controller/api/handler_file.go +++ b/internal/controller/api/handler_file.go @@ -24,9 +24,9 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" + "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/controller/api/file" fileGen "github.com/retr0h/osapi/internal/controller/api/file/gen" - "github.com/retr0h/osapi/internal/authtoken" ) // GetFileHandler returns file handler for registration. diff --git a/internal/controller/api/handler_health.go b/internal/controller/api/handler_health.go index 5320b037..01a38a6c 100644 --- a/internal/controller/api/handler_health.go +++ b/internal/controller/api/handler_health.go @@ -26,9 +26,9 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" + "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/controller/api/health" healthGen "github.com/retr0h/osapi/internal/controller/api/health/gen" - "github.com/retr0h/osapi/internal/authtoken" ) // unauthenticatedOperations lists operation IDs that skip auth. diff --git a/internal/controller/api/handler_job.go b/internal/controller/api/handler_job.go index c3f95e1b..951a4f2d 100644 --- a/internal/controller/api/handler_job.go +++ b/internal/controller/api/handler_job.go @@ -24,9 +24,9 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" + "github.com/retr0h/osapi/internal/authtoken" apijob "github.com/retr0h/osapi/internal/controller/api/job" jobGen "github.com/retr0h/osapi/internal/controller/api/job/gen" - "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/job/client" ) diff --git a/internal/controller/api/handler_node.go b/internal/controller/api/handler_node.go index 7b999f51..c5451780 100644 --- a/internal/controller/api/handler_node.go +++ b/internal/controller/api/handler_node.go @@ -24,9 +24,9 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" + "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/controller/api/node" nodeGen "github.com/retr0h/osapi/internal/controller/api/node/gen" - "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/job/client" ) diff --git a/internal/controller/api/handler_public_test.go b/internal/controller/api/handler_public_test.go index 26c23e14..5011b9e8 100644 --- a/internal/controller/api/handler_public_test.go +++ b/internal/controller/api/handler_public_test.go @@ -32,11 +32,11 @@ import ( "github.com/labstack/echo/v4" "github.com/stretchr/testify/suite" + auditstore "github.com/retr0h/osapi/internal/audit" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" fileMocks "github.com/retr0h/osapi/internal/controller/api/file/mocks" "github.com/retr0h/osapi/internal/controller/api/health" - auditstore "github.com/retr0h/osapi/internal/audit" - "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job/mocks" ) diff --git a/internal/controller/api/health/health_get_public_test.go b/internal/controller/api/health/health_get_public_test.go index 34a24d7e..faa6de3e 100644 --- a/internal/controller/api/health/health_get_public_test.go +++ b/internal/controller/api/health/health_get_public_test.go @@ -31,10 +31,10 @@ import ( "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" "github.com/retr0h/osapi/internal/controller/api/health" "github.com/retr0h/osapi/internal/controller/api/health/gen" - "github.com/retr0h/osapi/internal/config" ) type HealthGetPublicTestSuite struct { diff --git a/internal/controller/api/health/health_ready_get_public_test.go b/internal/controller/api/health/health_ready_get_public_test.go index d8245857..31f398c7 100644 --- a/internal/controller/api/health/health_ready_get_public_test.go +++ b/internal/controller/api/health/health_ready_get_public_test.go @@ -32,10 +32,10 @@ import ( "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" "github.com/retr0h/osapi/internal/controller/api/health" "github.com/retr0h/osapi/internal/controller/api/health/gen" - "github.com/retr0h/osapi/internal/config" ) type HealthReadyGetPublicTestSuite struct { diff --git a/internal/controller/api/health/health_status_get_public_test.go b/internal/controller/api/health/health_status_get_public_test.go index b4ea7dee..e9d48506 100644 --- a/internal/controller/api/health/health_status_get_public_test.go +++ b/internal/controller/api/health/health_status_get_public_test.go @@ -32,11 +32,11 @@ import ( "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" "github.com/retr0h/osapi/internal/controller/api/health" "github.com/retr0h/osapi/internal/controller/api/health/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" ) type stubChecker struct{} diff --git a/internal/controller/api/job/job_delete_public_test.go b/internal/controller/api/job/job_delete_public_test.go index a08c7cba..957dff0b 100644 --- a/internal/controller/api/job/job_delete_public_test.go +++ b/internal/controller/api/job/job_delete_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apijob "github.com/retr0h/osapi/internal/controller/api/job" "github.com/retr0h/osapi/internal/controller/api/job/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" jobmocks "github.com/retr0h/osapi/internal/job/mocks" ) diff --git a/internal/controller/api/job/job_get_public_test.go b/internal/controller/api/job/job_get_public_test.go index 4f8a78e9..51aaabd8 100644 --- a/internal/controller/api/job/job_get_public_test.go +++ b/internal/controller/api/job/job_get_public_test.go @@ -36,11 +36,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apijob "github.com/retr0h/osapi/internal/controller/api/job" "github.com/retr0h/osapi/internal/controller/api/job/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" jobtypes "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" ) diff --git a/internal/controller/api/job/job_list_public_test.go b/internal/controller/api/job/job_list_public_test.go index 9a3b51b2..ed4ce5ae 100644 --- a/internal/controller/api/job/job_list_public_test.go +++ b/internal/controller/api/job/job_list_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apijob "github.com/retr0h/osapi/internal/controller/api/job" "github.com/retr0h/osapi/internal/controller/api/job/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" jobtypes "github.com/retr0h/osapi/internal/job" jobclient "github.com/retr0h/osapi/internal/job/client" jobmocks "github.com/retr0h/osapi/internal/job/mocks" diff --git a/internal/controller/api/job/job_retry_public_test.go b/internal/controller/api/job/job_retry_public_test.go index df444cea..10012a85 100644 --- a/internal/controller/api/job/job_retry_public_test.go +++ b/internal/controller/api/job/job_retry_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/google/uuid" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apijob "github.com/retr0h/osapi/internal/controller/api/job" "github.com/retr0h/osapi/internal/controller/api/job/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job/client" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" diff --git a/internal/controller/api/metrics/metrics_get_public_test.go b/internal/controller/api/metrics/metrics_get_public_test.go index 35f80615..835c06ba 100644 --- a/internal/controller/api/metrics/metrics_get_public_test.go +++ b/internal/controller/api/metrics/metrics_get_public_test.go @@ -30,9 +30,9 @@ import ( "github.com/labstack/echo/v4" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" "github.com/retr0h/osapi/internal/controller/api/metrics" - "github.com/retr0h/osapi/internal/config" ) type MetricsGetPublicTestSuite struct { diff --git a/internal/controller/api/middleware.go b/internal/controller/api/middleware.go index 87a89725..78f583db 100644 --- a/internal/controller/api/middleware.go +++ b/internal/controller/api/middleware.go @@ -28,8 +28,8 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" - "github.com/retr0h/osapi/internal/controller/api/common/gen" "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/controller/api/common/gen" ) // Context key constants for injecting user identity into handlers. diff --git a/internal/controller/api/node/command_exec_post_public_test.go b/internal/controller/api/node/command_exec_post_public_test.go index 48831344..b9de9f9e 100644 --- a/internal/controller/api/node/command_exec_post_public_test.go +++ b/internal/controller/api/node/command_exec_post_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apinode "github.com/retr0h/osapi/internal/controller/api/node" "github.com/retr0h/osapi/internal/controller/api/node/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/provider/command" "github.com/retr0h/osapi/internal/validation" diff --git a/internal/controller/api/node/command_shell_post_public_test.go b/internal/controller/api/node/command_shell_post_public_test.go index 01cb5f88..bb94ca8c 100644 --- a/internal/controller/api/node/command_shell_post_public_test.go +++ b/internal/controller/api/node/command_shell_post_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apinode "github.com/retr0h/osapi/internal/controller/api/node" "github.com/retr0h/osapi/internal/controller/api/node/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/provider/command" "github.com/retr0h/osapi/internal/validation" diff --git a/internal/controller/api/node/file_deploy_post_public_test.go b/internal/controller/api/node/file_deploy_post_public_test.go index 50bd9d30..472dc038 100644 --- a/internal/controller/api/node/file_deploy_post_public_test.go +++ b/internal/controller/api/node/file_deploy_post_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apinode "github.com/retr0h/osapi/internal/controller/api/node" "github.com/retr0h/osapi/internal/controller/api/node/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/controller/api/node/file_status_post_public_test.go b/internal/controller/api/node/file_status_post_public_test.go index 701beb94..a1239d6d 100644 --- a/internal/controller/api/node/file_status_post_public_test.go +++ b/internal/controller/api/node/file_status_post_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apinode "github.com/retr0h/osapi/internal/controller/api/node" "github.com/retr0h/osapi/internal/controller/api/node/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/provider/file" "github.com/retr0h/osapi/internal/validation" diff --git a/internal/controller/api/node/network_dns_get_by_interface_public_test.go b/internal/controller/api/node/network_dns_get_by_interface_public_test.go index ed9bd254..3d20f3ed 100644 --- a/internal/controller/api/node/network_dns_get_by_interface_public_test.go +++ b/internal/controller/api/node/network_dns_get_by_interface_public_test.go @@ -33,11 +33,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apinode "github.com/retr0h/osapi/internal/controller/api/node" "github.com/retr0h/osapi/internal/controller/api/node/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/provider/network/dns" "github.com/retr0h/osapi/internal/validation" diff --git a/internal/controller/api/node/network_dns_put_by_interface_public_test.go b/internal/controller/api/node/network_dns_put_by_interface_public_test.go index 7bb9a358..9eb571b8 100644 --- a/internal/controller/api/node/network_dns_put_by_interface_public_test.go +++ b/internal/controller/api/node/network_dns_put_by_interface_public_test.go @@ -35,11 +35,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apinode "github.com/retr0h/osapi/internal/controller/api/node" "github.com/retr0h/osapi/internal/controller/api/node/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/controller/api/node/network_ping_post_public_test.go b/internal/controller/api/node/network_ping_post_public_test.go index 194570df..8b4d70b4 100644 --- a/internal/controller/api/node/network_ping_post_public_test.go +++ b/internal/controller/api/node/network_ping_post_public_test.go @@ -35,11 +35,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apinode "github.com/retr0h/osapi/internal/controller/api/node" "github.com/retr0h/osapi/internal/controller/api/node/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/provider/network/ping" "github.com/retr0h/osapi/internal/validation" diff --git a/internal/controller/api/node/node_disk_get_public_test.go b/internal/controller/api/node/node_disk_get_public_test.go index 7fcc26de..6b292667 100644 --- a/internal/controller/api/node/node_disk_get_public_test.go +++ b/internal/controller/api/node/node_disk_get_public_test.go @@ -33,11 +33,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apinode "github.com/retr0h/osapi/internal/controller/api/node" "github.com/retr0h/osapi/internal/controller/api/node/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/provider/node/disk" diff --git a/internal/controller/api/node/node_hostname_get_public_test.go b/internal/controller/api/node/node_hostname_get_public_test.go index 1b3cbdb7..1227a11b 100644 --- a/internal/controller/api/node/node_hostname_get_public_test.go +++ b/internal/controller/api/node/node_hostname_get_public_test.go @@ -33,11 +33,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apinode "github.com/retr0h/osapi/internal/controller/api/node" "github.com/retr0h/osapi/internal/controller/api/node/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" diff --git a/internal/controller/api/node/node_load_get_public_test.go b/internal/controller/api/node/node_load_get_public_test.go index 0b82ecdc..cb1142c9 100644 --- a/internal/controller/api/node/node_load_get_public_test.go +++ b/internal/controller/api/node/node_load_get_public_test.go @@ -33,11 +33,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apinode "github.com/retr0h/osapi/internal/controller/api/node" "github.com/retr0h/osapi/internal/controller/api/node/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/provider/node/load" "github.com/retr0h/osapi/internal/validation" diff --git a/internal/controller/api/node/node_memory_get_public_test.go b/internal/controller/api/node/node_memory_get_public_test.go index ea80a9ff..089c3234 100644 --- a/internal/controller/api/node/node_memory_get_public_test.go +++ b/internal/controller/api/node/node_memory_get_public_test.go @@ -33,11 +33,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apinode "github.com/retr0h/osapi/internal/controller/api/node" "github.com/retr0h/osapi/internal/controller/api/node/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/provider/node/mem" "github.com/retr0h/osapi/internal/validation" diff --git a/internal/controller/api/node/node_os_get_public_test.go b/internal/controller/api/node/node_os_get_public_test.go index 9a25f243..9c006a11 100644 --- a/internal/controller/api/node/node_os_get_public_test.go +++ b/internal/controller/api/node/node_os_get_public_test.go @@ -33,11 +33,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apinode "github.com/retr0h/osapi/internal/controller/api/node" "github.com/retr0h/osapi/internal/controller/api/node/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/provider/node/host" "github.com/retr0h/osapi/internal/validation" diff --git a/internal/controller/api/node/node_status_get_public_test.go b/internal/controller/api/node/node_status_get_public_test.go index 392a3917..deebf1c6 100644 --- a/internal/controller/api/node/node_status_get_public_test.go +++ b/internal/controller/api/node/node_status_get_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apinode "github.com/retr0h/osapi/internal/controller/api/node" "github.com/retr0h/osapi/internal/controller/api/node/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" jobtypes "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/provider/node/disk" diff --git a/internal/controller/api/node/node_uptime_get_public_test.go b/internal/controller/api/node/node_uptime_get_public_test.go index 2003175d..67b5baa1 100644 --- a/internal/controller/api/node/node_uptime_get_public_test.go +++ b/internal/controller/api/node/node_uptime_get_public_test.go @@ -33,11 +33,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/controller/api" apinode "github.com/retr0h/osapi/internal/controller/api/node" "github.com/retr0h/osapi/internal/controller/api/node/gen" - "github.com/retr0h/osapi/internal/authtoken" - "github.com/retr0h/osapi/internal/config" "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" diff --git a/internal/controller/api/server_public_test.go b/internal/controller/api/server_public_test.go index 77d88efa..32fd402f 100644 --- a/internal/controller/api/server_public_test.go +++ b/internal/controller/api/server_public_test.go @@ -32,9 +32,9 @@ import ( "github.com/labstack/echo/v4" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/controller/api" auditstore "github.com/retr0h/osapi/internal/audit" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" ) type ServerPublicTestSuite struct { From 139268404ec39446c1771f31e1bb6d55cd9abd7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=A0=CF=85=CE=B1=CE=B7=20=D7=A0=CF=85=CE=B1=CE=B7=D1=95?= =?UTF-8?q?=CF=83=CE=B7?= Date: Thu, 19 Mar 2026 22:43:10 -0700 Subject: [PATCH 12/12] fix: add package comments and remove stale mock file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add package-comments for controller and cmd packages. Remove gomock_reflect temp directory that was accidentally committed. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- cmd/root.go | 1 + .../mocks/gomock_reflect_3775270018/prog.go | 63 ------------------- internal/controller/heartbeat.go | 1 + 3 files changed, 2 insertions(+), 63 deletions(-) delete mode 100644 internal/agent/mocks/gomock_reflect_3775270018/prog.go diff --git a/cmd/root.go b/cmd/root.go index 2f20922c..8a6d5b1b 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -18,6 +18,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. +// Package cmd provides CLI commands for OSAPI. package cmd import ( diff --git a/internal/agent/mocks/gomock_reflect_3775270018/prog.go b/internal/agent/mocks/gomock_reflect_3775270018/prog.go deleted file mode 100644 index b6caf2f3..00000000 --- a/internal/agent/mocks/gomock_reflect_3775270018/prog.go +++ /dev/null @@ -1,63 +0,0 @@ -package main - -import ( - "encoding/gob" - "flag" - "fmt" - "os" - "path" - "reflect" - - "github.com/golang/mock/mockgen/model" - - pkg_ "github.com/nats-io/nats.go/jetstream" -) - -var output = flag.String("output", "", "The output file name, or empty to use stdout.") - -func main() { - flag.Parse() - - its := []struct { - sym string - typ reflect.Type - }{ - {"Msg", reflect.TypeOf((*pkg_.Msg)(nil)).Elem()}, - } - pkg := &model.Package{ - // NOTE: This behaves contrary to documented behaviour if the - // package name is not the final component of the import path. - // The reflect package doesn't expose the package name, though. - Name: path.Base("github.com/nats-io/nats.go/jetstream"), - } - - for _, it := range its { - intf, err := model.InterfaceFromInterfaceType(it.typ) - if err != nil { - fmt.Fprintf(os.Stderr, "Reflection: %v\n", err) - os.Exit(1) - } - intf.Name = it.sym - pkg.Interfaces = append(pkg.Interfaces, intf) - } - - outfile := os.Stdout - if len(*output) != 0 { - var err error - outfile, err = os.Create(*output) - if err != nil { - fmt.Fprintf(os.Stderr, "failed to open output file %q", *output) - } - defer func() { - if err := outfile.Close(); err != nil { - fmt.Fprintf(os.Stderr, "failed to close output file %q", *output) - os.Exit(1) - } - }() - } - - if err := gob.NewEncoder(outfile).Encode(pkg); err != nil { - fmt.Fprintf(os.Stderr, "gob encode: %v\n", err) - os.Exit(1) - } -} diff --git a/internal/controller/heartbeat.go b/internal/controller/heartbeat.go index ca36a2a2..f5a61df6 100644 --- a/internal/controller/heartbeat.go +++ b/internal/controller/heartbeat.go @@ -18,6 +18,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. +// Package controller provides the control plane process components. package controller import (