@basic-math/monitor
v0.1.0
Published
Operation monitoring and logging with repository pattern for mathematical operations
Maintainers
Readme
@basic-math/monitor
Monitoring and logging package for basic-math library operations. Records, stores, and analyzes mathematical operation history.
Features
- 📊 Record all mathematical operations (add, subtract, multiply, divide)
- 🔍 Query operations by ID, type, or date range
- 📈 Generate operation statistics
- 🔌 Pluggable repository interface for different storage backends
- 🎯 Console logging implementation included
- 🎨 Decorator pattern for wrapping existing adapters
Installation
bun installArchitecture
This package follows Clean Architecture principles:
src/
├── domains/
│ ├── models/ # OperationRecord, OperationType
│ └── ports/ # OperationRepository interface
├── applications/ # MonitorService
└── infrastructures/ # ConsoleOperationRepository, Monitoring adaptersUsage
Basic Usage
import {
MonitorService,
ConsoleOperationRepository,
} from "@basic-math/monitor";
// Create repository and service
const repository = new ConsoleOperationRepository();
const monitor = new MonitorService(repository);
// Record operations
await monitor.recordOperation({
operation: "add",
operandA: 5,
operandB: 3,
result: 8,
});
// Get all operations
const operations = await monitor.getAllOperations();
// Get statistics
const stats = await monitor.getStatistics();
console.log(`Total operations: ${stats.total}`);
console.log(`Add operations: ${stats.byType.add}`);Integration with Client Package
Use monitoring adapters to wrap existing adapters:
import { Client, NativeAddAdapter } from "@basic-math/client";
import {
MonitorService,
ConsoleOperationRepository,
MonitoringAddAdapter,
} from "@basic-math/monitor";
// Setup monitoring
const repository = new ConsoleOperationRepository();
const monitor = new MonitorService(repository);
// Wrap adapter with monitoring
const baseAdapter = new NativeAddAdapter();
const monitoredAdapter = new MonitoringAddAdapter(baseAdapter, monitor);
// Use in client
const math = new Client({
add: monitoredAdapter,
subtract: "native",
});
math.add(5, 3); // Will be logged to console and recordedCustom Repository Implementation
Implement the OperationRepository interface for custom storage:
import type { OperationRepository } from "@basic-math/monitor";
class DatabaseOperationRepository implements OperationRepository {
async save(input: CreateOperationRecordInput): Promise<OperationRecord> {
// Save to database
}
async findById(id: string): Promise<OperationRecord | null> {
// Query from database
}
// Implement other methods...
}
const monitor = new MonitorService(new DatabaseOperationRepository());API Reference
MonitorService
Main service for monitoring operations.
Methods
recordOperation(input)- Record a new operationgetOperationById(id)- Get operation by IDgetAllOperations()- Get all operationsgetOperationsByType(type)- Get operations filtered by typegetOperationsByDateRange(start, end)- Get operations in date rangedeleteOperation(id)- Delete operation by IDclearAllOperations()- Delete all operationsgetTotalCount()- Get total countgetCountByType(type)- Get count by typegetStatistics()- Get summary statistics
OperationRepository Interface
Repository interface for implementing custom storage backends.
Methods:
save(input)- Save operation recordfindById(id)- Find by IDfindAll()- Find all recordsfindByType(operation)- Find by operation typefindByDateRange(start, end)- Find by date rangedeleteById(id)- Delete by IDdeleteAll()- Delete all recordscount()- Count all recordscountByType(operation)- Count by type
Monitoring Adapters
Decorator adapters for wrapping existing adapters:
MonitoringAddAdapterMonitoringSubtractAdapterMonitoringMultiplyAdapterMonitoringDivideAdapter
All monitoring adapters accept:
- Inner adapter to wrap
- MonitorService instance
Testing
bun testExamples
See examples/ directory for more usage examples.
License
Private package (not published to npm)
