Skip to content

Engine Decomposition: Extract HTTP & Observability plugins (Phase 2) #82

Description

@intel352

Overview

Extract the HTTP plugin and Observability plugin as the first two proof-of-concept plugin extractions. These are chosen because HTTP is the most heavily used module category (32 configs use http.server) and Observability has the most wiring hooks.

Reference: docs/PLAN_ENGINE_DECOMPOSITION.md — Phase 2
Depends on: Phase 1 Foundation (#81)

HTTP Plugin (plugins/http/)

Move from engine.go switch + cmd/server/main.go registrations:

Module factories:

  • http.server, http.router, http.handler
  • http.middleware.auth, http.middleware.logging, http.middleware.ratelimit, http.middleware.cors, http.middleware.requestid, http.middleware.securityheaders
  • http.proxy, reverseproxy, http.simple_proxy
  • static.fileserver

Step types: step.http_call, step.request_parse, step.json_response, step.rate_limit, step.circuit_breaker

Trigger: HTTP trigger

Workflow handler: HTTPWorkflowHandler

Wiring hooks: Static file server → router wiring, auth middleware → provider wiring

Schemas: All HTTP-related module schema definitions

Observability Plugin (plugins/observability/)

Module factories: metrics.collector, health.checker, log.collector, observability.otel, openapi.generator

Wiring hooks: Health check endpoint registration, metrics endpoint registration, log collector endpoint registration, OpenAPI spec building + endpoint registration

Schemas: All observability module schema definitions

Engine Changes

  • Remove extracted module types from engine.go switch statement
  • Update cmd/server/main.go to load HTTP + Observability plugins

Testing

  • Negative tests: core rejects HTTP/observability module types when plugins not loaded
  • Positive tests: plugins correctly provide all module types, steps, triggers, handlers
  • All existing tests continue to pass

Files to Create

plugins/http/plugin.go, plugins/http/modules.go, plugins/http/steps.go, plugins/http/trigger.go, plugins/http/handler.go, plugins/http/wiring.go, plugins/http/schemas.go, plugins/http/plugin_test.go, plugins/observability/plugin.go, plugins/observability/modules.go, plugins/observability/wiring.go, plugins/observability/schemas.go, plugins/observability/plugin_test.go

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions