GSoC2014 idea & project list

Gergely Nagy edited this page Mar 20, 2014 · 27 revisions
Clone this wiki locally

Table of contents

  1. Guidelines

    1. Hosting, license and other bits of information
    2. Adding a new idea
    3. Submitting a proposal
  2. Ideas

    1. Integration with config management systems
    2. XMPP destination
    3. Configuration visualisation
    4. TLS support for the MongoDB destination
    5. AMQP source
    6. ZMQ transport
    7. Type hinting from the start

Guidelines

The ideas herein were contributed by the syslog-ng OSE community, by developers, users, interested students. Some of them may be vague or incomplete. Asking about any of these ideas either on the mailing list, or contacting the person proposing it, is highly recommended for students.

Being accepted as a Google Summer of Code student isn't an easy task, it is competitive. Researching the desired topic in depth, and being in contact with the mentor and the community is a great tool in a student's arsenal. When creating a new idea, we recommend talking to the community at large, and the developers too, to ensure that there will be a mentor for the project, if selected.

In case no specific contact is given for a particular idea, questions can be asked on the mailing list or on IRC.

Hosting, license and other bits of information

As required by the Google Summer of Code program, all contributions must be available under an open source license. In case of syslog-ng, we use two licenses: the GNU General Public License (GPL) and the GNU Lesser General Public License (LGPL), the outcome of the GSoC projects will need to use the appropriate license too.

We also prefer to do development in the open, with communication happening on the mailing list or on IRC, and code hosted on GitHub, where the main repository is. Depending on the propsal, students will be asked to fork either of syslog-ng itself, or the Incubator.

Adding a new idea

Before adding a new idea, it is recommended to consult the community and the mentors (see above), and then follow the template set by other ideas: A title, a brief description, expected results, skills required, difficulty, and topics the student may learn. See the existing ideas below!

Submitting a proposal

To submit a proposal, please create a new Wiki page for it, as described here, and don't forget to record it on Melange too, with a link back to the created wiki page.


Ideas

Integration with config management systems

Config management and deployment automation systems are more widely used in the cloud era. Puppet, Chef, Salt are the most known ones, but they lack the proper plugin for syslog-ng configuration. The goal of this project is to create a plugin for one or more of these systems to model syslog-ng configuration objects and generate actual configuration from the model.

Proposed by: Peter Czanik

Mentor: Viktor Tusa (co-mentor Balázs Benedek)

Difficulty: Easy

Deliverables of the project:

  • Syslog-ng config management plugins for Chef, Puppet, or Salt.

Desirable skills:

  • Strong syslog-ng knowledge, at least on a user level
  • Experience with config management systems, either in Chef, Puppet, or Salt.
  • Some Python or Ruby coding knowledge

What the student will learn:

  • Creating plugins for popular config management systems
  • Deeper syslog-ng knowledge
  • How to model complex configurations.

XMPP destination

The goal of this project is to deliver an XMPP destination, which can push log messages to an XMPP server as XMPP messages. Either a simple message push (with configurable node, jid, password, and destination jid) or a publish/subscribe model should be supported.

Proposed by: Viktor Tusa

Mentor: Viktor Tusa (co-mentor Gergely Nagy)

Difficulty: Easy-Medium

Deliverables of the project:

  • A simple XMPP destination to communicate with an XMPP server, and deliver messages.
  • Simple message push model, or publish/subscribe model.
  • Code flexible enough to support the other model later, or at worst, code that is easy enough to adapt and improve upon.

Desirable skills:

  • Familiarity with syslog-ng on at least a strong user level
  • Stable knowledge of XML
  • Familiarity with at least one IM protocol.
  • Familiarity with the C language (deep knowledge not required, but C coding experience is strongly recommended)
  • Prior knowledge of the syslog-ng code base is recommended, but not required

What the student will learn:

  • Working with an existing, well-established software project
  • Simple, but efficient multi-threaded programming in C
  • XMPP protocol knowledge, and Instant Messaging systems model
  • Basic Bison & Flex skills, an introduction into writing parsers and grammars

Configuration visualisation

Creating a complicated configuration for syslog-ng, especially one that spans multiple files and uses advanced features like blocks or junctions is no small task. Debugging them is even harder. The goal of this project is to write a tool (of some sort) that gives one an overview of syslog-ng's configuration: a visual graph of how the different pieces are connected.

This tool would consist of two parts: one embedded in syslog-ng that works on the instantiated internal structures of syslog-ng, and an external part that does the actual visualization.

Proposed by: Viktor Tusa

Mentor: Viktor Tusa (co-mentor Gergely Nagy)

Difficulty: Medium

Deliverables of the project:

  • A new feature added to syslog-ng that can
    • observe the configuration in use, and
    • output enough information about the configuration that is required for a meaningful visualization.
  • An external tool that turns the raw information into something visible.

Desirable skills:

  • Familiarity with syslog-ng on at least a strong user level
  • Familiarity with the C language (deep knowledge not required, but C coding experience is strongly recommended)
  • Familiarity with (or willingness to learn) data structures in C and Glib (trees, hash maps, arrays, and so on)
  • Fundamental skill in graph theory, and theory of graph drawing
  • Prior knowledge of the syslog-ng code base is recommended, but not required

