system.tsβ’3.56 kB
import {
SystemHealthRequest,
SystemHealthResponse,
McpResponse
} from '../types/index.js'
export class SystemTools {
async handleTool(name: string, args: any): Promise<McpResponse> {
switch (name) {
case 'system.health':
return await this.getHealth(args as SystemHealthRequest)
default:
throw new Error(`Unknown system tool: ${name}`)
}
}
private async getHealth(request: SystemHealthRequest): Promise<McpResponse<SystemHealthResponse>> {
try {
const health = await this.checkSystemHealth()
return {
success: true,
data: health,
metadata: {
timestamp: new Date().toISOString(),
requestId: `health_${Date.now()}`
}
}
} catch (error) {
return {
success: false,
error: {
code: 'HEALTH_CHECK_ERROR',
message: error instanceof Error ? error.message : String(error)
},
metadata: {
timestamp: new Date().toISOString()
}
}
}
}
private async checkSystemHealth(): Promise<SystemHealthResponse> {
const startTime = process.uptime()
const uptime = Math.floor(startTime)
// Check dependencies
const dependencies = {
'aura-adapter': await this.checkAuraAdapter(),
'guard-engine': await this.checkGuardEngine(),
'rpc-ethereum': await this.checkRpcEndpoint('ethereum'),
'rpc-base': await this.checkRpcEndpoint('base'),
'rpc-arbitrum': await this.checkRpcEndpoint('arbitrum')
}
// Determine overall status
const allHealthy = Object.values(dependencies).every(dep => dep.status === 'ok')
const status = allHealthy ? 'ok' : 'degraded'
return {
status,
version: '0.1.0',
time: new Date().toISOString(),
uptime,
dependencies
}
}
private async checkAuraAdapter(): Promise<{ status: 'ok' | 'error', latency?: number, lastCheck?: string }> {
const startTime = Date.now()
try {
// This would check if AURA adapter is working
// For now, simulate a check
await new Promise(resolve => setTimeout(resolve, 50))
return {
status: 'ok',
latency: Date.now() - startTime,
lastCheck: new Date().toISOString()
}
} catch (error) {
return {
status: 'error',
lastCheck: new Date().toISOString()
}
}
}
private async checkGuardEngine(): Promise<{ status: 'ok' | 'error', latency?: number, lastCheck?: string }> {
const startTime = Date.now()
try {
// This would check if Guard Engine is working
// For now, simulate a check
await new Promise(resolve => setTimeout(resolve, 10))
return {
status: 'ok',
latency: Date.now() - startTime,
lastCheck: new Date().toISOString()
}
} catch (error) {
return {
status: 'error',
lastCheck: new Date().toISOString()
}
}
}
private async checkRpcEndpoint(chain: string): Promise<{ status: 'ok' | 'error', latency?: number, lastCheck?: string }> {
const startTime = Date.now()
try {
// This would check RPC endpoint health
// For now, simulate a check
await new Promise(resolve => setTimeout(resolve, 100 + Math.random() * 200))
return {
status: 'ok',
latency: Date.now() - startTime,
lastCheck: new Date().toISOString()
}
} catch (error) {
return {
status: 'error',
lastCheck: new Date().toISOString()
}
}
}
}