diff options
author | Aravinda VK <avishwan@redhat.com> | 2016-08-01 17:16:50 +0530 |
---|---|---|
committer | Aravinda VK <avishwan@redhat.com> | 2016-08-09 00:24:32 -0700 |
commit | f5fbf46d82e4ea5325e89459c5ad9f753f1ca66b (patch) | |
tree | a5ea957e4fe015831b67358fa5b82852b15df746 /events | |
parent | 720b63c24b07ee64e1338db28de602b9abbef0a1 (diff) |
eventsapi: Python library for gf_event
Python library to emit Events from Geo-replication or any other Python apps
running in storage nodes.
Add $LIBEXEC/glusterfs/events to Python path to use gf_event
gf_event(event_type, **kwargs)
For example,
sys.path.insert(1, "LIBEXECDIR/glusterfs")
from events.gf_event import gf_event
from events import eventtypes
gf_event(eventtypes.GEOREP_FAULTY,
volname="gv1",
slaveuser="root",
slavehost="node1",
slavevol="gv2")
Errors will be logged in $LOGDIR/glusterfs/events.log
BUG: 1362144
Change-Id: I2af2bd77f9961975e4387006b9e99e4543e12b57
Signed-off-by: Aravinda VK <avishwan@redhat.com>
Reviewed-on: http://review.gluster.org/15063
Smoke: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Samikshan Bairagya <samikshan@gmail.com>
Reviewed-by: Prashanth Pai <ppai@redhat.com>
Diffstat (limited to 'events')
-rw-r--r-- | events/eventskeygen.py | 6 | ||||
-rw-r--r-- | events/src/Makefile.am | 5 | ||||
-rw-r--r-- | events/src/gf_event.py | 48 |
3 files changed, 56 insertions, 3 deletions
diff --git a/events/eventskeygen.py b/events/eventskeygen.py index bccb91a3a64..7357d8e84a3 100644 --- a/events/eventskeygen.py +++ b/events/eventskeygen.py @@ -78,4 +78,8 @@ if gen_header_type == "PY_HEADER": f.write("all_events = [\n") for ev in keys: f.write(' "{0}",\n'.format(ev)) - f.write("]\n") + + f.write("]\n\n") + + for idx, ev in enumerate(keys): + f.write("{0} = {1}\n".format(ev.replace("EVENT_", ""), idx)) diff --git a/events/src/Makefile.am b/events/src/Makefile.am index 8b2150e3aa9..423bc8891fb 100644 --- a/events/src/Makefile.am +++ b/events/src/Makefile.am @@ -1,6 +1,6 @@ noinst_PYTHON = $(top_srcdir)/events/eventskeygen.py EXTRA_DIST = glustereventsd.py __init__.py eventsapiconf.py.in \ - handlers.py utils.py peer_eventsapi.py eventsconfig.json + handlers.py utils.py peer_eventsapi.py eventsconfig.json gf_event.py BUILT_SOURCES = eventtypes.py CLEANFILES = eventtypes.py @@ -10,7 +10,8 @@ eventspeerscriptdir = $(libexecdir)/glusterfs eventsconfdir = $(sysconfdir)/glusterfs eventsconf_DATA = eventsconfig.json -events_PYTHON = __init__.py eventsapiconf.py eventtypes.py handlers.py utils.py +events_PYTHON = __init__.py eventsapiconf.py eventtypes.py handlers.py \ + utils.py gf_event.py events_SCRIPTS = glustereventsd.py eventspeerscript_SCRIPTS = peer_eventsapi.py diff --git a/events/src/gf_event.py b/events/src/gf_event.py new file mode 100644 index 00000000000..0924a65dddb --- /dev/null +++ b/events/src/gf_event.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# Copyright (c) 2016 Red Hat, Inc. <http://www.redhat.com> +# This file is part of GlusterFS. +# +# This file is licensed to you under your choice of the GNU Lesser +# General Public License, version 3 or any later version (LGPLv3 or +# later), or the GNU General Public License, version 2 (GPLv2), in all +# cases as published by the Free Software Foundation. +# + +import socket +import time + +from eventsapiconf import SERVER_ADDRESS +from eventtypes import all_events + +from utils import logger, setup_logger + +# Run this when this lib loads +setup_logger() + + +def gf_event(event_type, **kwargs): + if not isinstance(event_type, int) or event_type >= len(all_events): + logger.error("Invalid Event Type: {0}".format(event_type)) + return + + try: + client = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + client.connect(SERVER_ADDRESS) + except socket.error as e: + logger.error("Unable to connect to events.sock: {0}".format(e)) + return + + # Convert key value args into KEY1=VALUE1;KEY2=VALUE2;.. + msg = "" + for k, v in kwargs.items(): + msg += "{0}={1};".format(k, v) + + # <TIMESTAMP> <EVENT_TYPE> <MSG> + msg = "{0} {1} {2}".format(int(time.time()), event_type, msg.strip(";")) + + try: + client.sendall(msg) + except socket.error as e: + logger.error("Unable to Send message: {0}".format(e)) |