Python Implementation
$ cat SubmitIDOC.py
#!/usr/bin/env python
#
# Purpose: Scrape queue length from TIBCO queue
#
#-------------------------------------------------------------------------------
import sys
import re
import os
import time
import getopt
import string
import datetime
#-------------------------------------------------------------------------------
__version__ = '1.2.0'
debug_flg = False
verbose_flg = False
sample_period = 10 # seconds
no_samples = 1440 # 4 hours
fd = None
#----- Queue specific variables ------------------------------------------
host = 'jinx.ix'
port = 9999
user_id = 'xxxx'
queue_name = 'Wunderland.esb.FlightPlanning.SubmitIDOC'
#-------------------------------------------------------------------------
def send(s):
os.write(fd, '%s\n' % s)
#-------------------------------------------------------------------------
def match(pat):
s = ''
while True:
m = os.read(fd, 1024)
s += m
idx = m.find(pat)
print m
if idx != -1:
break
return s
#-------------------------------------------------------------------------
SCRAPE = """
Data to be 'scraped' looks like this...
show queue xxxx
Queue: xxxx
Type: static
Properties: failsafe,*prefetch=5
JNDI Names: <none>
Bridges: <none>
Receivers: 1
Pending Msgs: 0
Delivered Msgs: 0
Pending Msgs Size: 0.0 Kb
tcp://host:9999>
"""
def scrape(s):
lines = s.split('\n')
receivers = 0
pending_cnt = 0
delivered_cnt = 0
pending_size = 0
for idx in range(len(lines)):
lines[idx] = lines[idx].replace('\r', '')
lines[idx] = re.sub('^ ', '', lines[idx])
lines[idx] = re.sub(' Msgs', 'Msgs', lines[idx])
lines[idx] = re.sub(' Size', 'Size', lines[idx])
data = lines[idx].split()
# print lines[idx], data, len(data)
if len(data) >= 2:
if data[0] == 'PendingMsgs:':
pending_cnt = int(data[1])
elif data[0] == 'DeliveredMsgs:':
delivered_cnt = int(data[1])
elif data[0] == 'Receivers:':
receivers_cnt = int(data[1])
elif data[0] == 'PendingMsgsSize:':
pending_size = float(data[1])
elif data[0] == 'Receivers:':
receivers = int(data[1])
# print "%d %d %f %d" % (pending_cnt, delivered_cnt, pending_size, receivers)
return (pending_cnt, delivered_cnt, pending_size, receivers)
#-------------------------------------------------------------------------
def do_parent():
dt_stamp = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
logname = 'SubmitIDOC_%s.log' % dt_stamp
lfd = open(logname, 'a+')
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
t_now = time.time()
lfd.write("%s ===== Start Log [%d] ======\n" % (now, t_now))
lfd.write("%s Pending Delivered Pend Size Recv\n" % now)
match('$')
send('./tibemsadmin')
match('> ')
send('connect %s:%d' % (host, port))
match(':')
send(user_id)
match(':')
send(user_id)
match('>')
cnt = 0
prompt = '%s>' % port
while cnt < no_samples:
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
# lfd.write("%s ----\n" % now)
send('show queue %s'% queue_name)
v = match(prompt)
x = scrape(v)
lfd.write("%s %6d %9d %9.1f %4d\n" % (now, x[0], x[1], x[2], x[3]))
time.sleep(sample_period)
cnt += 1
now = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
lfd.write(">>>> %s\n" % now.isoformat())
send('exit')
match('$')
time.sleep(2)
send('exit')
match('closed')
lfd.close()
#-------------------------------------------------------------------------
def do_child():
os.execv("/bin/ssh", ["ssh", "-l", "xxxx", host])
#-------------------------------------------------------------------------
def do():
global fd
(child_pid, fd) = os.forkpty()
if child_pid == 0:
do_child()
do_parent()
#-------------------------------------------------------------------------------
def usage():
USAGE = """
Usage:
$ dt.py
"""
sys.stderr.write(USAGE)
#-------------------------------------------------------------------------------
def main(argv):
global debug_flg, verbose_flg, no_orders, sample_period
loop_cnt = 1
examine_flg = False
#----- Process command line arguments ----------------------------
try:
opts, args = getopt.getopt(argv, "dehl:n:p:v",
["debug", "examine", "help", "loop", "no=", "period", "verbose"])
except getopt.GetoptError:
usage()
sys.exit(2)
else:
for opt, arg in opts:
if opt in ("-h", "--help"):
usage()
sys.exit(0)
elif opt in ("-e", "--examine"):
scrape(SCRAPE)
return 0
elif opt in ("-l", "--loop"):
loop_cnt = int(arg)
elif opt in ("-n", "--no"):
no_orders = int(arg)
elif opt in ("-p", "--period"):
sample_period = int(arg)
elif opt in ("-v", "--verbose"):
verbose_flg = True
do()
#---------------------------------------------------------------------
if __name__ == "__main__":
main(sys.argv[1:])
#---------------------------------------------------------------------