ทำอะไรบ้างกับ Dashboard ที่เอาไว้โชว์ในงาน CoE-ICT PSU Phuket Senior Project Showcase
ราว ๆ เดือนเมษา ปี 2017 ผมได้อาสาที่จะทำ dashboard ที่จะใช้โชว์ในงาน Senior Project Showcase เป็น Dashboard ที่นำยอดไลค์ แอคชั่นต่างๆ และ แชร์จากแฟนเพจมาคิดเป็นคะแนนและแสดงบนบอร์ดในวันงาน สิ่งที่คาดหวังจากการทำงานนี้เพียงเพื่ออยากได้ประสบการณ์ใหม่ ๆ และความรู้ใหม่ ๆ
ผมจะต้องทำงานร่วมกับ อ. อีกท่านหนึ่งซึ่งประสงค์จะเรียนรู้ AngularJS4 ซึ่ง อ. ท่านจะทำส่วนของที่ใช้แสดงบน Dashboard และ UI ส่วนผมมีหน้าที่ทำ ส่วนของการเก็บข้อมูล, API และ อื่นๆ ตามที่อยากทำ
Facebook API & Data Polling
สิ่งแรกที่ทำคือทดลองกับ Facebook ว่าเราสามารถดึงยอด ไลค์, แอคชัน และ แชร์มาจากแฟนเพจได้หรือไม่ และวิธีการใด
วิธีการนั้นไม่ยากมาก เราสามารถลอง Query ข้อมูลจาก Facebook ได้ผ่าน Tool ตัวนี้
Facebook Explorer
เราพยายาม Query ครั้งเดียวให้ได้ข้อมูลที่ต้องการแต่พบปัญหาเรื่อง Pagination ทำให้เราต้อง Query หลายๆ รอบและลำบากมากเพราะรู้สึกว่ามันไม่น่าใช้งาน
เราจึงแบ่งการ Query ออกเป็น 2 ส่วน
- ดึง ID ข้องทุก Post บน Fanpage
- ดูว่าแต่ละ ID มี Likes, Actions, Shares เท่าไหร
ซึ่งทำงานได้ค่อนข้างดีเมื่อเริ่มโปรเจค(หลังๆชักจะไม่ดี)
สร้างโปรเจค NodeJS ขึ้นมาและเขียน Code เพื่อ Query เหมือนตอนที่ได้ทดลองและออกแบบโดยสามารถใช้ Library
และนำไปเก็บไว้ที่ MongoDB เพราะเราไม่อยากออกแบบแยกเป็น Tables และ Query โดยการใช้ Join ไปเรื่อยๆ มันค่อนข้างซับซ้อน เราอยากทำอะไรที่มันง่ายๆ และทำได้อย่างที่เราอยากได้
Measurement using Grafana & Prometheus
จากนั้นเราก็เข้ามาทำตัว measurement ด้วยความอยากรู้ว่า ข้อมูลที่เราเก็บและการเคลื่อนไหวของ Nodejs มันเป็นไปอย่างไรบ้าง
เลือกใช้ Prometheus และ Grafana เพราะมันง่ายมากๆ(ถ้าใช้กับ Docker นะ)
วิธีการใช้งานได้เคยเขียนไปใน Blog แล้วตามนี้เลย
โดยเรามี Graph ที่แสดงความเป็นไปของ Like, Share, Actions, และ Traffic ของ API
Automation Deployment
เราใช้ Jenkins ในการช่วย Deploy ด้วย (โปรเจคไม่มี Test Sad…) โดยติดตั้ง Jenkins ไว้ใน Production และทำ Webhook เมื่อมี dev push code ขึ้นไปบน Github
Script สำหรับ Deploy NodeJS โดยใช้ pm2ก็จะราวๆนี้
ถ้าหากอยากดูของที่ pm2 ทำงานอยู่ จะต้อง su jenkins ก่อน แล้วค่อยใช้ pm2 นะ เพราะ jenkins สั่ง pm2 ทำงานใน user jenkins เอง
Jenkins เปิดให้ อ. ที่ทำ Frontend ได้ใช้งานด้วย
Feedback จากการใช้ Jenkins
- Dev ที่มีอยู่ 3 คนนั้นรู้สึกมหัศจรรย์มากเพราะมันแจ่มมากๆ
คุณ push code ของคุณและมันจะอยู่บน production ภายใน 20 วินาที
- เราควรเขียน Test เพื่อ Cover ความผิดพลาด ทั้ง Unit และ Integration
Register
อ. บ่นๆว่า Fanpage ที่เรากำลังทำนั้นให้เด็กโพสงานของตัวเองลงไปไม่ได้และถ้าโพสลงไปมันจะไปอยู่ใน Visitor Posts แทน ทำให้ Data polling ของเรา post ไม่เจอ
จะทำเองด้วยมือ ก็คงลำบากเพราะว่ามันมีหลายโปรเจค โพสกันมือหงิกแน่นอน
สิ่งที่ต้องทำคือหน้าเว็บ Register ที่จะต้องนำข้อมูลไปโพสบน Fanpage โดย Admin เป็นคนโพส
ปัญหาคือจะให้ Admin โพสอัตโนมัติได้ยังไง?
เราใช้ IFTTT ช่วยในการโพส โดยทำหน้าเว็บ Register ง่ายๆ ขึ้นมา และส่งให้ IFTTT ช่วยโพสให้ ง่ายมากๆ
สรุปสิ่งที่ได้ใช้และเรียนรู้ในงานนี้
- เราใช้ docker ทุกอย่างเท่าที่ทำได้ เราข้ามขั้นตอนการติดตั้ง และการ configuration เราควบคุมมันได้ และมันดีมากๆ
- เรามี Measurement เราเห็นความเป็นไปของข้อมูลที่เข้ามา เราตรวจเจอสิ่งผิดปกติได้ทันทีและรู้ได้ทันทีว่าเกิดอะไรขึ้น
- เราใช้ Automation Tool มันทำให้เราไม่หัวร้อน มันรวดเร็วและทำให้เราสบายขึ้น
ปัญหา
เรา Design Data Polling ผิดแบบ ทำให้เกิดเหตุการณ์แบบนี้
มันเกิดจากการที่เราขอข้อมูลจาก Facebook มากเกินไป เพราะว่าเราเรียกดูข้อมูลในระดับ PostID ในเพจมี PostID จำนวนมาก ราวๆ 80 Post และแต่ละ Post เราขอข้อมูลทุกๆ 10 วินาที
มันควรจะ
- มี Test :(
- เป็นงานที่ นศ ช่วยกันทำ มันจะดีมากเพราะว่าเราได้เรียนรู้สิ่งที่ใช้ได้เร็วมากๆ
- เราควรออกแบบ Data Polling ให้ดีกว่านี้