Multi script langyage Stream Processing Offload Agent
-----------------------------------------------------

This agent receive SPOP message and process it with script languages. The
language register callback with a message. Each callback receive the list
of arguments with types according with the language capabilities. The
callback write variables which are sent as response when the processing
is done.


  Prerequirement
----------------

You have to install the development packages, either from the
distribution repositories or from the source.

CentOS/RHEL: sudo yum install python3-devel

The current minimal python version compatible with this library is 2.7.
It's recommended to use python version 3 where possible due to python 2 deprecation.


  Compilation
---------------

The server currently supports Lua and Python. Type "make" with the options:
USE_LUA=1 and/or USE_PYTHON=1.

You can add LUA_INC=.. LUA_LIB=.. to the make command to set the paths to
the lua header files and lua libraries.

Similarly, you can add PYTHON_INC=.. PYTHON_LIB=.. to the make command to set the paths to
the python header files and python libraries.
By default, it will try to compile by detecting the default python 3 parameters.
It will fall back to python 2 if python 3 is not available.

  Start the service
---------------------

After you have compiled it, to start the service, you just need to use "spoa"
binary:

    $> ./spoa  -h
    Usage: ./spoa [-h] [-d] [-p <port>] [-n <num-workers>]
        -h                  Print this message
        -d                  Enable the debug mode
        -p <port>           Specify the port to listen on (default: 12345)
        -n <num-workers>    Specify the number of workers (default: 5)
        -f <file>           Load script according with the supported languages

The file processor is recognized using the extension. .lua or .luac for lua and
.py for python. Start example:

    $> ./spoa -d -f ps_lua.lua

	 $> ./spoa -d -f ps_python.py


  Configure
-------------

Sample configuration are join to this server:

  spoa-server.conf      : The HAProxy configuration file using SPOE server
  spoa-server.spoe.conf : The SPOP description file used by HAProxy
  ps_lua.lua            : Processing Lua example
  ps_python.py          : Processing Python example


  Considerations
------------------

This server is a beta version. It works fine, but some improvement will be
welcome:

Main process:

 * Improve log management: Today the log are sent on stdout.
 * Improve process management: The dead process are ignored.
 * Implement systemd integration.
 * Implement threads: It would be fine to implement thread working. Shared
   memory is welcome for managing database connection pool and something like
   that.
 * Add PHP support and some other languages.

Python:

 * Improve reporting: Catch python error message and report it in the right
   place. Today the error are dumped on stdout. How using syslog for logging
   stack traces ?

Maybe some other things...
