77일차 실행 기록 분석: 실습 15개 · 강의(개요 30장 · 단계 문서 · 4단계 정리 · 05 바이브), 정답본 LAB-A · answers · VIBE-A · tlog 포함
This commit is contained in:
1 parent
036eae1c6a
commit
dcd4cdd66b
148 files changed
+40344
No files matched your search
@@ -0,0 +1,76 @@
|
||||
{
|
||||
"webhook": "my-log-report",
|
||||
"cases": [
|
||||
{
|
||||
"name": "날짜별 · 월요일",
|
||||
"request": "requests/two-weeks.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"by_day.2026-10-26.total": 70,
|
||||
"by_day.2026-10-26.errors": 16,
|
||||
"by_day.2026-10-26.error_rate": 0.2286
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "날짜별 · 목요일",
|
||||
"request": "requests/two-weeks.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"by_day.2026-10-29.total": 97,
|
||||
"by_day.2026-10-29.errors": 5
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "날짜는 10일",
|
||||
"request": "requests/two-weeks.json",
|
||||
"expect": {
|
||||
"contains": {
|
||||
"by_day": [
|
||||
"\"2026-10-19\""
|
||||
]
|
||||
},
|
||||
"not_contains": {
|
||||
"by_day": [
|
||||
"\"2026-10-24\"",
|
||||
"\"2026-10-25\""
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "릴리스별 다시 묻기 · 1.2.0",
|
||||
"request": "requests/two-weeks.json",
|
||||
"expect": {
|
||||
"contains": {
|
||||
"by_release": [
|
||||
"\"1.2.0\": {\"answers\": 8, \"repeats\": 5, \"repeat_rate\": 0.625}"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "릴리스별 다시 묻기 · 1.0.0 · 1.1.0",
|
||||
"request": "requests/two-weeks.json",
|
||||
"expect": {
|
||||
"contains": {
|
||||
"by_release": [
|
||||
"\"1.0.0\": {\"answers\": 402, \"repeats\": 19, \"repeat_rate\": 0.0473}"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "1.1.0",
|
||||
"request": "requests/two-weeks.json",
|
||||
"expect": {
|
||||
"contains": {
|
||||
"by_release": [
|
||||
"\"1.1.0\": {\"answers\": 181, \"repeats\": 14, \"repeat_rate\": 0.0773}"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"webhook": "my-log-report",
|
||||
"cases": [
|
||||
{
|
||||
"name": "두 주 · 단계별 p95",
|
||||
"request": "requests/two-weeks.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"steps.faq_ms.p95": 39,
|
||||
"steps.answer_ms.p95": 2509,
|
||||
"steps.answer_ms.p50": 1179
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "두 주 · 단계마다 잰 실행 수",
|
||||
"request": "requests/two-weeks.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"steps.faq_ms.runs": 646,
|
||||
"steps.answer_ms.runs": 596
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "월요일 · FAQ 단계가 느림",
|
||||
"request": "requests/monday.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"steps.faq_ms.p95": 1000,
|
||||
"steps.answer_ms.p95": 2482
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "두 주 · 비용",
|
||||
"request": "requests/two-weeks.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"cost_usd": 0.07836,
|
||||
"cost_per_run": 0.000118,
|
||||
"llm_calls": 596
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "빈 기간 · 비용 0",
|
||||
"body": {
|
||||
"from": "2026-11-02",
|
||||
"to": "2026-11-06"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"cost_usd": 0,
|
||||
"cost_per_run": 0,
|
||||
"llm_calls": 0,
|
||||
"steps.faq_ms.p95": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"webhook": "my-log-report",
|
||||
"before": [
|
||||
{
|
||||
"url": "http://localhost:8800/logs-reset",
|
||||
"body": {}
|
||||
}
|
||||
],
|
||||
"cases": [
|
||||
{
|
||||
"name": "하루 · from = to (포함)",
|
||||
"request": "requests/monday.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"total": 70,
|
||||
"errors": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "빈 기간 · 0건이어도 200",
|
||||
"body": {
|
||||
"from": "2026-11-02",
|
||||
"to": "2026-11-06"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"total": 0,
|
||||
"errors": 0,
|
||||
"error_rate": 0,
|
||||
"p95_ms": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "주말 · 실행이 없는 날",
|
||||
"body": {
|
||||
"from": "2026-10-24",
|
||||
"to": "2026-10-25"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"total": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "기간을 비우면 전체",
|
||||
"body": {},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"total": 666
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "source seed · 두 주 기록만",
|
||||
"body": {
|
||||
"from": "2026-10-19",
|
||||
"to": "2026-10-30",
|
||||
"source": "seed"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"total": 666
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "source live · 오늘 실습 기록 (아직 없음)",
|
||||
"body": {
|
||||
"source": "live"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"total": 0,
|
||||
"error_rate": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"webhook": "my-log-report",
|
||||
"cases": [
|
||||
{
|
||||
"name": "두 주 전체",
|
||||
"request": "requests/two-weeks.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"total": 666,
|
||||
"errors": 21,
|
||||
"error_rate": 0.0315,
|
||||
"p50_ms": 1205,
|
||||
"p95_ms": 2537
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "두 주 · 갈래별",
|
||||
"request": "requests/two-weeks.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"by_route.자동 답변": 591,
|
||||
"by_route.담당자 연결": 34,
|
||||
"by_route.잠시 후": 20,
|
||||
"by_route.오류": 21
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "첫 주",
|
||||
"request": "requests/week1.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"total": 309,
|
||||
"errors": 0,
|
||||
"error_rate": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "둘째 주",
|
||||
"request": "requests/week2.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"total": 357,
|
||||
"errors": 21,
|
||||
"error_rate": 0.0588,
|
||||
"p95_ms": 2598
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "10월 26일 하루",
|
||||
"request": "requests/monday.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"total": 70,
|
||||
"errors": 16
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"webhook": "my-log-report",
|
||||
"cases": [
|
||||
{
|
||||
"name": "두 주 · 다시 묻는 비율이 가장 높은 주제",
|
||||
"request": "requests/two-weeks.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"repeat_topics.0.topic": "프린터",
|
||||
"repeat_topics.0.answers": 81,
|
||||
"repeat_topics.0.repeats": 8,
|
||||
"repeat_topics.0.repeat_rate": 0.0988
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "두 주 · 수로는 비밀번호가 가장 많지만 비율은 2위",
|
||||
"request": "requests/two-weeks.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"repeat_topics.1.topic": "비밀번호",
|
||||
"repeat_topics.1.repeats": 9,
|
||||
"repeat_topics.1.repeat_rate": 0.0647
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "두 주 · 다시 물은 주제는 6개",
|
||||
"request": "requests/two-weeks.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"repeat_topics.5.topic": "설치",
|
||||
"repeat_topics.5.repeat_rate": 0.0328
|
||||
},
|
||||
"not_contains": {
|
||||
"repeat_topics": [
|
||||
"와이파이"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "첫 주 · 설치는 다시 묻지 않음",
|
||||
"request": "requests/week1.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"repeat_topics.0.topic": "프린터"
|
||||
},
|
||||
"not_contains": {
|
||||
"repeat_topics": [
|
||||
"설치"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "앞의 지표는 그대로",
|
||||
"request": "requests/two-weeks.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"total": 666,
|
||||
"failures.0.count": 16,
|
||||
"anomalies.0.hour": "2026-10-26T09"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"webhook": "my-log-summary",
|
||||
"cases": [
|
||||
{
|
||||
"name": "요약 · 숫자는 통계에 있는 것만",
|
||||
"request": "requests/two-weeks.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"numbers_ok": true,
|
||||
"top_topic": "와이파이",
|
||||
"worst_hour": "2026-10-26T09"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "요약 · 주제와 시간대를 말함",
|
||||
"request": "requests/two-weeks.json",
|
||||
"expect": {
|
||||
"contains": {
|
||||
"summary": [
|
||||
"와이파이"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "요약 · 날짜",
|
||||
"request": "requests/two-weeks.json",
|
||||
"expect": {
|
||||
"contains": {
|
||||
"summary": [
|
||||
"10월 26일",
|
||||
"10-26",
|
||||
"26일"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"webhook": "my-log-report",
|
||||
"cases": [
|
||||
{
|
||||
"name": "첫 주 · 오류 0 → 이상 없음",
|
||||
"request": "requests/week1.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"error_rate": 0,
|
||||
"anomalies": []
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "둘째 주 · 기준 0.0588 × 3",
|
||||
"request": "requests/week2.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"error_rate": 0.0588,
|
||||
"anomalies.0.hour": "2026-10-26T09",
|
||||
"anomalies.1.hour": "2026-10-29T15"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "월요일만 · 기준 0.2286 × 3",
|
||||
"request": "requests/monday.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"error_rate": 0.2286,
|
||||
"anomalies.0.hour": "2026-10-26T09",
|
||||
"anomalies.0.errors": 16
|
||||
},
|
||||
"not_contains": {
|
||||
"anomalies": [
|
||||
"2026-10-29T15"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "목요일만 · 15시만",
|
||||
"body": {
|
||||
"from": "2026-10-29",
|
||||
"to": "2026-10-29"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"error_rate": 0.0515,
|
||||
"anomalies.0.hour": "2026-10-29T15",
|
||||
"anomalies.0.total": 7
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "두 주 · 기준 0.0315 × 3",
|
||||
"request": "requests/two-weeks.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"error_rate": 0.0315,
|
||||
"anomalies.0.hour": "2026-10-26T09",
|
||||
"anomalies.1.hour": "2026-10-29T15"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"webhook": "my-log-report",
|
||||
"cases": [
|
||||
{
|
||||
"name": "예제 1 · 가장 많은 실패",
|
||||
"request": "requests/two-weeks.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"failures.0.node": "Search FAQ",
|
||||
"failures.0.message": "timeout of 1000ms exceeded",
|
||||
"failures.0.count": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "예제 1 · 두 번째 실패",
|
||||
"request": "requests/two-weeks.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"failures.1.node": "Answer",
|
||||
"failures.1.count": 5
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "예제 1 · 답하지 못한 주제",
|
||||
"request": "requests/two-weeks.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"unanswered_topics.0.topic": "와이파이",
|
||||
"unanswered_topics.0.count": 34
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "예제 2 · 이상 시간대 1",
|
||||
"request": "requests/two-weeks.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"anomalies.0.hour": "2026-10-26T09",
|
||||
"anomalies.0.total": 16,
|
||||
"anomalies.0.errors": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "예제 2 · 이상 시간대 2",
|
||||
"request": "requests/two-weeks.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"anomalies.1.hour": "2026-10-29T15",
|
||||
"anomalies.1.total": 7,
|
||||
"anomalies.1.errors": 5
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "예제 2 · 첫 주에는 없음",
|
||||
"request": "requests/week1.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"anomalies": []
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"webhook": "my-weekly",
|
||||
"cases": [
|
||||
{
|
||||
"name": "주간 보고 · 숫자",
|
||||
"request": "requests/weekly.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"total": 357,
|
||||
"error_rate": 0.0588,
|
||||
"slo_ok": false,
|
||||
"numbers_ok": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "주간 보고 · 절",
|
||||
"request": "requests/weekly.json",
|
||||
"expect": {
|
||||
"contains": {
|
||||
"markdown": [
|
||||
"## 숫자"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "주간 보고 · 문제 절",
|
||||
"request": "requests/weekly.json",
|
||||
"expect": {
|
||||
"contains": {
|
||||
"markdown": [
|
||||
"## 문제"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "주간 보고 · 다음 할 일",
|
||||
"request": "requests/weekly.json",
|
||||
"expect": {
|
||||
"contains": {
|
||||
"markdown": [
|
||||
"## 다음 할 일"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "주간 보고 · 비교 숫자",
|
||||
"request": "requests/weekly.json",
|
||||
"expect": {
|
||||
"contains": {
|
||||
"markdown": [
|
||||
"| 요청 | 309 | 357 |"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "주간 보고 · 이상 시간대",
|
||||
"request": "requests/weekly.json",
|
||||
"expect": {
|
||||
"contains": {
|
||||
"markdown": [
|
||||
"2026-10-26 09시"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "주간 보고 · 와이파이",
|
||||
"request": "requests/weekly.json",
|
||||
"expect": {
|
||||
"contains": {
|
||||
"markdown": [
|
||||
"FAQ에 '와이파이' 항목 추가"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
{
|
||||
"webhook": "my-slo-alert",
|
||||
"before": [
|
||||
{
|
||||
"url": "http://localhost:8800/alerts-clear",
|
||||
"body": {}
|
||||
}
|
||||
],
|
||||
"cases": [
|
||||
{
|
||||
"name": "둘째 주 · SLO 못 지킴 → 알림",
|
||||
"request": "requests/week2.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"ok": false,
|
||||
"breaches": [
|
||||
"error_rate",
|
||||
"unanswered_rate"
|
||||
],
|
||||
"alert": "sent"
|
||||
},
|
||||
"contains": {
|
||||
"message": [
|
||||
"error_rate 0.0588 > 0.01"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "알림 확인 (high · slo)",
|
||||
"body": {},
|
||||
"url": "http://localhost:8800/alerts/latest",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"workflow": "slo",
|
||||
"severity": "high",
|
||||
"reason": "slo"
|
||||
},
|
||||
"contains": {
|
||||
"message": [
|
||||
"unanswered_rate"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "10분 안에 다시 확인 → 보내지 않음",
|
||||
"request": "requests/week2.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"ok": false,
|
||||
"alert": "suppressed"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "slo 알림은 1개",
|
||||
"body": {
|
||||
"workflow": "slo"
|
||||
},
|
||||
"url": "http://localhost:8800/alerts/list",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"count": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "기준 안이면 알림 없음",
|
||||
"body": {
|
||||
"from": "2026-10-19",
|
||||
"to": "2026-10-23",
|
||||
"slo": {
|
||||
"unanswered_rate": 0.06
|
||||
}
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"ok": true,
|
||||
"breaches": [],
|
||||
"alert": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "그래도 알림은 1개",
|
||||
"body": {
|
||||
"workflow": "slo"
|
||||
},
|
||||
"url": "http://localhost:8800/alerts/list",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"count": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
{
|
||||
"webhook": "my-log-report",
|
||||
"cases": [
|
||||
{
|
||||
"name": "고치기 전 · 느린 FAQ · 1초에 끊김",
|
||||
"body": {
|
||||
"tag": "before",
|
||||
"source": "live"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"total": 10,
|
||||
"errors": 10
|
||||
},
|
||||
"range": {
|
||||
"steps.faq_ms.p50": [
|
||||
900,
|
||||
1600
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "고친 뒤 · 느린 FAQ · 기다려서 답함",
|
||||
"body": {
|
||||
"tag": "after",
|
||||
"source": "live"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"total": 10,
|
||||
"errors": 0
|
||||
},
|
||||
"range": {
|
||||
"steps.faq_ms.p50": [
|
||||
1150,
|
||||
3500
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "고친 뒤 · 평소 FAQ · 기다릴 일이 없음",
|
||||
"body": {
|
||||
"tag": "normal",
|
||||
"source": "live"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"total": 10,
|
||||
"errors": 0
|
||||
},
|
||||
"range": {
|
||||
"steps.faq_ms.p50": [
|
||||
0,
|
||||
400
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "고친 뒤 · 답 단계는 FAQ 속도와 상관없음",
|
||||
"body": {
|
||||
"tag": "normal",
|
||||
"source": "live"
|
||||
},
|
||||
"expect": {
|
||||
"range": {
|
||||
"steps.answer_ms.p50": [
|
||||
300,
|
||||
6000
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"webhook": "my-log-report",
|
||||
"cases": [
|
||||
{
|
||||
"name": "둘째 주 · SLO 못 지킴",
|
||||
"request": "requests/week2.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"slo.ok": false,
|
||||
"unanswered_rate": 0.0476
|
||||
},
|
||||
"contains": {
|
||||
"slo": [
|
||||
"\"error_rate\"",
|
||||
"\"unanswered_rate\""
|
||||
]
|
||||
},
|
||||
"not_contains": {
|
||||
"slo": [
|
||||
"\"p95_ms\"]"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "첫 주 · 답 못 함만",
|
||||
"body": {
|
||||
"from": "2026-10-19",
|
||||
"to": "2026-10-23"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"slo.ok": false,
|
||||
"slo.breaches": [
|
||||
"unanswered_rate"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "기준을 바꾸면 · 첫 주",
|
||||
"body": {
|
||||
"from": "2026-10-19",
|
||||
"to": "2026-10-23",
|
||||
"slo": {
|
||||
"unanswered_rate": 0.06
|
||||
}
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"slo.ok": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "고친 뒤 · 오류 · 답 못 함 기준은 지킴",
|
||||
"body": {
|
||||
"tag": "after",
|
||||
"source": "live"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"error_rate": 0,
|
||||
"unanswered_rate": 0
|
||||
},
|
||||
"not_contains": {
|
||||
"slo.breaches": [
|
||||
"error_rate",
|
||||
"unanswered_rate"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"webhook": "my-log-report",
|
||||
"cases": [
|
||||
{
|
||||
"name": "고치기 전 · 10건 모두 실패",
|
||||
"body": {
|
||||
"tag": "before",
|
||||
"source": "live"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"total": 10,
|
||||
"errors": 10
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "고치기 전 · FAQ timeout",
|
||||
"body": {
|
||||
"tag": "before",
|
||||
"source": "live"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"failures.0.node": "Search FAQ",
|
||||
"failures.0.count": 10
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "고친 뒤 · 오류 없음",
|
||||
"body": {
|
||||
"tag": "after",
|
||||
"source": "live"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"total": 10,
|
||||
"errors": 0,
|
||||
"by_route.자동 답변": 10
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "고친 뒤 · 답하지 못한 주제 없음",
|
||||
"body": {
|
||||
"tag": "after",
|
||||
"source": "live"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"unanswered_topics": []
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
{
|
||||
"webhook": "my-helpdesk",
|
||||
"before": [
|
||||
{
|
||||
"url": "http://localhost:8800/admin/fault",
|
||||
"body": {
|
||||
"faq": "slow",
|
||||
"slow_seconds": 1.2
|
||||
}
|
||||
}
|
||||
],
|
||||
"after": [
|
||||
{
|
||||
"url": "http://localhost:8800/admin/fault",
|
||||
"body": {
|
||||
"faq": "ok",
|
||||
"tickets": "ok"
|
||||
}
|
||||
}
|
||||
],
|
||||
"cases": [
|
||||
{
|
||||
"name": "after · 회의실 와이파이가 안 ",
|
||||
"body": {
|
||||
"question": "회의실 와이파이가 안 잡혀요",
|
||||
"user": "이준호",
|
||||
"tag": "after"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"route": "자동 답변",
|
||||
"status": "success"
|
||||
},
|
||||
"contains": {
|
||||
"answer": [
|
||||
"CORP-WIFI",
|
||||
"사번"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "after · 사내 Wi-Fi 비밀번",
|
||||
"body": {
|
||||
"question": "사내 Wi-Fi 비밀번호가 뭐예요?",
|
||||
"user": "박서연",
|
||||
"tag": "after"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"route": "자동 답변",
|
||||
"status": "success"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "after · 와이파이가 자주 끊겨요",
|
||||
"body": {
|
||||
"question": "와이파이가 자주 끊겨요",
|
||||
"user": "최유진",
|
||||
"tag": "after"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"route": "자동 답변",
|
||||
"status": "success"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "after · 노트북이 와이파이에 연",
|
||||
"body": {
|
||||
"question": "노트북이 와이파이에 연결이 안 돼요",
|
||||
"user": "한지훈",
|
||||
"tag": "after"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"route": "자동 답변",
|
||||
"status": "success"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "after · 손님용 wifi도 있나",
|
||||
"body": {
|
||||
"question": "손님용 wifi도 있나요?",
|
||||
"user": "김민지",
|
||||
"tag": "after"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"route": "자동 답변",
|
||||
"status": "success"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "after · VPN이 자꾸 끊겨요",
|
||||
"body": {
|
||||
"question": "VPN이 자꾸 끊겨요",
|
||||
"user": "정우성",
|
||||
"tag": "after"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"route": "자동 답변",
|
||||
"status": "success"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "after · 비밀번호를 잊어버렸어요",
|
||||
"body": {
|
||||
"question": "비밀번호를 잊어버렸어요",
|
||||
"user": "오세훈",
|
||||
"tag": "after"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"route": "자동 답변",
|
||||
"status": "success"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "after · 프린터 출력이 안 돼요",
|
||||
"body": {
|
||||
"question": "프린터 출력이 안 돼요",
|
||||
"user": "윤하늘",
|
||||
"tag": "after"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"route": "자동 답변",
|
||||
"status": "success"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "after · 메일함 용량이 꽉 찼대",
|
||||
"body": {
|
||||
"question": "메일함 용량이 꽉 찼대요",
|
||||
"user": "강민수",
|
||||
"tag": "after"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"route": "자동 답변",
|
||||
"status": "success"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "after · 새 프로그램 설치는 어",
|
||||
"body": {
|
||||
"question": "새 프로그램 설치는 어떻게 신청하나요?",
|
||||
"user": "서지아",
|
||||
"tag": "after"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"route": "자동 답변",
|
||||
"status": "success"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"webhook": "my-helpdesk",
|
||||
"before": [
|
||||
{
|
||||
"url": "http://localhost:8800/logs-reset",
|
||||
"body": {}
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:8800/faq-reset",
|
||||
"body": {}
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:8800/admin/fault",
|
||||
"body": {
|
||||
"faq": "slow",
|
||||
"slow_seconds": 1.2
|
||||
}
|
||||
}
|
||||
],
|
||||
"after": [
|
||||
{
|
||||
"url": "http://localhost:8800/admin/fault",
|
||||
"body": {
|
||||
"faq": "ok",
|
||||
"tickets": "ok"
|
||||
}
|
||||
}
|
||||
],
|
||||
"cases": [
|
||||
{
|
||||
"name": "before · 회의실 와이파이가 안 ",
|
||||
"body": {
|
||||
"question": "회의실 와이파이가 안 잡혀요",
|
||||
"user": "이준호",
|
||||
"tag": "before"
|
||||
},
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "before · 사내 Wi-Fi 비밀번",
|
||||
"body": {
|
||||
"question": "사내 Wi-Fi 비밀번호가 뭐예요?",
|
||||
"user": "박서연",
|
||||
"tag": "before"
|
||||
},
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "before · 와이파이가 자주 끊겨요",
|
||||
"body": {
|
||||
"question": "와이파이가 자주 끊겨요",
|
||||
"user": "최유진",
|
||||
"tag": "before"
|
||||
},
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "before · 노트북이 와이파이에 연",
|
||||
"body": {
|
||||
"question": "노트북이 와이파이에 연결이 안 돼요",
|
||||
"user": "한지훈",
|
||||
"tag": "before"
|
||||
},
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "before · 손님용 wifi도 있나",
|
||||
"body": {
|
||||
"question": "손님용 wifi도 있나요?",
|
||||
"user": "김민지",
|
||||
"tag": "before"
|
||||
},
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "before · VPN이 자꾸 끊겨요",
|
||||
"body": {
|
||||
"question": "VPN이 자꾸 끊겨요",
|
||||
"user": "정우성",
|
||||
"tag": "before"
|
||||
},
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "before · 비밀번호를 잊어버렸어요",
|
||||
"body": {
|
||||
"question": "비밀번호를 잊어버렸어요",
|
||||
"user": "오세훈",
|
||||
"tag": "before"
|
||||
},
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "before · 프린터 출력이 안 돼요",
|
||||
"body": {
|
||||
"question": "프린터 출력이 안 돼요",
|
||||
"user": "윤하늘",
|
||||
"tag": "before"
|
||||
},
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "before · 메일함 용량이 꽉 찼대",
|
||||
"body": {
|
||||
"question": "메일함 용량이 꽉 찼대요",
|
||||
"user": "강민수",
|
||||
"tag": "before"
|
||||
},
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "before · 새 프로그램 설치는 어",
|
||||
"body": {
|
||||
"question": "새 프로그램 설치는 어떻게 신청하나요?",
|
||||
"user": "서지아",
|
||||
"tag": "before"
|
||||
},
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,153 @@
|
||||
{
|
||||
"webhook": "my-helpdesk",
|
||||
"before": [
|
||||
{
|
||||
"url": "http://localhost:8800/admin/fault",
|
||||
"body": {
|
||||
"faq": "ok"
|
||||
}
|
||||
}
|
||||
],
|
||||
"cases": [
|
||||
{
|
||||
"name": "normal · 회의실 와이파이가 안 ",
|
||||
"body": {
|
||||
"question": "회의실 와이파이가 안 잡혀요",
|
||||
"user": "이준호",
|
||||
"tag": "normal"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"route": "자동 답변",
|
||||
"status": "success"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "normal · 사내 Wi-Fi 비밀번",
|
||||
"body": {
|
||||
"question": "사내 Wi-Fi 비밀번호가 뭐예요?",
|
||||
"user": "박서연",
|
||||
"tag": "normal"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"route": "자동 답변",
|
||||
"status": "success"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "normal · 와이파이가 자주 끊겨요",
|
||||
"body": {
|
||||
"question": "와이파이가 자주 끊겨요",
|
||||
"user": "최유진",
|
||||
"tag": "normal"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"route": "자동 답변",
|
||||
"status": "success"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "normal · 노트북이 와이파이에 연",
|
||||
"body": {
|
||||
"question": "노트북이 와이파이에 연결이 안 돼요",
|
||||
"user": "한지훈",
|
||||
"tag": "normal"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"route": "자동 답변",
|
||||
"status": "success"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "normal · 손님용 wifi도 있나",
|
||||
"body": {
|
||||
"question": "손님용 wifi도 있나요?",
|
||||
"user": "김민지",
|
||||
"tag": "normal"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"route": "자동 답변",
|
||||
"status": "success"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "normal · VPN이 자꾸 끊겨요",
|
||||
"body": {
|
||||
"question": "VPN이 자꾸 끊겨요",
|
||||
"user": "정우성",
|
||||
"tag": "normal"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"route": "자동 답변",
|
||||
"status": "success"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "normal · 비밀번호를 잊어버렸어요",
|
||||
"body": {
|
||||
"question": "비밀번호를 잊어버렸어요",
|
||||
"user": "오세훈",
|
||||
"tag": "normal"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"route": "자동 답변",
|
||||
"status": "success"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "normal · 프린터 출력이 안 돼요",
|
||||
"body": {
|
||||
"question": "프린터 출력이 안 돼요",
|
||||
"user": "윤하늘",
|
||||
"tag": "normal"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"route": "자동 답변",
|
||||
"status": "success"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "normal · 메일함 용량이 꽉 찼대",
|
||||
"body": {
|
||||
"question": "메일함 용량이 꽉 찼대요",
|
||||
"user": "강민수",
|
||||
"tag": "normal"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"route": "자동 답변",
|
||||
"status": "success"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "normal · 새 프로그램 설치는 어",
|
||||
"body": {
|
||||
"question": "새 프로그램 설치는 어떻게 신청하나요?",
|
||||
"user": "서지아",
|
||||
"tag": "normal"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"route": "자동 답변",
|
||||
"status": "success"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in new issue
Block a user