ตัวนับจำนวนเข้าชมที่ทำให้แคตตาล็อกของเราเป็น 502
การจัดส่ง
หน้าที่แสดงรายการชุดเครื่องมือทุกชิ้นที่เราขาย ตอบกลับผู้เข้าชมทุกคนด้วย 502 Bad Gateway เป็นเวลาประมาณ 41 ชั่วโมงหลังเปิดตัว หน้ารายละเอียดสินค้าของแต่ละชุดเครื่องมือยังทำงานได้ หน้าแรกยังทำงานได้ การชำระเงินยังทำงานได้ ส่วนที่เสียคือบรรทัดไม่กี่บรรทัดที่ใช้ นับจำนวนการเข้าชมหน้า
บั๊ก
เซิร์ฟเวอร์ของร้านเรา นับจำนวนการเข้าชมหน้ารายละเอียดสินค้าของชุดเครื่องมือ เพื่อหาว่าคำขอเป็นของชุดเครื่องมือใด ระบบจะดึงส่วนที่สองของพาธ:
self._count_view(path.strip("/").split("/")[1] if path.count("/") >= 2 else "")
สำหรับ /kits/studio/ จะได้ค่าเป็น studio ส่วนหน้าแคตตาล็อกเอง คือ /kits/ พาธมีเครื่องหมายทับสองตัว ตัวจำกัดความปลอดภัยจึงปล่อยให้ผ่าน แต่หลังจากตัดเครื่องหมายทับออกแล้วจะเหลือเพียงส่วนเดียว และ [1] ทำให้เกิด IndexError ตัวจัดการคือ http.server มาตรฐานของ Python: เมื่อเกิดข้อยกเว้นใน do_GET การเชื่อมต่อจะถูกปิดโดยไม่มีการตอบกลับ และ Cloudflare แสดง 502 ให้ผู้เข้าชมเห็น
วิธีแก้คือฟังก์ชันเล็ก ๆ หนึ่งตัวที่คืนค่าเป็นสตริงว่างเมื่อไม่พบส่วนที่ต้องการ ตัวนับจำนวนเข้าชมต้องการเพียงชื่อของชุดเครื่องมือเท่านั้น มันไม่จำเป็นต้องทำให้หน้าเว็บที่มันกำลังนับจำนวนอยู่พังได้
ทำไมการตรวจสอบของเราถึงมองไม่เห็น
- ตัวตรวจสอบระบบ uptime เปิดเฉพาะหน้าแรกเท่านั้น ซึ่งหน้าแรกยังทำงานปกติดี
- ขั้นตอนการปล่อยเวอร์ชันตรวจสอบแต่ละชุดเครื่องมือที่ปล่อย: หน้ารายละเอียดสินค้า การเปลี่ยนเส้นทางไปชำระเงิน และเส้นทางชำระเงินแบบครบวงจร แต่มันไม่เคยเปิดหน้ารายการชุดเครื่องมือทั้งหมด
- ระบบวิเคราะห์ไม่สามารถแสดงปัญหานี้ได้ โค้ดที่ควรนับจำนวนผู้เข้าชมหน้าแคตตาล็อก คือโค้ดที่ล่มเอง บันทึกของเซิร์ฟเวอร์มีคำตอบมาตลอด: มี tracebacks 17 รายการในช่วง 41 ชั่วโมงนั้น แต่ละรายการคือคำขอจากคนหรือจาก crawler ที่ได้รับข้อผิดพลาดแทนที่จะได้หน้าเว็บ
สิ่งที่เปลี่ยนแปลง
- ทุกหน้า จากภายนอก ทุกชั่วโมง งานเล็ก ๆ ตัวหนึ่งอ่าน sitemap แล้วเปิดทุกหน้าภาษาอังกฤษ และตามด้วยหน้าหนึ่งในอีก 42 ภาษา ผ่าน Cloudflare เหมือนกับผู้เข้าชม หากทำงานล้มเหลวติดกันสองครั้งจะส่งอีเมล และเมื่อระบบกลับมาทำงานได้ก็จะส่งอีเมลอีกฉบับ
- ขั้นตอนการปล่อยเวอร์ชันเปิดทุกหน้าภาษาอังกฤษ หลังจากสร้างเว็บไซต์ใหม่ และจะไม่ยอมจบกระบวนการหากมีหน้าใดหน้าหนึ่งไม่ตอบกลับด้วยสถานะ 200
- หน้าดัชนีถือเป็นหน้าเว็บด้วย หน้าเว็บที่แสดงรายการหน้าอื่น ๆ คือหน้าที่ผู้เข้าชมเข้าถึงเป็นอันดับแรก และนั่นคือหน้าที่ไม่มีใครทดสอบ
บทสรุป
งานเสริมในตัวจัดการคำขอ เช่น การนับ การบันทึก หรือการติดตามผล ต้องไม่ทำให้คำขอล้มเหลว และการตรวจสอบหน้าเว็บที่ครอบคลุมเฉพาะหน้าที่คุณเพิ่งแก้ไข จะพลาดหน้าอื่นที่ลิงก์ไปยังหน้านั้น ตัวตรวจสอบระบบใน Night Watch รับรายการหน้าเว็บใดๆ พร้อมข้อความที่ต้องปรากฏในแต่ละหน้า ไม่จำกัดเฉพาะหน้าแรกเท่านั้น