Home

Awesome

Light Weight Event System (LWES)

Click here for more information about lwes. For more information about using lwes from erlang read on.

Creating Events

There are 2 ways of creating events, the functional way

Event0 = lwes_event:new ("MyEvent"),
Event1 = lwes_event:set_uint16 (Event0, "MyUint16", 25),

or via records like

Event = #lwes_event {
          name = "MyEvent",
          attrs = [{uint16, "MyUint16", 25}]
        },

Emitting to a single channel

If you are using multicast, or only want to emit to a single channel you can open it as follows

{ok, Channel0} = lwes:open (emitter, {Ip, Port})
Channel1 = lwes:emit (Channel0, Event1).

Emit to several channels

If you aren't using multicast but would like to emit to several machines, or groups of machines you can with slightly different config,

% emit to 1 of a set in a round robin fashion
{ok, Channels0} = lwes:open (emitters, {1, [{Ip1,Port1},...{IpN,PortN}]})
Channels1 = lwes:emit (Channels0, Event1)
Channels2 = lwes:emit (Channels1, Event2)
...
lwes:close (ChannelsN)

% emit to 2 of a set in an m of n fashion (ie, emit to first 2 in list,
% then 2nd and 3rd, then 3rd and 4th, etc., wraps at end of list)
{ok, Channels0} = lwes:open (emitters, {2, [{Ip1,Port1},...{IpN,PortN}]})

Listening via callback

{ok, Channel} = lwes:open (listener, {Ip, Port})
lwes:listen (Channel, Fun, Type, Accum).

Fun is called for each event

Type is one of

<table> <tr> <th>raw</th><td>callback is given raw udp structure, use lwes_event:from_udp to turn into event</td> </tr> <tr> <th>list</th><td>callback is given an #lwes_event record where the name is a binary, and the attributes is a proplist where keys are binaries, and values are either integers (for lwes int types), binaries (for lwes strings), true|false atoms (for lwes booleans), or 4-tuples (for lwes ip addresses)</td> </tr> <tr> <th>tagged</th><td>callback is given an #lwes_event record where the name is a binary, and the attributes are 3-tuples with the first element the type of data, the second the key as a binary and the third the values as in the list format</td> </tr> <tr> <th>dict</th><td>callback is given an #lwes_event record where the name is a binary, and the attributes are a dictionary with a binary key and value according to the type</td> </tr> <tr> <th>json</th><td>this returns a proplist instead of an #lwes_event record. The valuse are mostly the same as list, but ip addresses are strings (as binary). This should means you can pass the returned value to mochijson2:encode (or other json encoders), and have the event as a json document</td> </tr> </table>

Closing channel

lwes:close (Channel)