Skip to content

GSoC 2020 Proposal: Create MQTT source and destination (vatsal encs)

Vatsal edited this page May 5, 2020 · 8 revisions

About myself

I'm Vatsal Sisodiya, a graduate student of Masters in Software and Mechanical Engineering (dual degree) program at Concordia University.

Apart from college studies, I build cool websites in my free time. Also, I do competitive programming on LeetCode and online computer science courses (Coursera, Udacity) to improve myself as a software developer. I have 2+ years of experience in C, IoT, NodeJS, and Python programming.

I can work 20-30 hours per week or even more according to the requirements.

Location: Montreal, Canada (GMT - 4)

Contact Information

Name Link
Email vatsal.encs@gmail.com
Github https://github.com/vatsal-encs

Project overview

MQTT is a machine-to-machine (M2M)/"Internet of Things" connectivity protocol. It was designed as an extremely lightweight publish/subscribe messaging transport. It is useful for connections with remote locations where a small code footprint is required and/or network bandwidth is at a premium. The main goal is to create MQTT subscriber/publisher in syslog-ng, over the already present TCP/IP implementation.

Deliverables of the project:

  • The functioning MQTT source and/or destination
  • Criterion test cases
  • New feature documentation

Why the project is interesting for me?

I like working on MQTT based projects. I am fascinated with the internal design and architecture of syslog-ng. I have used syslog-ng in one of the IP-PBX products. This product has the feature to send SMS from an incoming email using GSM engine. To debug SMS module, I configured syslog-ng server to receive messages from SMS module. Then the server further sends the messages over the custom TCP port.

What are the knowledge areas required for the success of the project?

  • Working knowledge of MQTT publisher/subscriber
  • How a publisher/subscriber model looks like in C (Paho library)
  • Different aspects and difficulties of high-performance message transfer

I am comfortable with

  • MQTT protocol
  • Python and C programming
  • git (Contribution through Pull requests)

I need to improve on

  • Familiarity with TCP/IP and TLS
  • Creating a new source/destination in syslog-ng

Project timeline

May 4 - June 1: (Community Bonding Period)

  • Increase familiarity with the mentor and the community
  • Improve my knowledge of how to create a new source/destination module in syslog-ng

June 1 - June 15:

  • Create a new mqtt source module in syslog-ng
  • Integrate C paho library and develop a code to create mqtt subscriber
  • Add options to configure mqtt broker ip address and port number

June 16 - June 28:

  • Develop tests using criterion framework for newly added mqtt source
  • Test the code and resolve bugs
  • Code review with the mentor

June 29 - July 3:

  • Submit Phase 1 evaluation
  • Note down improvement points from mentor

July 4 - July 15:

  • Create a new mqtt destination module in syslog-ng
  • Develop a plugin code for mqtt publisher in destination
  • Add options to configure mqtt broker ip address and port number

July 16 - July 26:

  • Develop test cases for mqtt destination module
  • Code review and changes
  • Bug fixing

July 27- July 31:

  • Submit Phase 2 evaluation

Aug 1 - Aug 17:

  • Complete the remaining tasks
  • Write documentation

Aug 17 - Aug 23:

  • Buffer Period
  • Review both the code and the documentation

Aug 24 - Aug 31:

  • Make a new pull request on syslog-ng for all completed tasks of mqtt project
  • Fix code reviews of pull request
  • Submit final evaluation

Contributions to syslog-ng:

I am actively participating in gitter conversations. Also, I am directly contributing to the syslog-ng's issues.

Pull Requests (March 2020 - Present)

No. Description Link
1 scl: add sumologic-http and sumologic-syslog #3194
2 rewrite: added conditional set-tag rule #3190
3 example-msg-generator: support fast message generation #3245
4 http: add support for proxy #3253
5 afsocket: fix typo of so_keepalive option #3264
Clone this wiki locally