create-metrics-collector
Metrics Collector Generator
Creates metrics collection infrastructure for application observability and monitoring.
When to Use
| Scenario | Example |
|---|---|
| Request monitoring | Track request rate, errors, duration (RED) |
| Business metrics | Count orders, revenue, active users |
| Performance profiling | Histogram of response times |
| Health dashboards | Expose /metrics for Prometheus scraping |
Component Characteristics
MetricsCollectorInterface
- Metrics contract for increment, gauge, histogram operations
- Backend-agnostic: swap Prometheus for StatsD or custom
- Supports labels for dimensional metrics
Counter
- Monotonically increasing metric wrapper
- Tracks totals: requests, errors, processed items
- Supports labels for per-endpoint counts
Gauge
- Point-in-time value metric wrapper
- Tracks current state: active connections, queue size
- Can increase and decrease
Histogram
- Distribution metric wrapper
- Tracks request duration, response size
- Configurable bucket boundaries
PrometheusMetricsCollector
- Prometheus PHP client adapter
- Registers counters, gauges, histograms
- Thread-safe with shared storage
MetricsMiddleware
- PSR-15 middleware collecting RED metrics automatically
- Rate: total request count per endpoint
- Errors: error count by status code
- Duration: response time histogram
MetricsAction
/metricsendpoint exposing Prometheus format- Returns
text/plainwith all registered metrics
NullMetricsCollector
- Null Object pattern for testing and development
- All operations are no-ops
- Drop-in replacement without side effects
Generation Process
Step 1: Generate Core Components
Path: src/Infrastructure/Metrics/
MetricsCollectorInterface.php— Metrics contractCounter.php— Counter metric wrapperGauge.php— Gauge metric wrapperHistogram.php— Histogram metric wrapper
Step 2: Generate Implementations
Path: src/Infrastructure/Metrics/
PrometheusMetricsCollector.php— Prometheus adapterNullMetricsCollector.php— Null Object for testing
Step 3: Generate HTTP Components
Path: src/Infrastructure/Metrics/
MetricsMiddleware.php— PSR-15 RED metrics middlewareMetricsAction.php—/metricsendpoint action
Step 4: Generate Tests
NullMetricsCollectorTest.php— Null object behavior testsMetricsMiddlewareTest.php— Middleware metrics tests
File Placement
| Component | Path |
|---|---|
| All Classes | src/Infrastructure/Metrics/ |
| Unit Tests | tests/Unit/Infrastructure/Metrics/ |
Naming Conventions
| Component | Pattern | Example |
|---|---|---|
| Interface | MetricsCollectorInterface |
MetricsCollectorInterface |
| Counter | Counter |
Counter |
| Gauge | Gauge |
Gauge |
| Histogram | Histogram |
Histogram |
| Prometheus | PrometheusMetricsCollector |
PrometheusMetricsCollector |
| Null Object | NullMetricsCollector |
NullMetricsCollector |
| Middleware | MetricsMiddleware |
MetricsMiddleware |
| Action | MetricsAction |
MetricsAction |
| Test | {ClassName}Test |
MetricsMiddlewareTest |
Quick Template Reference
MetricsCollectorInterface
interface MetricsCollectorInterface
{
/** @param array<string, string> $labels */
public function increment(string $name, array $labels = [], float $value = 1.0): void;
/** @param array<string, string> $labels */
public function gauge(string $name, float $value, array $labels = []): void;
/** @param array<string, string> $labels */
public function histogram(string $name, float $value, array $labels = []): void;
}
MetricsMiddleware
final readonly class MetricsMiddleware implements MiddlewareInterface
{
public function process(
ServerRequestInterface $request,
RequestHandlerInterface $handler
): ResponseInterface;
}
NullMetricsCollector
final readonly class NullMetricsCollector implements MetricsCollectorInterface
{
public function increment(string $name, array $labels = [], float $value = 1.0): void {}
public function gauge(string $name, float $value, array $labels = []): void {}
public function histogram(string $name, float $value, array $labels = []): void {}
}
Usage Example
// Middleware auto-collects RED metrics
$middleware = new MetricsMiddleware($collector);
// Manual metrics in use cases
$collector->increment('orders_created_total', ['channel' => 'web']);
$collector->gauge('active_connections', $pool->activeCount());
$collector->histogram('payment_duration_seconds', $elapsed, ['gateway' => 'stripe']);
// Expose via /metrics endpoint
$app->get('/metrics', new MetricsAction($collector));
RED Metrics Pattern
Rate ──→ http_requests_total{method, path, status}
Errors ──→ http_requests_total{status=~"5.."}
Duration ──→ http_request_duration_seconds{method, path}
Anti-patterns to Avoid
| Anti-pattern | Problem | Solution |
|---|---|---|
| High cardinality labels | Prometheus storage explosion | Limit label values, no user IDs |
| No null implementation | Cannot disable metrics in tests | NullMetricsCollector |
| Inline metric names | Typos, inconsistency | Define constants or enum |
| Missing error metrics | Cannot calculate error rate | Track status codes |
| No histogram buckets | Default buckets don't fit use case | Configure per metric |
| Metrics in domain layer | Infrastructure leak | Keep in infrastructure only |
References
For complete PHP templates and examples, see:
references/templates.md— MetricsCollectorInterface, Counter, Gauge, Histogram, Prometheus, Middleware templatesreferences/examples.md— Integration examples and tests
More from dykyi-roman/awesome-claude-code
psr-overview-knowledge
PHP Standards Recommendations (PSR) overview knowledge base. Provides comprehensive reference for all accepted PSRs including PSR-1,3,4,6,7,11,12,13,14,15,16,17,18,20. Use for PSR selection decisions and compliance audits.
22detect-code-smells
Detects code smells in PHP codebases. Identifies God Class, Feature Envy, Data Clumps, Long Parameter List, Long Method, Primitive Obsession, Message Chains, Inappropriate Intimacy. Generates actionable reports with refactoring recommendations.
15clean-arch-knowledge
Clean Architecture knowledge base. Provides patterns, antipatterns, and PHP-specific guidelines for Clean Architecture and Hexagonal Architecture audits.
15ddd-knowledge
DDD architecture knowledge base. Provides patterns, antipatterns, and PHP-specific guidelines for Domain-Driven Design audits.
14testing-knowledge
Testing knowledge base for PHP 8.4 projects. Provides testing pyramid, AAA pattern, naming conventions, isolation principles, DDD testing guidelines, and PHPUnit patterns.
12bug-root-cause-finder
Root cause analysis methods for PHP bugs. Provides 5 Whys technique, fault tree analysis, git bisect guidance, and stack trace parsing.
12