Asterisk полный лог парсер - PullRequest
0 голосов
/ 12 апреля 2011

Я хочу сделать парсер журнала для АТС Asterisk, но не знаю с чего начать. Я понял, что мне нужно из журнала. строки, которые мне нужны, выглядят так: [Apr 12 11:11:56] VERBOSE[3359] logger.c: -- Called 111 номер в VERBOSE [....] одинаков для 1 звонка.

Первое, что мне нужно сделать, это получить строки, содержащие этот номер VERBOSE, чтобы я мог идентифицировать этот вызов. во-вторых, читать текст, есть несколько стандартных текстов, поэтому его будет не сложно распознать.

Дело в том, что я хотел бы прочитать его в режиме реального времени (файл записывается в режиме реального времени) и отобразить его на веб-странице. PHP или Ajax.

То, что я хочу сделать, это показать строки на веб-странице, когда пользователи звонят. и новый вызов, который будет добавлен к текущему / отвеченному вызову.

Любые советы, примеры будут великолепны.

Спасибо, Себастьян

1 Ответ

1 голос
/ 18 апреля 2011

Я бы сделал это в 2 программах, которые могут работать как простые программы CGI.

  1. Первая программа анализирует журнал и показывает дату и идентификатор вызова.Такой идентификатор будет ссылкой на 2-ю программу.В Python вы можете использовать регулярное выражение:

    # 1st group - date, 2nd - callid
    RX_VERBOSE =  re.compile(r'(.*) VERBOSE\[(\d+)\] ')
    
    def make_link(call_id):
        return(' <a href="show_call.cgi?call_id=%d>%d</a>' % (call_id, call_id))
    
    def show_calls(logfn):
        call_ids = []
        f = open(logfn)
        for line in f:
            rx = RX_VERBOSE.search(line)
            if rx:
                call_id = int(rx.group(2))
                if not call_id in call_ids:
                    print('%s %s' % (rx.group(1), make_link(call_id)))
                    call_ids.append(call_id)
        f.close()
    
  2. Эта программа покажет строки с идентификатором вызова:

    def show_call_datails(logfn, call_id):
        search_str = ' VERBOSE[%s] ' % call_id
        f = open(logfn)
        for line in f:
            if search_str in line:
                print(line.rstrip())
        f.close()
    
...