Name: Zhirang Guo
IRC nickname on Freenode: imguozr
Web Profile: https://github.com/imguozr/
Location: Richardson, Texas, USA
Typical working hours: 9 am - 6 pm (UTC-05:00)
Short summary describing your project and how it will benefit Wikimedia projects
Wikimedia has more than 200 MariaDB instances to store content and other metadata for Wikipedia and other free projects. The current dashboard Tendril, which is being used for monitoring MariaDB status, has been obsolete from several perspectives: such as being laggy, and unable to integrate with modern tools like grafana and backup systems.
This project - Create a web-based dashboard for monitoring and managing the inventory of Wikimedia databases - aims at creating a minimum viable product in terms of a new web-based database dashboard that supports monitoring and inventory management to replace Tendril in the future.
Have you contacted your mentors already?
Yes. I have contacted @jcrespo through email, Wikimedia’s Phabricator and Gerrit.
After the completion of this internship, the tool will have the following features:
- It has a reliable storage solution, including replica sets, server groups, server/instances properties and so on.
- It has the ability to display details of Wikimedia database instances and servers, including name, section, location, server, IP, port, version, and other real-time properties like QPS, latency, lag and so on.
- It can detect errors and show error messages with explicit colors (like red) when hosts are down.
- It provides features to manage the database inventory in terms of creating, editing and deleting.
- It can jump to future features like Activities, Backups, Reports and so on.
- It has good security patterns like authorized access.
If time permits, the following features will be added:
- It has user-friendly features like client-side ordering, client-side filtering, as well as concise and extensible UI.
- It provides a list view of the servers by replication chain, showing related masters and slaves when going into details.
The instance/server detail page would be like:
First things first, I need to design the storage solution from the existing tool. For less-changing inventory data like hostnames, ips, ports, they will be maintained in a local database, and for real-time data like QPS and latency, Redis or Memcached seems to be a good choice to store. Other tools and procedures will take care of the data gathering and updating. If current databases are reusable, they will be used in the next steps of development. What's more, for the real-time stats, tests of robustness and reliability on both ends (backend and frontend) will be done during development.
I plan to use Flask as the backend framework. For the early stage of development, frontends are planned to develop under Bootstrap due to its easiness. If time permits, the frontend will be recreated with modern frontend frameworks like React.js (or others). If there exist other available technologies that match better with the dashboard’s extensibility, they are also in active consideration. I will settle down the details with mentors in the first weeks.
To pass data - in JSON format - to frontend platforms, we need web services with RESTful APIs given below:
- GET, fetch details of instance/server from databases.
- GET, fetch replica pairs from databases.
- POST, send requests to databases to manipulate the database inventory.
All of the above APIs should have been fully tested, and they must have security checks on authorized accesses, integrating with the Wikimedia authentication system.
Timeline with Milestones
May 4 - May 31 (Community Bonding Period)
- Get familiar with Wikimedia database infrastructures.
- Get familiar with Wikimedia development workflow, style guidelines, and related tools.
- Learn more about Tendril, discuss more about the demands with team members and refine mockups.
- Design storage solutions, determine important technological details, including tech stack.
June 1 - July 3 (Coding Phrase I)
- Settle down architecture design and algorithm design, write a design document with all requisites, if possible, make it detailed.
- Implement an initial prototype with one fully-worked fetching-data API which is merged or ready to merge, including tests and documents.
- Implement a rough front end page for the data-showing part of the dashboard.
July 6 - July 31 (Coding Phrase II)
- Implement, test and document all other APIs, finish required features listed above.
- Finish a beta version of the dashboard.
Aug 3 - Aug 24 (Final Coding Phrase)
- Refine documents and polish the beta version.
- Implement additional features if time permits.
- Finish the final report.
- I will follow the current style guidelines of Wikimedia and commit everyday progress to Gerrit.
- I have been and will be in constant touch with my mentors, Jaime Crespo and Manuel Arostegui.
- I will discuss ideas and share status on Phabricator.
- I will be available through Phabricator, Gerrit, IRC and email during work time.
- I will write weekly reports regarding project progress.
I am a graduate student at the University of Texas at Dallas pursuing my Master of Science degree in Computer Science.
How did you hear about this program?
From a friend who participated before.
Will you have any other time commitments, such as school work, another job, planned vacation, etc, during the duration of the program?
No, I will be completely available during this program given it is in summer break.
We advise all candidates eligible for Google Summer of Code and Outreachy to apply for both programs. Are you planning to apply to both programs and, if so, with what organization(s)?
I will only apply for Google Summer of Code.
What does making this project happen mean to you?
Wikipedia and other free projects under Wikimedia mean a lot to me. As a child grown up in China, I experienced two stages of Wikimedia: free usage and being blocked by the GFW. I was finally able to learn all kinds of knowledge from Wikimedia again after building a VPN during high school. What makes Wikimedia today is its freedom and openness, and these spirits keep motivating me all the time. By contributing to this project, which aims at building a better tool for the development of Wikimedia, I can help Wikimedia with my strength as a software developer. This is the best thing I can do to express my thankfulness.
Also, I like to contribute to open source communities. Following is some of my work:
- A LaTeX template for my undergraduate thesis, which is widely used among school: https://github.com/imguozr/NJUPThesis-Bachelor
- A Python-wrapped API for almost all student-oriented services of my undergraduate college, cooperated with my roommate: https://github.com/gaoliang/NJUPT-API
- Contributing to the translation of “Anti 996” License for 996.ICU, which intends to protest against the unofficial but mandatory work schedule (9 am - 9 pm, 6 days a week) implemented by big tech companies in China: https://github.com/996icu/996.ICU
Contributions to Wikimedia
- Fix some typos and grammar mistakes for MariaDB troubleshooting on Wikitech: https://wikitech.wikimedia.org/wiki/MariaDB/troubleshooting
- (Merged) T218189: wmfmariadbpy/CuminExecution must capture Exception cumin.transports.WorkerError: https://gerrit.wikimedia.org/r/578623
- (Merged) RemoteExecution: Fix typo in class CommandReturn: https://gerrit.wikimedia.org/r/c/operations/software/wmfmariadbpy/+/579882