#!/usr/bin/env node /** * 跨平台服务查找工具 * 用法: node scripts/service-find.js * 示例: node scripts/service-find.js nginx */ import { ServiceRouter } from '../dist/services/router.js'; import { ConfigManager } from '../dist/config/manager.js'; async function main() { const searchTerm = process.argv[2]; if (!searchTerm) { console.error('用法: node scripts/service-find.js <服务名称>'); console.error('示例: node scripts/service-find.js nginx'); process.exit(1); } const configManager = new ConfigManager(); const router = new ServiceRouter(configManager); try { const services = await router.find(searchTerm); console.log('═══════════════════════════════════════════════════════════'); console.log(` 搜索: "${searchTerm}" (找到 ${services.length} 个)`); console.log('═══════════════════════════════════════════════════════════\n'); // 按类型和状态分组 const byType: Record = {}; for (const svc of services) { if (!byType[svc.type]) byType[svc.type] = []; byType[svc.type].push(svc); } for (const [type, typeServices] of Object.entries(byType)) { const running = typeServices.filter(s => s.status === 'running').length; console.log(`\n【${type.toUpperCase()}】${typeServices.length} 个 (运行: ${running})`); for (const svc of typeServices) { const status = svc.status === 'running' ? '✅' : '⏸️ '; const ns = svc.metadata?.namespace ? `${svc.metadata.namespace}/` : ''; const ready = svc.metadata?.ready ? ` (${svc.metadata.ready})` : ''; console.log(` ${status} ${svc.server} :: ${ns}${svc.name}${ready}`); } } console.log('\n═══════════════════════════════════════════════════════════'); } finally { await router.closeAll(); } } main().catch(console.error);