Operation monitoring and logging with repository pattern for mathematical operations
npm install @basic-math/monitorMonitoring and logging package for basic-math library operations. Records, stores, and analyzes mathematical operation history.
- š 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
``bash`
bun install
This package follows Clean Architecture principles:
``
src/
āāā domains/
ā āāā models/ # OperationRecord, OperationType
ā āāā ports/ # OperationRepository interface
āāā applications/ # MonitorService
āāā infrastructures/ # ConsoleOperationRepository, Monitoring adapters
`typescript
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});Add operations: ${stats.byType.add}
console.log();`
Use monitoring adapters to wrap existing adapters:
`typescript
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 recorded
`
Implement the OperationRepository interface for custom storage:
`typescript
import type { OperationRepository } from "@basic-math/monitor";
class DatabaseOperationRepository implements OperationRepository {
async save(input: CreateOperationRecordInput): Promise
// Save to database
}
async findById(id: string): Promise
// Query from database
}
// Implement other methods...
}
const monitor = new MonitorService(new DatabaseOperationRepository());
`
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
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
Decorator adapters for wrapping existing adapters:
- MonitoringAddAdapterMonitoringSubtractAdapter
- MonitoringMultiplyAdapter
- MonitoringDivideAdapter
-
All monitoring adapters accept:
1. Inner adapter to wrap
2. MonitorService instance
`bash`
bun test
See examples/` directory for more usage examples.
Private package (not published to npm)