FIX мониторинг скорости сообщений
Я новичок на этом сайте, у меня ограниченные навыки написания сценариев, но я могу без проблем выбирать свой сценарий. Я хотел бы написать скрипт для мониторинга сообщений FIX, поступающих через несколько файлов журнала в режиме реального времени; разделены по счету и символу. Скорость должна быть рассчитана на поминутной основе. В настоящий момент я не уверен, является ли это посинутным или 60-секундным расчетом. Я еще ничего не написал, я просто смотрю, возможно ли это, и может ли кто-нибудь дать мне несколько советов относительно того, какой язык скриптов лучше всего использовать. Спасибо
1 ответ
Вот жестокое решение в gawk. Если в строке 35=D, мы используем регулярные выражения, чтобы разделить интересные части, метку времени (без секунд, чтобы записи попадали в классы эквивалентности на минутном уровне), а также два тега и выгружали их в "многомерный" массив Это означает, что мы используем их в качестве индексов массива. После того, как мы просмотрели все сообщения, мы сканируем массив в произвольном порядке и сбрасываем счетчики. Это ужасно некрасиво... три функции 'match' должны быть записаны как одна, и, возможно, выходные данные отсортированы, но это тривиально в оболочке с 'sort'.
#!/usr/bin/awk -f
#Out_Vec__PWKBVSP-LE2__0 [ 601] : timestamp=2013-08-12-13:00:01.235605858 :: latency=1323.3460000000 :: 8=FIX.4.4|9=0253|35=D|34=0000601|52=20130812-13:00:01.235|49=SENDER|56=RECEIVER|57=SOR|50=TRADER|128=SPSE|11=ORDERID1|453=3|448=16|447=D|452=7|448=DMA1|447=D|452=54|448=ABC|447=D|452=36|1=ACCOUNT123|55=LPSB3|54=1|60=20130812-13:00:00.000|38=6400|40=2|44=17.8700|15=BRL|59=0|10=010| :: aux_len=0,
/35=D/ {
n=match($0, /.*\|1=([^\|]+)\|.*/, tmp1);
n=match($0, /.*\|55=([^\|]+)\|.*/, tmp2);
n=match($0, /[^:]+: timestamp=([[:digit:]]+)-([[:digit:]]+)-([[:digit:]]+)-([[:digit:]]+):([[:digit:]]+).*/, ts);
# print tmp1[1], tmp2[1], ts[1], ts[2], ts[3], ts[4], ts[5];
aggr[tmp1[1], tmp2[1], ts[1], ts[2], ts[3], ts[4], ts[5]]++;
}
END {
for (i in aggr)
print i, aggr[i];
}
За образцы я получаю:
ACCOUNT123PSSA3201308121301 3
ACCOUNT123CPFE3201308121301 1
ACCOUNT123LPSB3201308121300 1
ACCOUNT123GETI4201308121301 1
которые могут быть дополнительно обработаны.