What the student will learn:

  • Working with an existing, well-established software project
  • How complex configuration is read and stored in syslog-ng
  • How to graphically display the complex internal state of an application

TLS support for the MongoDB destination

The MongoDB destination is fairly complete, one of the bigger things missing is support for communicating over an encrypted medium: TLS. While implementing this may sound easy, the task has a lot of hidden complications, which make the project non-trivial (but still comfortable doable within the scope of Google Summer of Code!)

Proposed by: Gergely Nagy

Mentor: Gergely Nagy (co-mentor Viktor Tusa)

Difficulty: Medium

Deliverables of the project:

  • An improved libmongo-client, that supports communication over TLS.
  • The implementation should be secure by default, with certificate verification and strong algos chosen by default.
  • The neccessary options need to be added to syslog-ng as well.
  • Optionally, test cases that verify that the functionality is working.

Desirable skills:

  • A reasonable amount of syslog-ng knowledge, at least at a user level
  • Some experience with MongoDB (developer experience preferred, but user level experience is fine too)
  • A security-oriented mindset, preferably with prior experience working with crypto
  • Moderate level knowledge of the C language.

What the student will learn:

  • Working with an existing, well-established software project
  • The hidden complications of implementing TLS support
    • ...in the presence of automatic failover...
    • ...and a multi-threaded environment.

AMQP source

AMQP (Advanced Message Queuing Protocol) is an industry standard, enterprise messaging protocol standard, backed by many big names in the industry. While syslog-ng already supports sending messages towards an AMQP server, it does not support receiving messages from one. The aim of this project is to fix that.

Proposed by: Gergely Nagy

Mentor: Gergely Nagy (co-mentor Zoltán Fried)

Difficulty: Medium

Deliverables of the project:

  • A new source plugin that can receive messages from an AMQP server
  • The source should support subscribing to topics
  • If in header mode, the headers should be put into ther internal, syslog-ng-style representation. (The inverse of what the AMQP destination does by default)
  • Any underlying core library work, such as a generic threaded source driver class (optional).

Desirable skills:

  • A reasonable amount of syslog-ng knowledge, at least at a user level
  • Experience in writing C code, and working with third party libraries (librabbitmq-c, in this case)
  • Familiarity with messaging protocols is strongly encouraged

What the student will learn:

  • Working with an existing, well-established software project
  • Multi-threaded programming in C
  • Basic Bison & Flex skills, an introduction into writing parsers and grammars
  • Deeper understanding of enterprise-level messaging protocols

ZMQ transport

0MQ is a high-performance messaging library, which can provide an easy interface to in-process, inter-process and inter-node communication. It can transport any type of payload in a fast and reliable way, without the need of a message broker.

Using 0MQ as a transport layer in syslog-ng can provide us a flexible way to use several messaging models (publish-subscribe, push-pull, and so on) for distributing logs and events.

Proposed by: Viktor Tusa

Mentor: Viktor Tusa (co-mentor Gergely Nagy)

Difficulty: Medium-Hard

Deliverables of the project:

  • A full 0MQ transport implementation to send and receive messages for the client and server side.
  • A working model for a specified messaging pattern.

Desirable skills:

  • Familiarity with syslog-ng on at least a strong user level
  • Familiarity with message queueing (publish/subscribe model, MQ systems)
  • Familiarity with networking and the socket interface
  • Familiarity with the C language (deep knowledge not required, but C coding experience is strongly recommended)
  • Prior knowledge of the syslog-ng code base is recommended, but not required

What the student will learn:

  • Working with an existing, well-established software project
  • Simple, but efficient multi-threaded programming in C
  • Deeper knowledge of message queueing models and systems.
  • Basic Bison & Flex skills, an introduction into writing parsers and grammars

Type hinting from the start

Some of the destinations (and template functions) of syslog-ng support a feature called type-hinting: a way to give hints to the driver about the type of a particular template. This is very useful, but very awkward to have to explicitly type it out for every destination that can benefit from it, when it could be done much earlier: on the source or parser side. The goal of this project is to implement support for sources and parsers to mark a particular value with a type hint, which will then flow through the whole system. This requires extensive architectural work, to find the right spot to implement the feature at, without noticable loss of performance.

While this task is hard, and may sound scary: it is less scary, and easier than it sounds. With the correct architecture, the coding part should be fairly easy!

Proposed by: Gergely Nagy

Mentor: Gergely Nagy

Difficulty: Hard

Deliverables of the project:

  • Support in the core of syslog-ng for type hinting settable by sources and parsers.
  • Improving PatternDB to support type-hints
  • And improved JSON parser that can set type-hints
  • Type hints set by sources and parsers flow through the program, and need not be set on the destination side.

Desirable skills:

  • Strong syslog-ng knowledge, at least on a user level
  • Experience with the C language, in the areas of performance optimisation, memory model, and locking.
  • An architectural view, and experience with working on larger, deeply inter-linked code bases.

What the student will learn:

  • Architecting changes in an existing code base that has deep consequences, and need follow-up changes throughout the code base.
  • Deep understanding of syslog-ng's internal message representation and architecture.