7cd8cfde0a
A-3 migrations 319-323 (news_sources 9컬럼 + source_channel 'crawl' + process_stage 'fulltext' + source_health) A-1 조건부 GET(ETag/Last-Modified 그대로 재전송)+콘텐츠 해시 변경감지, A-4 politeness 코어(per-domain 직렬+robots+정직UA), A-2+A-7 fulltext_worker(4-tier 재사용·NAS crawl_raw gzip 보존·격하 경로·03:40 reconcile 안전망), A-5 circuit breaker(3/10 임계, enabled 미터치), A-6 포털 전재 2차 dedup(제목+3일, 12자 게이트). 기존 소스 fulltext_policy='none' 기본 = 무회귀. plan crawl-24x7-1, 예외 박제 crawl-24x7-exec1-20260610.md
20 lines
1.0 KiB
SQL
20 lines
1.0 KiB
SQL
-- A-5 (plan crawl-24x7-1): 소스 건강 — 소스별 실패 격리 기록 + circuit breaker.
|
|
-- 한 소스가 죽어도 나머지 영향 0. silent skip 누적 방지의 가시성 기반 (A-8 패널이 읽음).
|
|
-- circuit_state: closed(정상) / open(연속 실패로 지수 backoff 중) / disabled(M회 초과, 수동 복구 대상)
|
|
-- empty_streak : 200 인데 entries 0 인 연속 fetch 횟수 (피드 부패 감시 — 304/해시동일은 미집계)
|
|
CREATE TABLE IF NOT EXISTS source_health (
|
|
id SERIAL PRIMARY KEY,
|
|
source_id INTEGER NOT NULL REFERENCES news_sources(id) ON DELETE CASCADE,
|
|
consecutive_failures INTEGER NOT NULL DEFAULT 0,
|
|
total_fetches BIGINT NOT NULL DEFAULT 0,
|
|
total_failures BIGINT NOT NULL DEFAULT 0,
|
|
last_success_at TIMESTAMPTZ,
|
|
last_error TEXT,
|
|
last_error_at TIMESTAMPTZ,
|
|
last_fetch_items INTEGER,
|
|
empty_streak INTEGER NOT NULL DEFAULT 0,
|
|
circuit_state VARCHAR(10) NOT NULL DEFAULT 'closed',
|
|
circuit_opened_at TIMESTAMPTZ,
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|