<commit_before>import fs from 'fs';
import puppeteer from 'puppeteer';

import {
    wait,
} from '../../util';
import {
    getImpl,
    fromJSON,
} from '../..';
import imageReporter from './reporter/image';
import markdownReporter from './reporter/markdown';


interface Case {
    impl: string;
    url: string;
    check: string[];
    related: string[];
}

interface JobError {
    type: 'error';
    impl: string;
    error: Error;
}
interface JobOk extends UnwrapPromise<ReturnType<typeof doJob>> {
    type: 'ok';
}
export type JobResult = (JobError | JobOk) & { duration: number };

// `impl` 기준 사전순으로 정렬할 것
const cases: Case[] = [
    {
        impl: '경향신문',
        url: 'http://biz.khan.co.kr/khan_art_view.html?artid=201410311921301&code=920100&med=khan',
        check: ['title', 'subtitle', 'content', 'timestamp.created', 'timestamp.lastModified', 'reporters.0.name', 'reporters.0.mail'],
        related: ['#58'],
    },
    {
        impl: '국민일보',
        url: 'http://news.kmib.co.kr/article/view.asp?arcid=0008864720&code=61121111',
        check: ['title', 'content', 'timestamp.created'],
        related: ['#77'],
    },
    // TODO: 나우뉴스
    // TODO: 네이버뉴스
    // TODO: 노컷뉴스
    // TODO: 뉴데일리
    // TODO: 뉴데일리경제
    // TODO: 뉴스1
    // TODO: 뉴시스
    // TODO: 다음뉴스
    // TODO: 데일리시큐
    // TODO: 데일리안
    {
        impl: '데일리한국',
        url: 'http://daily.hankooki.com/lpage/politics/201412/dh20141219103740137430.htm',
        check: ['title', 'content', 'timestamp.created', 'reporters.0.name', 'reporters.0.mail'],
        related: ['#91'],
    },
    {
        impl: '동아일보',
        url: 'http://news.donga.com/3/03/20141107/67723014/1',
        check: ['title', 'content', 'timestamp.created', 'timestamp.lastModified'],
        related: ['#65'],
    },
    // TODO: 디스패치
    // TODO: 디지털데일리
    // TODO: 디지털타임스
    // TODO: 로이터
    // TODO: 마이데일리
    // TODO: 마이경제
    // TODO: 머니투데이
    // TODO: 문화일보
    // TODO: 미디어스
    // TODO: 미디어오늘
    // TODO: 민중의소리
    // TODO: 뷰스앤뉴스
    // TODO: 블로터닷넷
    // TODO: 서울경제
    {
        impl: '서울신문',
        url: 'http://seoul.co.kr/news/newsView.php?id=20141204500025',
        check: ['title', 'subtitle', 'content', 'timestamp.lastModified'],
        related: ['#83'],
    },
    // TODO: 세계일보
    // TODO: 스포츠경향
    // TODO: 스포츠동아
    // TODO: 스포츠서울
    // TODO: 스포츠조선
    // TODO: 스포탈코리아
    // TODO: 슬로우뉴스
    // TODO: 시사IN Live
    // TODO: 아시아경제
    // TODO: 아시아투데이
    {
        impl: '아이뉴스24',
        url: 'http://www.inews24.com/view/860573',
        check: ['title', 'subtitle', 'content', 'timestamp.created', 'timestamp.lastModified'],
        related: ['#61'],
    },
    // TODO: 여성뉴스
    // TODO: 연합뉴스
    // TODO: 오마이뉴스
    {
        impl: '월스트리트저널',
        url: 'https://realtime.wsj.com/korea/2014/10/13/%EB%B0%95%EC%9B%90%EC%88%9C-%EC%84%9C%EC%9A%B8%EC%8B%9C%EC%9E%A5-%EB%AF%B8%EA%B5%AD-%EC%96%B8%EB%A1%A0%EC%97%90-%EB%8F%99%EC%84%B1%EA%B2%B0%ED%98%BC-%EC%A7%80%EC%A7%80-%EB%B0%9C%EC%96%B8/',
        check: ['title', 'content', 'timestamp.created', 'reporters.0.name'],
        related: ['#84'],
    },
    // TODO: 이데일리
    // TODO: 일간스포츠
    // TODO: 전자신문
    // TODO: 조선비즈
    // TODO: 조선일보
    // TODO: 중앙데일리
    {
        impl: '중앙일보',
        url: 'https://news.joins.com/article/23621286',
        check: ['title', 'content', 'timestamp.created', 'timestamp.lastModified', 'reporters.0.name'],
        related: [],
    },
    {
        impl: '지디넷코리아',
        url: 'http://www.zdnet.co.kr/view/?no=20141104074223',
        check: ['title', 'content', 'timestamp.created', 'timestamp.lastModified', 'reporters.0.name'],
        related: ['#69'],
    },
    // TODO: 지지통신
    // TODO: 코리아타임스
    {
        impl: '코리아헤럴드',
        url: 'http://khnews.kheraldm.com/view.php?ud=20141111001137&md=20141111180830_BK&kr=1',
        check: [
            'title',
            'content',<commit_msg>전자신문 health check 추가 (#374)<commit_after>import fs from 'fs';
import puppeteer from 'puppeteer';

import {
    wait,
} from '../../util';
import {
    getImpl,
    fromJSON,
} from '../..';
import imageReporter from './reporter/image';
import markdownReporter from './reporter/markdown';


interface Case {
    impl: string;
    url: string;
    check: string[];
    related: string[];
}

interface JobError {
    type: 'error';
    impl: string;
    error: Error;
}
interface JobOk extends UnwrapPromise<ReturnType<typeof doJob>> {
    type: 'ok';
}
export type JobResult = (JobError | JobOk) & { duration: number };

// `impl` 기준 사전순으로 정렬할 것
const cases: Case[] = [
    {
        impl: '경향신문',
        url: 'http://biz.khan.co.kr/khan_art_view.html?artid=201410311921301&code=920100&med=khan',
        check: ['title', 'subtitle', 'content', 'timestamp.created', 'timestamp.lastModified', 'reporters.0.name', 'reporters.0.mail'],
        related: ['#58'],
    },
    {
        impl: '국민일보',
        url: 'http://news.kmib.co.kr/article/view.asp?arcid=0008864720&code=61121111',
        check: ['title', 'content', 'timestamp.created'],
        related: ['#77'],
    },
    // TODO: 나우뉴스
    // TODO: 네이버뉴스
    // TODO: 노컷뉴스
    // TODO: 뉴데일리
    // TODO: 뉴데일리경제
    // TODO: 뉴스1
    // TODO: 뉴시스
    // TODO: 다음뉴스
    // TODO: 데일리시큐
    // TODO: 데일리안
    {
        impl: '데일리한국',
        url: 'http://daily.hankooki.com/lpage/politics/201412/dh20141219103740137430.htm',
        check: ['title', 'content', 'timestamp.created', 'reporters.0.name', 'reporters.0.mail'],
        related: ['#91'],
    },
    {
        impl: '동아일보',
        url: 'http://news.donga.com/3/03/20141107/67723014/1',
        check: ['title', 'content', 'timestamp.created', 'timestamp.lastModified'],
        related: ['#65'],
    },
    // TODO: 디스패치
    // TODO: 디지털데일리
    // TODO: 디지털타임스
    // TODO: 로이터
    // TODO: 마이데일리
    // TODO: 마이경제
    // TODO: 머니투데이
    // TODO: 문화일보
    // TODO: 미디어스
    // TODO: 미디어오늘
    // TODO: 민중의소리
    // TODO: 뷰스앤뉴스
    // TODO: 블로터닷넷
    // TODO: 서울경제
    {
        impl: '서울신문',
        url: 'http://seoul.co.kr/news/newsView.php?id=20141204500025',
        check: ['title', 'subtitle', 'content', 'timestamp.lastModified'],
        related: ['#83'],
    },
    // TODO: 세계일보
    // TODO: 스포츠경향
    // TODO: 스포츠동아
    // TODO: 스포츠서울
    // TODO: 스포츠조선
    // TODO: 스포탈코리아
    // TODO: 슬로우뉴스
    // TODO: 시사IN Live
    // TODO: 아시아경제
    // TODO: 아시아투데이
    {
        impl: '아이뉴스24',
        url: 'http://www.inews24.com/view/860573',
        check: ['title', 'subtitle', 'content', 'timestamp.created', 'timestamp.lastModified'],
        related: ['#61'],
    },
    // TODO: 여성뉴스
    // TODO: 연합뉴스
    // TODO: 오마이뉴스
    {
        impl: '월스트리트저널',
        url: 'https://realtime.wsj.com/korea/2014/10/13/%EB%B0%95%EC%9B%90%EC%88%9C-%EC%84%9C%EC%9A%B8%EC%8B%9C%EC%9E%A5-%EB%AF%B8%EA%B5%AD-%EC%96%B8%EB%A1%A0%EC%97%90-%EB%8F%99%EC%84%B1%EA%B2%B0%ED%98%BC-%EC%A7%80%EC%A7%80-%EB%B0%9C%EC%96%B8/',
        check: ['title', 'content', 'timestamp.created', 'reporters.0.name'],
        related: ['#84'],
    },
    // TODO: 이데일리
    // TODO: 일간스포츠
    {
        impl: '전자신문',
        url: 'http://www.etnews.com/20191031000370?mc=ns_003_00006',
        check: ['title', 'content', 'timestamp.created', 'reporters.0.name', 'reporters.0.mail'],
        related: [],
    },
    // TODO: 조선비즈
    // TODO: 조선일보
    // TODO: 중앙데일리
    {
        impl: '중앙일보',
        url: 'https://news.joins.com/article/23621286',
        check: ['title', 'content', 'timestamp.created', 'timestamp.lastModified', 'reporters.0.name'],
        related: [],
    },
    {
        impl: '지디넷코리아',
        url: 'http://www.zdnet.co.kr/view/?no=20141104074223',
        check: ['title', 'content', 'timestamp.created', 'timestamp.lastModified', 'reporters.0.name'],
        related: ['#69'],
    },
    // TODO: 지지통신
    // TODO: 코리아타임스
    {
        impl: '코리아헤럴드',
        url: 'http://khnews.kheraldm.com/view.php?ud=20141111001137&md=20141111180830_BK&kr=1',
        check: [
            'title',
            'content',
{'fraction_non_alphanumeric': 0.1955788684900712, 'fraction_numerical': 0.06381915823654302, 'mean_word_length': 2.231638418079096, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 4, 'lorem ipsum': 0, 'www.': 5, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3927276', 'n_tokens_mistral': 3800, 'n_tokens_neox': 3948, 'n_words': 544}