report-log — Repository Map
บทนี้เป็นแผนที่ไฟล์ของ report-log (branch: master) — สคริปต์วิเคราะห์ + คลัง log ดิบจาก vtrc-api production
แผนที่โฟลเดอร์
report-log/ (branch: master)
├── app.js # entrypoint เดียว — IIFE วิเคราะห์ log
├── package.json # moment เท่านั้น
├── users.json # array UUID 9,486 รายการ ("user จุฬา")
├── .gitignore # `# *.log` comment ปิด — อนุญาต commit log
├── request_2023-02-17.log # วันแรก
├── request_2023-02-18.log
│ ... # รวม 63 ไฟล์ contiguous
└── request_2023-04-20.log # วันสุดท้ายไม่มี src/, routes/, README, Dockerfile, package-lock.json
นับไฟล์: ls request_*.log | wc -l → 63 (ไม่ใช่ 50 ตามเอกสารเก่า — แก้ในเล่มนี้)
app.js — สัญลักษณ์ทั้งหมด
| Symbol | บทบาท | Citation |
|---|---|---|
dateStart | วันเริ่ม hard-code "2023-02-17" | app.js:4 |
web | device apikey ของ WEB | app.js:6 = fd77b56f-1489-4fb1-a094-a614f0d16198 |
mobile | device apikey ของ MOBILE | app.js:7 = 346155c3-cea8-41f3-a9a0-305d0cc7ccf4 |
array[] | 31 GraphQL substring patterns ที่ต้องการนับ | app.js:9-47 |
users | require("./users.json") | app.js:49 |
menu[] | 31 ป้ายเมนูไทย (1:1 กับ array) | app.js:51-83 |
readData | อ่านไฟล์ 1 วัน → setData | app.js:85-88 |
setData | แกนวิเคราะห์ + จัด type JM/JW/OM/OW | app.js:90-148 |
setVerticalData | pivot CSV — ไม่ถูกเรียกจาก IIFE | app.js:150-206 |
| IIFE | loop วันที่, อ่าน log; CSV export comment ปิด | app.js:208-230 |
Mapping apikey → APP_TYPE ใน vtrc-api
ค่า web / mobile ใน app.js:6-7 ตรงกับ API_DEVICE_KEY ของ vtrc-api:
| apikey (header) | APP_TYPE | Citation |
|---|---|---|
fd77b56f-1489-4fb1-a094-a614f0d16198 | WEB | vtrc-api/api/src/config.js (API_DEVICE_KEY WEB) |
346155c3-cea8-41f3-a9a0-305d0cc7ccf4 | MOBILE | vtrc-api/api/src/config.js (API_DEVICE_KEY MOBILE) |
array[] ↔ menu[] (31 คู่)
ลำดับ index ต้องตรงกัน — menu[count] ถูกใช้ตอน count++ ใน loop ของ array (app.js:94-145)
| # | Pattern ใน array (ย่อ) | Label ใน menu | Citation |
|---|---|---|---|
| 0 | sendVerifyCode(citizenId: | verifyUser,verifyUser | app.js:10,52 |
| 1 | login | เข้าสู่ระบบ,Login | app.js:11,53 |
| 2 | fetchCountAllNotification | แจ้งเตือน,/notification | app.js:12,54 |
| 3 | fetchListPost | ข่าวสาร,/news | app.js:13,55 |
| 4 | query ($wdHospitalId: ID, | รายการเบิกทั้งหมด,/hospital/search | app.js:15,56 |
| 5 | fetchMedicalExpensesLicensee(empCode: $empCode) | ผู้มีสิทธิเบิกค่ารักษาพยาบาล,/hospital/create | app.js:16,57 |
| 6 | "category":"NEWS" | ข่าวสารการเบิกค่ารักษาพยาบาล,/hospital/News | app.js:17,58 |
| 7 | fetchAllProvidentFundDetail | ข้อมูลกองทุนสำรองเลี้ยงชีพ,/Fund/Detail | app.js:19,59 |
| 8 | "category":"PROVIDENTFUND" | ข่าวสารกองทุนสำรองเลี้ยงชีพ,/Fund/News | app.js:20,60 |
| 9 | fetchLeaveDocumentList | ค่าการศึกษาบุตร,/childEducationFee | app.js:23,61 |
| 10 | fetchLeaveDayAll | รายการขอลาทั้งหมด,/Leave/search | app.js:24,62 |
| 11 | fetchMasterConfigTypeLeave | เพิ่มคำขอลา,Leave/day | app.js:25,63 |
| 12 | timeAttendanceByDate | คู่มือการใช้งาน,Leave/LeaveManual | app.js:26,64 |
| 13 | dropDownSlipPayment | แสดงเวลาเข้า-ออก,/timeAttendance | app.js:27,65 |
| 14 | docGroupId":"4c2df2e2-... | เอกสารเกี่ยวกับเงินได้,/slip | app.js:29,66 |
| 15 | docGroupId":"8526a141-... | ประกาศ,/policy/dashboard/4c2df2e2-... | app.js:30,67 |
| 16 | docGroupId": "5ee299a1-... | แถลงการณ์,/policy/dashboard/8526a141-... | app.js:31,68 |
| 17 | docGroupId": "edbba2e2-... | คำสั่ง,/policy/dashboard/5ee299a1-... | app.js:32,69 |
| 18 | fetchCourse | แบบฟอร์ม,/policy/dashboard/edbba2e2-... | app.js:33,70 |
| 19 | fetchListOrganizationGroup | หลักสูตร,/course | app.js:34,71 |
| 20 | fetchEmployeeDetail | ข้อมูลลิงก์หน่วยงาน,/abouts | app.js:36,72 |
| 21 | changePassword | ข้อมูลส่วนตัว,/profile/list | app.js:37,73 |
| 22 | ***********M************** | เปลี่ยนรหัสผ่าน,/profile/resetPassword | app.js:38,74 |
| 23 | ***********M************** | เบอร์โทรศัพท์ใหม่,/profile/FormPhone | app.js:39,75 |
| 24 | licenseExpirationDate ... fetchEmployeeEmplGroup | ข้อมูลบุคลากร,/employeeRegistration/detail | app.js:40,76 |
| 25 | fetchEmployeeProfileHistory | ประวัติการทำงาน,/employeeRegistration/workHistory | app.js:41,77 |
| 26 | remark ... fetchAddress | ข้อมูลที่อยู่,/employeeRegistration/address | app.js:42,78 |
| 27 | licenseExpirationDate ... fetchEmployeeFamily | สมาชิกในครอบครัว/สิทธิรักษาพยาบาล,... | app.js:43,79 |
| 28 | fetchEmployeeBankAccount | ข้อมูลการเงิน,/employeeRegistration/payment | app.js:44,80 |
| 29 | dropdownListRelation | ค่าลดหย่อนภาษี,/employeeRegistration/tax | app.js:45,81 |
| 30 | fetchListContactUsCategory | ข้อมูลติดต่อภายใน,/contact | app.js:46,82 |
หมายเหตุ: บางคู่ pattern↔menu ดูไม่ตรง semantic (เช่น index 9–13) — เอกสารนี้บันทึกตามที่ commit ไว้ ไม่แก้ความหมายทางธุรกิจโดยไม่มีหลักฐานเพิ่ม
Placeholder ***********M************** ที่ index 22–23 จะ match ยากมากใน log จริง — อาจเป็น marker ที่ลืมแทน pattern จริง
users.json
| Property | Value | Citation |
|---|---|---|
| โครงสร้าง | JSON array ของ UUID strings | users.json:1 |
| จำนวน | 9,486 UUIDs | python json.load → 9486 |
| บทบาทในโค้ด | filter "user จุฬา only" (JMM/JWW) vs อื่น (OMM/OWW) | app.js:124-142 |
| แหล่งที่มา | ไม่มี README / metadata ใน repo | — UNVERIFIED |
.gitignore และนโยบาย log
# Log files
# *.log(report-log/.gitignore:16-17) — บรรทัด ignore ถูก comment ปิด ทำให้ไฟล์ *.log commit ได้โดยตั้งใจ — ดู SEC-REPORTLOG-02
แหล่งที่มาของไฟล์ log (ยืนยันจากเนื้อหา)
ทุกบรรทัดตัวอย่างมี:
host":"vtrcapi.redcross.or.th"— production GraphQL hostapikeyเป็น UUID ของ WEB หรือ MOBILE ตามตารางด้านบนauthorization":"_REPLACED_"— ตรงกับ redaction ของGraphQLLogging
ตัวอย่างบรรทัดแรกของ request_2023-04-20.log:1:
4/20/2023, 12:00:05 AM - [INFO] {"query":" mutation { createPostRead(...)",
"headers":{"x-real-ip":"...","host":"vtrcapi.redcross.or.th","apikey":"346155c3-...",
"authorization":"_REPLACED_",...},
"from":{"appId":"88599de2-...","userId":"73d63803-..."}}ยืนยันว่าเป็น export จาก request logging ของ vtrc-api ไม่ใช่ log ของ report-log เอง