Name: Daniel Benedí García
IRC nickname on Freenode: danielbenedi6
Web Profile: https://github.com/danielbenedi6
Location: Zaragoza, Spain
Typical working hours: 9 AM - 2 PM (UTC+2) (Monday to Friday)
Short summary describing your project and how it will benefit Wikimedia projects
Nowadays, Puppet is used by WikiMedia Foundation to manage configurations, but as it is stated on the parent task, it has some problems deploying changes on the cluster and finding out anomalies. It will implement an API to check the status of accounts through a database that would contain an image of the configuration in each instance.
Have you contacted your mentors already?
Yes. I have contacted mentors through PMs and I have been following Phabricator discussion.
The main component of this project will be an API which will provide CRUD operations. The information managed will be stored making use of persistent storage. There will be three kinds of create/update: create a rule, insert a user configuration in an instance, insert multiple user configurations. After each create/update the API will return the configurations that mismatch with the rules. The read operation will allow users to check all the users that do not match it, as create the rule, but it will not be stored for future inserts. The delete operation will delete a user configuration or a rule.
Also, there will be a websocket where a user can listen to be notified when an anomaly is found based on the defined rules. So, if a user is listening on the websocket and another user insert a new rule, not only the user who inserts will be notified of mismatches, but also the user who is connected to the websocket will be notified.
The language to define rules will be based in tuples and each element of the tuple could be queried or stated. This way it could be define a rule for a specific user, for a specific or leave it more generic.
The server will generate a log with each operation it receives to check everything is working as expected. Also it will have its own tests and documentation. In case there is enough time, it will be designed a periodic task to scan the databases copying the users configuration. This little program could not be fully tested due to not having direct access to the databases.
At the end of phase I, WikiMedia Foundation will receive the documentation of the API, the database structure used by the server and the server with the insert operations implemented.
At the end of phase II, WikiMedia Foundation will receive the server with all operations implemented and all tests implemented and all documentation generated in phase I.
The project is scheduled to need 175h distributed in 10 weeks. So it is supposed to work 17.5h each week and 3.5h Monday to Friday.
|May, 17 to June, 7||Community bonding period. Get familiar with Wikimedia database infrastructures. Get familiar with Wikimedia development workflow, style guidelines, and related tools. Studying existing tools for reporting users with no password. Study about Puppet and actual usage.|
|June 7 to June 21||Establish a stack to use and database used to store temporal users info and rules for those users.|
|June 21 to June 28||Define entrypoints of API taking into account params needed and results and define language to define rules to check.|
|June 28 to July 5||Implement rule parser and insert rules.|
|July 5 to July 12||Implement insert user and multiple users.|
|July 12 to July 16||Phase I evaluation|
|July 19 to July 26||Design and implement unit tests for inserting.|
|July 26 to August 2||Implement websocket and querying|
|August 2 to August 9||Design and implement unit tests for querying and websocket|
|August 9 to August 16||Implement delete users and rules with tests|
|August 16 to August 23||Final submit and Mentor Evaluations|
|August 31||Results announced|
I will maintain the source code in the Wikimedia Git repository.
I will use Phabricator, Gerrit, IRC and email in my working hours to collaborate with the mentors.
I will use Phabricator for tracking issues.
I will use email for communication in non-working hours.
I will write weekly reports on doc that will be available in the repository.
I am currently enrolled in a Bachelor of Engineering in Computer Science at University of Zaragoza in my third course of four courses and with the prospect of taking part in a Master.
How did you hear about this program?
I heard about this program because I attended a lecture Jaime Crespo gave at my home university. After that, a professor told us he was mentoring in this program.
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 so I can put the required effort without failing to get the required output.
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?
Since I was a teenager, I have always felt a passion among open knowledge and open source. When I started programming, I wanted to take part in the Open Source Community but I've never found my time. Now, this project will be my first contribution with the Open Source Community and I will be delighted.
My background is in Computer Science. I have experience with multiples technologies like Python, C++, Java, C, Embedded C, Golang, SQL (Oracle and Postgres), NoSQL (MongoDB), Nodejs, J2EE, PHP, Kubernetes, Docker.
All my experience is based on little projects though I am currently working on a bigger project (6 people - 150h/p) which I am managing. By the time the program starts, this project will have finished.