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=6‌​400|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

которые могут быть дополнительно обработаны.

Другие вопросы по тегам