diff --git a/src/pages/infra/statusVisual.js b/src/pages/infra/statusVisual.js index 324281b..bd44c53 100644 --- a/src/pages/infra/statusVisual.js +++ b/src/pages/infra/statusVisual.js @@ -29,6 +29,8 @@ export function workerStateLabel(w) { return '장중'; case 'market_closed': return '휴장'; + case 'fetching': + return '수집 중'; default: return '온라인'; } @@ -54,6 +56,7 @@ export const WORKER_TITLES = { 'insta-render': 'Insta Render', 'task-watcher': 'Task Watcher', ai_trade: 'AI Trade', + 'naver-fetch': 'Naver Fetch', }; export function workerTitle(name) { @@ -65,5 +68,6 @@ export function kindLabel(kind) { if (kind === 'render') return '렌더 워커'; if (kind === 'watcher') return '작업 감시'; if (kind === 'trader') return '트레이딩'; + if (kind === 'fetcher') return '수집 워커'; return kind || ''; } diff --git a/src/pages/infra/statusVisual.test.js b/src/pages/infra/statusVisual.test.js index 33ea250..a833d1e 100644 --- a/src/pages/infra/statusVisual.test.js +++ b/src/pages/infra/statusVisual.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import { linkColor, workerStateLabel, workerStatus, workerColor, workerTitle } from './statusVisual'; +import { linkColor, workerStateLabel, workerStatus, workerColor, workerTitle, kindLabel } from './statusVisual'; describe('statusVisual', () => { it('maps link status to theme colors', () => { @@ -22,6 +22,18 @@ describe('statusVisual', () => { expect(workerStateLabel({ alive: true, state: 'market_open' })).toBe('장중'); }); + it('labels a fetching worker as collecting', () => { + expect(workerStateLabel({ alive: true, state: 'fetching' })).toBe('수집 중'); + }); + + it('maps kind to a one-line role label', () => { + expect(kindLabel('render')).toBe('렌더 워커'); + expect(kindLabel('watcher')).toBe('작업 감시'); + expect(kindLabel('trader')).toBe('트레이딩'); + expect(kindLabel('fetcher')).toBe('수집 워커'); + expect(kindLabel('unknown')).toBe('unknown'); + }); + it('derives worker status with dead-letter and paused precedence', () => { expect(workerStatus({ alive: false })).toBe('down'); expect(workerStatus({ alive: true, state: 'paused' })).toBe('paused'); @@ -37,6 +49,7 @@ describe('statusVisual', () => { it('humanizes worker names', () => { expect(workerTitle('insta-render')).toBe('Insta Render'); expect(workerTitle('ai_trade')).toBe('AI Trade'); + expect(workerTitle('naver-fetch')).toBe('Naver Fetch'); expect(workerTitle('unknown-x')).toBe('unknown-x'); }); });