===Profile Information
Name : Battu Ashita
Zulip nick : BATTU ASHITA
Blog URL : https://ashitabattu.blogspot.com/
Web Profile : https://github.com/battuAshita
Location : India (UTC + 5:30)
Typical working hours : 11:00 AM to 8:00 PM UTC+5:30
===Synopsis
The main idea behind this project is to develop an inventory management system which handles information about various Maria DB instances in use and the respective permissions(grants) they have. With this inventory management in place, we would be able to achieve things like changing permissions, inserting new entries or listing out anomalous maria db instances according to certain rules etc easily and alert the respective stakeholders.
The scope of this project is really huge. Going forward we can keep adding multiple features like fetching related documents given a search with some limit and offset etc and use this as an internal tool to manage various other things.
=====High level design overview
The user would be seeing a hamburger menu with multiple tabs. Each tab would have a specific functionality i.e one tab would list down the maria db instances, other tab would list the roles, usages and peculiarities of different group of servers etc.
User would be able to search/filter for a specific maria db instance and list out the permissions etc
====== Example APIs
Some of the internal APIs(with basic auth) we would be having
GET /Manager/FetchMariaDBInstances
This API would fetch details from the database.
Response format: {"api_id": uuid, "instances": ["instance1", "instance2"]}
Response code: 200
POST /Manager/CreateNewInstance
This API would insert a new a row into the table
Response format: {"api_id": uuid, "message": "inserted"}
Response code: 201
=====Frameworks which can be used
Django(MVC architecture) for both front end and back end.
To make it even more decoupled and maintainable, we can split the back end(Django) and front end(VueJs or anything similar to this).
Mentors : @jcrespo and @Marostegui
===Timeline
| Period | Task |
| May 17th to May 24th | **Community bonding period starts**. Getting to know about the existing wikimedia infrastructure i.e where all the necessary tables are and setting up the necessary things on my local machine. |
| May 25th to June 1st | List out all the use cases, APIs to be added, tables to be accessed etc. Create a document with the high level design and get it approved. |
| June 2nd to June 9th | Create code stubs as per the design and start coding. Follow a controller, use case, data-adapter layer kind of approach for better maintainability of code. Add docstrings for every use case. Add unit tests to make sure the functionality is working as expected. Create a basic front end. |
| June 10th to June 17th | Continue coding the necessary back end APIs. I will be adding the respective documentation as soon as I complete the coding for each API. Dev test every API once it’s done. |
| June 18th to June 25th | Continue coding the back end APIs. |
| June 26th to July 3rd | Deploy the changes on given staging setup. Start testing and fix bugs if any. |
| July 4th to July 11th | Integrate the basic front end with the back end. |
| July 12th to July 16th | **Phase I evaluation** |
| July 17th to July 24th | Work on the UI/UX design and get it approved by incorporating review comments if any. |
| July 25th to Aug 1st | Start coding the front end. |
| Aug 2nd to Aug 9th | End to end testing of my code. |
| Aug 10th to Aug 15th | Make improvements(if time permits) like adding search etc. Take feedback from the mentors and incorporate any changes which might have to be made. |
| Aug 16th to Aug 23rd | **Phase II evaluation** |
| Aug 23rd to Aug 31th | **Mentors submit their final evaluations.** |
| August 31st | **Results of GSOC - 21 will be announced.** |
===Deliverables
=====Phase I evaluation
- Basic front end - basic html pages with no styling.
- By the time each API is finished, I will have the documentation, unit tests and integration ready. Essentially, I will have 3 solid weeks(starting from June 2nd) for coding the APIs, adding UTs, documentation and integrating it with a basic front end.
- APIs to perform CRUD operations on the necessary tables.
=====Phase II evaluation
- A fully functional inventory management system(fully designed front end and back end) ready for use.
===Participation
- I will be working on separate branches created in the forked Phabricator repository. I plan to have separate branches cut from master for every feature.
- I will maintain a staging branch which will have multiple features. This is the branch which should be deployed on the staging environment. Finally, this branch would be merged into master.
- I will be available on Zulip during my working hours ( 11:00 AM to 8:00 PM UTC+5:30 ).
- I will be interacting with the mentors through the comment section of the respective sub tasks on Phabricator.
- I will be giving updates over email every morning with whatever has been done the previous day.
- I will be writing blogposts of my work on a weekly basis [[ https://ashitabattu.blogspot.com/ | here ]].
===About Me
I am currently in my sophomore year of college pursuing Computer Science and Engineering at Indian Institute of Technology Bhilai. I love taking up challenges which bring me out of my comfort zone and help me learn anything new, explore new options and expand my knowledge.
I heard about GSoC from a senior in my college who was a part of it and since then I have been very much enthusiastic to be a part of it and contribute to open source.
During the three months of this program, I would not be having any classes or exams and working on this project will be my only commitment during that time. However, my college commences from the 1st August, 2021. I have planned my timeline in such a way that I would be completing the major part of the project before August 1st, 2021.
This project getting executed would mean a lot to me as Wikimedia is a large organisation and contributing to it would enable me to release code which will be used by numerous people thereby creating a positive impact on the society. Collaborating with new people will help me get a new perspective towards various things and I'm looking forward to being a part of this great journey.
===Past Experience
- Worked on a project where I designed a database(MySQL) and tables within it such that students can enrol in courses, view the lesson resources, comment on lecture videos, take a quiz and wrote queries where a student can get their scores per every quiz in a course they enrolled into. I got a really good understanding of relational databases and how they function from this.
- Designed a UI using HTML, CSS and Javascript where the user gets to fill the form and I linked it to the back end so that the information gets stored in the
database. I learnt how to integrate a back end with a front end.
- Experimented with the 'GIPHY API' and created a basic program which fetches related GIFs given a search string. I learnt how we can use API keys to authenticate, API endpoints and hence have a good idea on how REST APIs work.
- Designed a basic binary calculator using HTML, CSS and Javascript.
- I have previously made contributions to AnitaB.org. Here are some of my pull requests that have been merged :
-- https://github.com/anitab-org/bridge-in-tech-web/pull/219
-- https://github.com/anitab-org/mentorship-backend/pull/974