From Fedora Project Wiki
(→‎The Solution: small fixes)
 
(32 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[category:Summer coding 2017]]
[[category:Summer coding 2017]]


== Quick Introduction ==  
== Synopsis ==  


The goal of this project is to provide centralized metrics for Fedora.
The [http://directory.fedoraproject.org/ 389 Directory Server] is an enterprise class [https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol LDAP] server, used in businesses globally to authenticate and identify people. A python administration framework, [http://directory.fedoraproject.org/docs/389ds/FAQ/upstream-test-framework.html#lib389-library lib389], has been designed recently to replace existing legacy perl tools. It contains tools and libraries for testing and interacting with the 389 Directory Server, but it is still a work in progress. The purpose of this project is to pick one or more existing 389 DS plugins and write the parts into lib389 to manage them.


The Federated Message Bus or simply [http://www.fedmsg.com fedmsg] is a python package and API defining a brokerless messaging architecture to send and receive messages to and from [https://apps.fedoraproject.org/ Fedora applications]. For example, once a branch of a package is successfully built in [[Koji|koji]] a message will be emitted on the bus.
== The Problem ==
 
But why all the hassle? Why don't we just stick with the already existing tools? The administration of the Directory Server has always been a complex issue. There is a variety of helper perl scripts that are installed along with it. These scripts administer specific parts of the server, but the server cannot be managed with them alone. Often people have to use the Java Console or apply LDIF files. Both have their own drawbacks. The Java Console is easy to use but has its own issues, whereas the application of LDIF files is highly complex. It becomes clear that we need a new way to administer the Directory Server.
 
== The Solution ==
 
This new way to administer the Directory Server should be a complete one stop while command line focused. The goal of lib389 is to make the setup, administration, and eventually the decommission of a DS instance possible, without ever applying a LDIF file. Two additional tools have been developed; dsadm and dsconf. These are just wrappers on lib389 since the testing framework already has all the parts needed to make an administrative toolkit. dsadm will be used to create, start, stop, backup, restore and destroy instances and manage the components of DS that exist on the local host or container. dsconf is the tool to manage configuration of DS instances and can be run remotely, administrating the server completely via the LDAP protocol. It will be used to manage backends/suffixes, indicies, plugins, logging and more.
 
My role in the project will be to write a few lib389 modules and their appropriate hooks to dsconf. Which specific modules will be decided during the bonding period and will depend on the current needs.
 
== Schedule and Timeline ==
 
Iterative commits with descriptive git messages will be used instead of big patches. This will make it easier for both the reviewers to provide feedback and for me to apply the feedback and organize my work. Since a solid background in OO programming and design is a prerequisite for this project, I will follow the [https://en.wikipedia.org/wiki/SOLID_(object-oriented_design) SOLID] principles throughout the whole process of producing and refactoring code.
 
=== Bonding Period (4/5 - 29/5) ===
 
* Setup a DS server, install the lib389 source code, try running dsconf, test everything out.
 
* Read and interpret some of the existing perl and shell scripts.
 
* Understand the contributing cycle and try to submit a few bug reports and/or patches.
 
* Discuss about the modules to be developed throughout the working periods.
 
* Get to know the community, discuss the project in general and exchange ideas.
 
=== Working Period 1 (30/5 - 26/6) ===
 
* Write unit tests for the first module.


[https://apps.fedoraproject.org/datagrepper/ Datagrepper] let us query for all kinds of historical data from fedmsg. It provides us with a JSON API for fedmsg which can be utilized by using HTTP GET requests. Many scripts are using this API to generate useful metrics. An example query for datagrepper could request all messages from the past 2 days that have been emitted from the wiki from a specific user.
* Implement the first module. Make the unit tests pass.


== The Problem ==
* Write hooks to dsconf in order to make it possible to use the module.
 
* Document everything.


There are applications that have to make a dozen or more requests to datagrepper to try and find the 'latest' events from large awkward pages of results. Unfortunately, this process is very slow. Consequently, datagrepper is insufficient for some more advanced reporting and analysis that we would like to do. 
=== Working Period 2 (27/6 - 27/7) ===


At the moment, metrics collection in [[CommOps]] are collected using scripts which query the datagrepper API. This is very time consuming and requires a lot of manual work. After all, writing hacky scripts every time is a tedious process.
* Repeat first working period's steps for another module or modules.


== The Solution ==
* Start reviewing other team members' work.


To solve the above mentioned issues, [https://github.com/fedora-infra/statscache statscache] was built. Statscache is a daemon that sits listening to fedmsg-hub waiting for messages. When new messages arrive, it will pass them off to plugins that will calculate and store various statistics. If we want a new kind of statistic to be kept, we just write a new plugin for it. With statscache, we intend to have a centralized source for all metrics generation. By building on top of it, we can significantly reduce the number of scripts required to gather metrics to almost 0.
=== Working Period 3 (28/7 - 29/8) ===


At the moment, statscache has no plugins for community related metrics.
* Probably continue with implementing another module.


The main purpose of this project is to build these plugins. Other goals include the development of a nice web interface for generating statistics, as well as the deployment of statscache along with the final deliverables on infracloud.
* Deal with any unexpected issues that we didn't foresee in advance.


== About me ==
* Optionally: Write a report on the whole experience.


My name is Ilias Stamatis and I am a CS student in my final (4th) year at the Alexander Technological Institution of Thessaloniki, Greece.
== About Me ==


I have been using Linux for the last 7 years. I started with Ubuntu where I stayed for a couple of years and then moved to Arch for the last 5 years, while experimenting with a lot of different distributions in the meantime.
My name is Ilias Stamatis. I am a CS student in my final (4th) year at the Alexander Technological Institution of Thessaloniki, Greece.  


Although I had no prior experience with Fedora, I quickly set up my working environment on it and read Fedora-specific topics from the official documentation, such as dnf and rpm usage. I also took a quick glance on [[How_to_create_an_RPM_package|RPM packaging]].
I am a FOSS enthusiast and I have been actively contributing to the open source community for the last several years.


I always have the dedication, motivation and ambition to learn and improve in order to achieve my goals and I strive for quality in everything I do.
I have been using Linux for the last 7 years. I started with Ubuntu and then moved to Arch where I have stayed for 5 years now. In the meantime I am experimenting with a lot of different distributions. Although I had no prior experience with Fedora, I quickly set up my working environment on it and read Fedora-specific topics from the official documentation and the wiki pages. I'm here to stay!


Multilingual in Greek (Native), English (Fluent) and Spanish (Conversational).
Multilingual in Greek (Native), English (Fluent) and Spanish (Conversational).


== OSS Contributions ==
=== Experience and Contributions ===


=== Projects ===
==== Projects ====


The majority of my personal projects (mostly written in Python, C and Java) can be found on my personal github profile: https://github.com/Ilias95
The majority of my personal projects (mostly written in Python, C and Java) can be found on my github profile: https://github.com/Ilias95
 
Example projects:


* '''FF Multi Converter''' (https://sites.google.com/site/ffmulticonverter/)
* '''FF Multi Converter''' (https://sites.google.com/site/ffmulticonverter/)
Line 47: Line 75:
A graphical front-end for multimedia conversions on Linux developed using python and pyqt5.
A graphical front-end for multimedia conversions on Linux developed using python and pyqt5.


This is the most "successful" open-source project of mine, since it has a continuously growing user base. It has also been packaged by the community for all popular Linux distributions and it has been translated to more than 20 languages. However, I'm not proud of its ugly codebase (I initially wrote it 6 years ago and I maintain it ever since).
This is the most successful open-source project of mine, since it has a continuously growing user base. It has also been packaged by the open source community for all popular Linux distributions and it has been translated to more than 20 languages.  
A complete rewrite following ''TDD'' and clean code practices is in my future plans.


* '''Apts''' (https://github.com/Ilias95/apts)
* '''Apts''' (https://github.com/Ilias95/apts)
Line 58: Line 85:
A dynamic web application developed using django and modern web technologies such as AJAX, JQuery and Bootstrap.
A dynamic web application developed using django and modern web technologies such as AJAX, JQuery and Bootstrap.


=== Arch Linux Contributions ===
==== Arch Linux Contributions ====


* Packages that I maintain in AUR: https://aur.archlinux.org/packages/?SeB=m&K=Ilias95
* Packages that I maintain in AUR: https://aur.archlinux.org/packages/?SeB=m&K=Ilias95
Line 66: Line 93:
== Why Fedora ==
== Why Fedora ==


Lorem Ipsum.
I love Linux and I love Open Source. Fedora is a Linux distribution driven by a massive community made of volunteers around the world. I was always looking forward to making bigger and more significant contributions to such a large open-source project. Everything done here has a significant impact on the whole FOSS community and that motivates me even more. Last but not least, apart from Linux and OSS, I really love python and luckily Fedora seems to be sharing this feeling as well.
 
Inside Fedora I can offer my skills, knowledge and hard work and I definitely plan to continue contributing after the GSoC period. This will let me obtain new technical skills and gain significant experience on communication and collaboration with users and developers of such a large community.
 
== Why This Project ==
 
I couldn't have more reasons. First of all, there's a big professional team behind DS distributed all over the world. This serves as a great opportunity to learn how to collaborate with such teams, the ways and the techniques to achieve it, the whole "report, test, document, submit, get feedback, re-submit" cycle and much more. Good engineering principles in general. Additionally, learning to communicate effectively with distributed teams like this one is also challenging and a very important skill to obtain. Besides that, 389 DS is a really big project used in businesses globally. It has to meet certain standards and satisfy certain needs such as 100% uptime. Enganging with a project of this nature will provide me with hands-on experience on real-world situations. I also enjoy working with the technologies involved such as python and I'll have the chance to get to know the internals of an LDAP server, which will help me to obtain a lot of extra tech skills and more. Last but certainly not least, I know that with the work that I will do here, I will provide solutions to existing real-world problems and I'll satisfy real-world needs that users have all around the glob. Hence, the importane of this work and its global impact probably serves as the biggest motivation of them all.
 
== Why I Am a Good Fit for This Project ==


== Why this project ==
* Experience with a lot of open-source projects and the Linux ecosystem.


Lorem Ipsum.
* Plenty of years of experience with python which is required for this project.


== Schedule and milestones ==
* Very familiar with collaboration and communication techniques such as version control, issue tracking, IRC, mailing lists, etc.


=== Implementing X -- first milestone (8 weeks) ===
* Ability to take on new technologies with ease and quickly become efficient and productive.


==== Coding this (1 week) ====
* Really keen on engaging with a sizeable software team, obtaining new engineering skills and gaining hands-on experience on real-world situations.


Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.
* FOSS enthusiast.


==== Documenting that (1 week) ====
== Other Commitments ==


Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
I am following only 2 university courses this semester. My examination period is in June (no exact dates yet). I do not have other commitments until the 1st of September so I will be able to focus exclusively on this project.


== Contact Info ==
== Contact Info ==
Line 88: Line 123:
Ilias Stamatis, stamatis.iliass <> gmail.com
Ilias Stamatis, stamatis.iliass <> gmail.com


My IRC nick is <code>Ilias95</code> and you can find me at <code>#fedora-commops</code>, <code>#fedora-python</code> and <code>#fedora-devel</code>.
My IRC nick is <code>Ilias95</code> and you can find me on <code>#389</code>, <code>#fedora-devel</code> and <code>#fedora-python</code>.

Latest revision as of 11:17, 3 April 2017


Synopsis

The 389 Directory Server is an enterprise class LDAP server, used in businesses globally to authenticate and identify people. A python administration framework, lib389, has been designed recently to replace existing legacy perl tools. It contains tools and libraries for testing and interacting with the 389 Directory Server, but it is still a work in progress. The purpose of this project is to pick one or more existing 389 DS plugins and write the parts into lib389 to manage them.

The Problem

But why all the hassle? Why don't we just stick with the already existing tools? The administration of the Directory Server has always been a complex issue. There is a variety of helper perl scripts that are installed along with it. These scripts administer specific parts of the server, but the server cannot be managed with them alone. Often people have to use the Java Console or apply LDIF files. Both have their own drawbacks. The Java Console is easy to use but has its own issues, whereas the application of LDIF files is highly complex. It becomes clear that we need a new way to administer the Directory Server.

The Solution

This new way to administer the Directory Server should be a complete one stop while command line focused. The goal of lib389 is to make the setup, administration, and eventually the decommission of a DS instance possible, without ever applying a LDIF file. Two additional tools have been developed; dsadm and dsconf. These are just wrappers on lib389 since the testing framework already has all the parts needed to make an administrative toolkit. dsadm will be used to create, start, stop, backup, restore and destroy instances and manage the components of DS that exist on the local host or container. dsconf is the tool to manage configuration of DS instances and can be run remotely, administrating the server completely via the LDAP protocol. It will be used to manage backends/suffixes, indicies, plugins, logging and more.

My role in the project will be to write a few lib389 modules and their appropriate hooks to dsconf. Which specific modules will be decided during the bonding period and will depend on the current needs.

Schedule and Timeline

Iterative commits with descriptive git messages will be used instead of big patches. This will make it easier for both the reviewers to provide feedback and for me to apply the feedback and organize my work. Since a solid background in OO programming and design is a prerequisite for this project, I will follow the SOLID principles throughout the whole process of producing and refactoring code.

Bonding Period (4/5 - 29/5)

  • Setup a DS server, install the lib389 source code, try running dsconf, test everything out.
  • Read and interpret some of the existing perl and shell scripts.
  • Understand the contributing cycle and try to submit a few bug reports and/or patches.
  • Discuss about the modules to be developed throughout the working periods.
  • Get to know the community, discuss the project in general and exchange ideas.

Working Period 1 (30/5 - 26/6)

  • Write unit tests for the first module.
  • Implement the first module. Make the unit tests pass.
  • Write hooks to dsconf in order to make it possible to use the module.
  • Document everything.

Working Period 2 (27/6 - 27/7)

  • Repeat first working period's steps for another module or modules.
  • Start reviewing other team members' work.

Working Period 3 (28/7 - 29/8)

  • Probably continue with implementing another module.
  • Deal with any unexpected issues that we didn't foresee in advance.
  • Optionally: Write a report on the whole experience.

About Me

My name is Ilias Stamatis. I am a CS student in my final (4th) year at the Alexander Technological Institution of Thessaloniki, Greece.

I am a FOSS enthusiast and I have been actively contributing to the open source community for the last several years.

I have been using Linux for the last 7 years. I started with Ubuntu and then moved to Arch where I have stayed for 5 years now. In the meantime I am experimenting with a lot of different distributions. Although I had no prior experience with Fedora, I quickly set up my working environment on it and read Fedora-specific topics from the official documentation and the wiki pages. I'm here to stay!

Multilingual in Greek (Native), English (Fluent) and Spanish (Conversational).

Experience and Contributions

Projects

The majority of my personal projects (mostly written in Python, C and Java) can be found on my github profile: https://github.com/Ilias95

A graphical front-end for multimedia conversions on Linux developed using python and pyqt5.

This is the most successful open-source project of mine, since it has a continuously growing user base. It has also been packaged by the open source community for all popular Linux distributions and it has been translated to more than 20 languages.

Implementation of a complete TFTP server using python and following the RFC 1350.

A dynamic web application developed using django and modern web technologies such as AJAX, JQuery and Bootstrap.

Arch Linux Contributions

Why Fedora

I love Linux and I love Open Source. Fedora is a Linux distribution driven by a massive community made of volunteers around the world. I was always looking forward to making bigger and more significant contributions to such a large open-source project. Everything done here has a significant impact on the whole FOSS community and that motivates me even more. Last but not least, apart from Linux and OSS, I really love python and luckily Fedora seems to be sharing this feeling as well.

Inside Fedora I can offer my skills, knowledge and hard work and I definitely plan to continue contributing after the GSoC period. This will let me obtain new technical skills and gain significant experience on communication and collaboration with users and developers of such a large community.

Why This Project

I couldn't have more reasons. First of all, there's a big professional team behind DS distributed all over the world. This serves as a great opportunity to learn how to collaborate with such teams, the ways and the techniques to achieve it, the whole "report, test, document, submit, get feedback, re-submit" cycle and much more. Good engineering principles in general. Additionally, learning to communicate effectively with distributed teams like this one is also challenging and a very important skill to obtain. Besides that, 389 DS is a really big project used in businesses globally. It has to meet certain standards and satisfy certain needs such as 100% uptime. Enganging with a project of this nature will provide me with hands-on experience on real-world situations. I also enjoy working with the technologies involved such as python and I'll have the chance to get to know the internals of an LDAP server, which will help me to obtain a lot of extra tech skills and more. Last but certainly not least, I know that with the work that I will do here, I will provide solutions to existing real-world problems and I'll satisfy real-world needs that users have all around the glob. Hence, the importane of this work and its global impact probably serves as the biggest motivation of them all.

Why I Am a Good Fit for This Project

  • Experience with a lot of open-source projects and the Linux ecosystem.
  • Plenty of years of experience with python which is required for this project.
  • Very familiar with collaboration and communication techniques such as version control, issue tracking, IRC, mailing lists, etc.
  • Ability to take on new technologies with ease and quickly become efficient and productive.
  • Really keen on engaging with a sizeable software team, obtaining new engineering skills and gaining hands-on experience on real-world situations.
  • FOSS enthusiast.

Other Commitments

I am following only 2 university courses this semester. My examination period is in June (no exact dates yet). I do not have other commitments until the 1st of September so I will be able to focus exclusively on this project.

Contact Info

Ilias Stamatis, stamatis.iliass <> gmail.com

My IRC nick is Ilias95 and you can find me on #389, #fedora-devel and #fedora-python.