summaryrefslogtreecommitdiffstats
path: root/examples/qpid-alert-watcher
blob: 5e40ae734f3238d8440eed80514df1832e2dc4e9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/usr/bin/env python2
#
#   logactio  -  simple framework for doing configured action on certain
#                log file events
#
#   Copyright 2012   David Sommerseth <dazo@users.sourceforge.net>
#
#   This program is free software; you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation; either version 2 of the License.
#
#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public License
#   along with this program; if not, write to the Free Software
#   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
#
#   For the avoidance of doubt the "preferred form" of this code is one which
#   is in an open unpatent encumbered format. Where cryptographic key signing
#   forms part of the process of creating an executable the information
#   including keys needed to generate an equivalently functional executable
#   are deemed to be part of the source code.
#
#
#  This is a simple Qpid consumer script, which reports all alerts to stdout
#

import sys, json, socket
from optparse import OptionParser
from qpid.util import connect
from qpid.connection import Connection
from qpid.datatypes import Message, RangedSet, uuid4
from qpid.queue import Empty

if __name__ == "__main__":
    parser = OptionParser()
    parser.add_option("--broker", action="store", dest="broker",
                      default="localhost", metavar="HOSTNAME",
                      help="Qpid broker to connect to")
    parser.add_option("--port", action="store", dest="port",
                      default=5672, metavar="PORT",
                      help="Qpid broker port")
    parser.add_option("--exchange", action="store", dest="exchange",
                      metavar="EXCHANGE",
                      help="Qpid exchange to pull messages from")
    parser.add_option("--bind-key", action="store", dest="bindkey",
                      metavar="BIND-KEY",
                      help="Routing key to bind against")
    (opts, args) = parser.parse_args()

    if opts.exchange is None or opts.bindkey is None:
        print "** ERROR ** Missing --exchange or --bind-key"
        sys.exit(1)

    qpidsock = connect(opts.broker, opts.port)
    connection = Connection (sock=qpidsock, host=opts.broker, service="qpidd")
    connection.start()
    session = connection.session(str(uuid4()))

    session.queue_declare(queue="qpidalerter", exclusive=True)
    session.exchange_bind(exchange=opts.exchange, queue="qpidalerter",
                          binding_key=opts.bindkey)
    local_queue = session.incoming("local_qpidalerter")
    session.message_subscribe(queue="qpidalerter", destination="local_qpidalerter")
    local_queue.start()

    print "Started qpid-alert-watcher\n"
    while True:
        try:
            message = local_queue.get()
            alert = json.loads(message.body)
            session.message_accept(RangedSet(message.id))
            print "== LogActio Alert ==============================================="
            print "Alert prefix: %-20s [Count %i, threshold %i]" % (
                alert["prefix"], alert["count"], alert["threshold"])
            print "Logfile: %s" % alert["logfile"]
            if alert["message"] is not None:
                almsg = "\n         ".join(alert["message"].split("|"))
            else:
                almsg = "(No message)"
            print "Message: %s" % almsg
            print "-----------------------------------------------------------------"

        except Empty:
            print ">> (Empty message received)"

        except socket.gaierror, e:
            print "** WARNING ** Socket error - %s" % str(e)
            print "              Trying again in 10 seconds"
            time.sleep(10)

        except socket.error, e:
            print "** WARNING ** Socket error - %s" % str(e)
            print "              Trying again in 20 seconds"
            time.sleep(20)