=============
building-heka
=============


building-heka
=============

Hacking on heka log router ############################

download and install go

.. code-block:: bash

wget http://go.googlecode.com/files/go1.2.1.linux-amd64.tar.gz

sudo tar -C /usr/local -xzf go1.2.1.linux-amd64.tar.gz

# this is a hack, use soft links or install in the proper location the
first time sudo mv /usr/local/go/\* /usr/bin

Build heka
==========

.. code-block:: bash

source build.sh

Test heka
=========

So first you need to make sure you have all the dependencies needed to
build heka, the best way to find out is to ``Build heka``\ \_.

If that works, make heka/build your current working directory and run
either:

.. code-block:: bash

make test

or:

.. code-block:: bash

ctest

to test only the code you are changing run:h

.. code-block:: bash

# ctest -R [desired-test] ctest -R tcp

how I resolved regexp default delimiter defect
==============================================

This patch resolves a defect that causes the regexp default config
delimiter to always be clobbered, now we check before we step.

::

   `modified:   plugins/tcp/tcp_input.go`

Here is the manual test case:

.. code-block:: toml

::

   [TcpInput]
   address = "127.0.0.1:5565"
   parser_type = "regexp"

   [STDOUT]
   type = "LogOutput"
   message_matcher = "TRUE"
   payload_only = true

and I used netcat to test:

.. code-block:: bash

::

   nc 127.0.0.1 5565
   hello, heka!

I tried to run the unit tests in the code base with ``go test`` but I
got errors about missing libraries …

Ok, I learned from reviewing TravisCI output that I needed
``sudo apt-get install protobuf-compiler`` in order to run ``go test``.

heka and ssl
============

heka supports SSL, for testing I used self signed certs, it looked
something like this:

On the outbound TCP hekad “client” configuration I added the following:

.. code-block:: bash

use_tls = true

::

    [tcp:9612.tls]
    insecure_skip_verify = true

On the inbound TCP hekad “server” configuration I added the following:

.. code-block:: bash

use_tls = true

::

    [tcp:9612.tls]
    cert_file = "/etc/ssl/certs/ssl-cert-snakeoil.pem"
    key_file = "/etc/ssl/private/ssl-cert-snakeoil.key"

Notice that we are skipping crt verification which is susceptible to
man-in-the-middle-attacks. Also we are not using client verification.
Heka supports both.
