panasonic-log-reader/data_reader.py
2017-07-18 14:24:09 +03:00

114 lines
4.2 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/python3.5
#########################################################
# Скрипт разбора лога АТС Panasonic TDA200
# вызов:
# для обработки файла созданного, к примеру, программой SMDRLog
# > python data_reader.py -file TDA20013082015_12052016.lg
# для чтения данных напрямую с com-порта АТС
# > python data_reader.py -port /dev/ttyUSB0
#########################################################
import pymysql
import sys
import re
# параметры соединения с СУБД
db_host = 'kis'
db_user = 'ats'
db_pass = 'T,fkfqneyU'
def insert(**kwargs):
"""Вставка данных в БД. В качестве параметров список полей и значений"""
qwery = 'INSERT INTO `cdr` ('
for key in kwargs.keys():
qwery = qwery + '`' + key +'`, '
qwery = qwery.rstrip(', ') + ') VALUES('
for key in kwargs.keys():
qwery = qwery + '"' + kwargs.get(key) +'", '
qwery = qwery.rstrip(', ') + ');'
print(qwery)
conn = pymysql.connect(host=db_host, database='ats', user=db_user, password=db_pass, charset='utf8')
cur = conn.cursor()
cur.execute(qwery)
conn.commit()
cur.close()
conn.close()
def parce_string(line):
"""Получает на вход строку и раскидывает её в нужном виде и пишет в файл"""
if line[:3] == "---" or line == "" or line[3:7] == "Date":
print(line)
return
print(line)
# Разбор строки
# Преобразуем дату к виду "ДД/ММ/ГГГГ"
call_date = line[:2] + "." + line[3:5] + ".20" + line[6:8]
call_date = "20" + line[6:8] + "/" + line[3:5] + "/" + line[:2]
call_time = line[9:14].strip()
int_number = line[19:22].strip()
ext_co_line = line[23:25].strip()
dial_number = line[26:51].strip()
ring = line[52:56].strip()
call_duration = re.sub("'", ":", line[57:65].strip())
acc_code = line[66:77].strip()
call_code = line[77:81].strip()
# Проверяем признак входящщего звонка
if dial_number == "<I>":
call_direct = "Входящий"
dial_number = ""
elif dial_number[:3] == "EXT":
call_direct = "Внутренний"
dial_number = dial_number[3:]
else: call_direct = "Исходящий"
insert(call_date=call_date,
call_time=call_time,
int_number=int_number,
ext_co_line=ext_co_line,
dial_number=dial_number,
ring=ring,
call_duration=call_duration,
acc_code=acc_code,
call_code=call_code,
call_direct=call_direct)
def port_data_read(port_name):
"""Чтение данных из последовательного порта, тестовая реализация"""
import serial
ser = serial.Serial(port_name)
#ser = serial.Serial("com1")
ser.baudrate = 9600
print(ser)
while True:
line = ser.readline()
line = line.decode()
line = line.rstrip()
parce_string(line)
if __name__ == "__main__":
# В зависисмости от ключей вызова скрипта выполняем ту или иную процедуру
# соответсвенно -port - чтение из порта, -file - чтение из файла
if len(sys.argv) > 2:
if sys.argv[1] == '-port':
#action = 'read_port'
port_name = sys.argv[2]
port_data_read(port_name)
if sys.argv[1] == '-file':
#action = 'read_file'
log_file_name = sys.argv[2]
log = open(log_file_name)
for line in log:
parce_string(line)
log.close()
else:
print ("\nФормат вызова:\n- для обработки файла\
\n # python data_reader.py -file TDA20013082015_12052016.lg\
\n- для чтения данных напрямую с com-порта АТС\
\n # python data_reader.py -port /dev/ttyUSB0\n")
sys.exit(1)