There is a great sample program amqsevt(a) for printing out data from queues in PCF format, for example event queues, and stats and accounting. I use this to output the data in json format and then process it in python scripts or other tools which handle json format.
Ive noticed a couple of tiny problems with it – which are easy to get round. I spotted these when trying to parse a file with the json data in it.
- The output is sometimes like {..} {..} which is not strictly valid json. It should be [{…},{..}] but hard to create this when streaming the data. I got json.decoder.JSONDecodeError: Extra data:….
- It sometimes reports hex strings as very large decimal numbers for example
- “msgId” : “414D5120514D412020202020202020202908BA5CF4C9AB23” is OK
- “correlId” : 0000000000000000000000000000000000000000000000000 and the json parser complains. I had json.decoder.JSONDecodeError: Expecting ‘,’ delimiter pointing to the middle of the line with the problem.
I fixed these by passing the json through the great utility jq which cleans this up.
For example
/opt/mqm/samp/bin/amqsevt -m QMA -q SYSTEM.ADMIN.TRACE.ACTIVITY.QUEUE -o json|jq -c . |python myprog.py
and use the python code
for x in range(…):
line = sys.stdin.readline()
if not line: break
j = json.loads(line)
jq also cleans up the “correlId” : 000000000000000000000000000000000000000000000 to
“correlId” : 0
Build the sample
To build amqsevta.c, I used the make file
cparms = -Wno-write-strings -g clibs = -I. -I../inc -I'/usr/include' -I'/opt/mqm/inc' rpath = -rpath=/opt/mqm/lib64 -Wl,-rpath=/usr/lib64 lparms = -L /opt/mqm/lib64 -Wl,$(rpath) -lmqic_r -lpthread % : %.c gcc -m64 $(cparms) $(clibs) $< -o $@ $(lparms)
and the command make -f xxxx amqsevta
One thought on “Getting round the problems with amqsevt.”