ทำอะไรบ้างกับ Dashboard ที่เอาไว้โชว์ในงาน CoE-ICT PSU Phuket Senior Project Showcase

Tossapon Nuanchuay
ntossapo
Published in
3 min readMay 13, 2017

ราว ๆ เดือนเมษา ปี 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 ให้ดีกว่านี้

Github

--

--