===Profile Information
Name: Zhirang Guo
IRC nickname on Freenode: imguozr
Web Profile: https://github.com/imguozr/
Location: Richardson, Texas, USA
Typical working hours: 10 am - 7 pm (UTC -5)
===Synopsis
Parent Task: {T246435}
> 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. Although there are a lot of open-source tools existing to help monitor, custom developments by demand are required. The current dashboard [[ https://wikitech.wikimedia.org/wiki/Tendril | Tendril ]] is being used for inventory and as a summary of the status of the MariaDB fleet. But it has been obsolete from several perspectives, such as 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.
> Possible Mentor(s)
@JCrespo, @MArostegui
> Have you contacted your mentors already?
Yes. I have contacted @JCrespo through email, Wikimedia’s Phabricator and Gerrit.
===Deliverables
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 properties.
- 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.
===UI Mockups
The instance/server detail page would be like:
{F31687162}
===Implementation details
First things first, I need to design the storage solution from the existing tool. If current databases are reusable, it will be used in the next steps of 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). And Redis seems to be a good choice to store the real-time data. 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 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 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 mockupsups.
Design storage solutions, determine important technological details, including tech stack.
=====June 1 - July 3
**Evaluation I**
Settle down architecture design and algorithm design, write a design document with all requisites, if possible, make it detailed.
Design storage solutions, determine important technological details, including tech stack.
Finish a design document with all requisites, if possiblImplement an initial prototype with one fully-worked fetching-data API which is merged or ready to merge, make it detailed.including tests and documents.
Implement an initial prototype with one fully-worked API which is merged or ready to merge rough front end page for the data-showing part of the dashboard.
=====July 6 - July 31
**Evaluation II**
Implement, test and tesdocument all other APIss, finish required features listed above.
Implement a rough front end page forFinish a beta version of the dashboard.
=====Aug 3 - Aug 24
**Final Evaluation**
Refine documents and fix bugspolish the beta version.
Implement other additional features if time permits.
Finish the final report.
===Participation
- 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 mentor, Jaime Crespo.
- I will discuss ideas and share status on Phabricator.
- I will be available through IRC and email during work time.
- I will write weekly reports regarding project progress.
===About Me
> Your education
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?
I heard this program fromFrom 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.
===Past Experience
My background was in Computer Science. I have experience with multiple technologies like Python, Java, JavaScript, Node.js, Flask, Koa, Vue.js, Redis, MongoDB, and MySQL.
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
- (Work In Progress) 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