from db import mysql_conn from datetime import datetime import sys import json if len(sys.argv) > 1: data_query = sys.argv[1] else: data_query = datetime.now().strftime('%Y-%m-%d') my_conn = mysql_conn() fields = 'calldate, src, dst, channel, dstchannel, lastapp, billsec, disposition, accountcode, userfield' query = "SELECT {} FROM cdr WHERE calldate like '{}%' and accountcode != ''".format( fields, data_query) result = my_conn.query(query) result_list = [] for (calldate, src, dst, channel, dstchannel, lastapp, billsec, disposition, accountcode, userfield) in result: print(calldate, src, dst, channel, dstchannel, lastapp, billsec, disposition, accountcode, userfield) result_list.append({ 'calldate': calldate.strftime('%Y-%m-%d %H:%M:%S'), 'src': src, 'dst': dst, 'channel': channel, 'dstchannel': dstchannel, 'lastapp': lastapp, 'billsec': billsec, 'disposition': disposition,
import db def get_key(): rand = random.randint(1, db.records) return "KEY:" + str(rand) if __name__ == "__main__": val = get_key() print("\nRealizando consultas a MySQL") print(f"\nObteniendo 1 clave aleatoria: {val}") sql = "SELECT password FROM users WHERE username='******'" # Una clave conn = db.mysql_conn() cursor = conn.cursor() start_time = time.time() cursor.execute(sql) result = cursor.fetchone() seconds = (time.time() - start_time) print(f" Se obtuvo {result[0]} en {seconds} segundos\n") # 10 claves start_time = time.time() print(f"\nObteniendo 10 clave aleatorias:") for n in range(10): val = get_key() sql = "SELECT password FROM users WHERE username='******'" cursor.execute(sql) result = cursor.fetchone()
from mysql.connector import errorcode import db # connect to redis client = db.redis_conn() # set a key client.set('test-redis', 'Redis OK') # get a value value = client.get('test-redis') print(value) # Test connection with mysql try: db_connection = db.mysql_conn() print("Database connection made!") except connector.Error as error: if error.errno == errorcode.ER_BAD_DB_ERROR: print("Database doesn't exist") elif error.errno == errorcode.ER_ACCESS_DENIED_ERROR: print("User name or password is wrong") else: print(error) else: db_connection.close() # Test connection with cassandra cluster session = db.cassandra_conn() #session.execute('USE CityInfo') rows = session.execute('SELECT * FROM users') for row in rows: print(row.age, row.name, row.username)
def execute(sql): conn = db.mysql_conn() cursor = conn.cursor() cursor.execute(sql) conn.commit()
def gerar_csv( entrantes_tipo=[ 'ENT' ], data=datetime.now().strftime('%Y-%m-%d'), tipo='csv' ): dados_dict = { 'chamadas' : [], 'resumo' : { 'agentes' : [], 'queues' : [] } } exten_dict = exten.get_list() calls = 'data;origem;destino;duracao;status;tipo;queue;lastapp;origem_transf \n' resumo_calls = 'Representante;Sainte Total;Não Atendidas;Ativos;(-)1 Min.;Entrante Total;Ocupado;Não Atendidas;Receptivas;(-)1 Min.;Tot. Contatos;Perdidas;% Perdidas \n' my_conn = mysql_conn() fields = 'calldate, src, dst, channel, dstchannel, lastapp, billsec, disposition, accountcode' query = "SELECT {} FROM cdr WHERE calldate LIKE '{}%' and accountcode != ''".format( fields, data, ) result = my_conn.query(query) consolidado = {} for username in exten_dict: extensao = exten_dict[username] consolidado[extensao] = { 'sainte_total': 0, 'sainte_nao_atendidas': 0, 'sainte_ocupado': 0, 'ativos': 0, 'sainte_menos_1_min': 0, 'entrante_total': 0, 'entrante_ocupado': 0, 'entrante_nao_atendidas': 0, 'receptivos': 0, 'entrante_menos_1_min': 0, } for (calldate, src, dst, channel, dstchannel, lastapp, billsec, disposition, accountcode) in result: data = calldate.strftime("%Y-%m-%d %H:%M:%S") origem = get_exten(channel) destino = get_exten(dstchannel) #Chamadas ORIGEM if origem in exten_dict: origem = exten_dict[origem] #Contabilizando SAINTES if accountcode not in entrantes_tipo: consolidado[origem]['sainte_total'] += 1 #Calculando duracao try: duracao = int(billsec) except: duracao = 0 if duracao >= 60: consolidado[origem]['ativos'] += 1 else: if disposition == 'NO ANSWER': consolidado[origem]['sainte_nao_atendidas'] += 1 elif disposition == 'BUSY': consolidado[origem]['sainte_ocupado'] += 1 else: consolidado[origem]['sainte_menos_1_min'] += 1 else: origem = src #CHAMADAS DESTINO if destino in exten_dict: destino = exten_dict[destino] #Contabilizando ENTRANTES if accountcode in entrantes_tipo: consolidado[destino]['entrante_total'] += 1 #Calculando duracao try: duracao = int(billsec) except: duracao = 0 if duracao >= 60: consolidado[destino]['receptivos'] += 1 else: if disposition == 'NO ANSWER': consolidado[destino]['entrante_nao_atendidas'] += 1 elif disposition == 'BUSY': consolidado[destino]['entrante_ocupado'] += 1 else: consolidado[destino]['entrante_menos_1_min'] += 1 else: destino = dst if lastapp == 'Queue': queue = dst else: queue = '-' calls += '{};{};{};{};{};{};{};{};{} \n'.format( data, origem, destino if lastapp != 'Transferred Call' else dst, billsec, disposition, accountcode, queue, lastapp, destino if lastapp == 'Transferred Call' else '' ) dados_dict['chamadas'].append( { 'data' : data, 'origem' : origem, 'destino' : destino if lastapp != 'Transferred Call' else dst, 'billsec' : billsec, 'disposition' : disposition, 'accountcode' : accountcode, 'queue' : queue, 'lastapp' : lastapp, 'origem_transf' : destino if lastapp == 'Transferred Call' else '' } ) ## Dados de filas my_conn.set_db('fila') fields = "queuename, event, parameter1, parameter2, parameter3, parameter4" query = "SELECT {} FROM queue WHERE periodo LIKE '{}%'".format( fields, data ) events = my_conn.query(query) queues_dict = {} for (queuename, event, parameter1, parameter2, parameter3, parameter4) in events: if queuename != 'NONE': if queuename not in queues_dict: queues_dict[queuename] = { 'atendidas' : 0, 'transferidas' : 0, 'abandonadas' : 0, 'tempo_espera' : 0, 'tempo_conversacao' : 0, 'tempo_abandono' : 0 } if event == "COMPLETEAGENT" or event == "COMPLETECALLER": queues_dict[queuename]['atendidas'] += 1 queues_dict[queuename]['tempo_espera'] += int(parameter1) queues_dict[queuename]['tempo_conversacao'] += int(parameter2) elif event == "TRANSFER": queues_dict[queuename]['transferidas'] += 1 queues_dict[queuename]['tempo_espera'] += int(parameter3) elif event == "ABANDON": queues_dict[queuename]['abandonadas'] += 1 queues_dict[queuename]['tempo_abandono'] += int(parameter3) my_conn.disconnect() #Criando arquivo consolidado #Representante;Sainte Total;Não Atendidas;Ativos;(-)1 Min.;Entrante Total;Ocupado;Não Atendidas;Receptivas;(-)1 Min.;Tot. Contatos;Perdidas;% Perdidas for extensao in consolidado: total_contatos = consolidado[extensao]['sainte_total'] + consolidado[extensao]['entrante_total'] perdidas = consolidado[extensao]['sainte_nao_atendidas'] + consolidado[extensao]['entrante_nao_atendidas'] + consolidado[extensao]['entrante_ocupado'] perdidas = perdidas + consolidado[extensao]['sainte_menos_1_min'] + consolidado[extensao]['entrante_menos_1_min'] if total_contatos != 0: perdidas_porcentagem = round((perdidas*100)/total_contatos) else: perdidas_porcentagem = 0 if total_contatos != 0: resumo_calls += '{};{};{};{};{};{};{};{};{};{};{};{};{} \n'.format( extensao, consolidado[extensao]['sainte_total'], consolidado[extensao]['sainte_nao_atendidas'], consolidado[extensao]['ativos'], consolidado[extensao]['sainte_menos_1_min'], consolidado[extensao]['entrante_total'], consolidado[extensao]['entrante_ocupado'], consolidado[extensao]['entrante_nao_atendidas'], consolidado[extensao]['receptivos'], consolidado[extensao]['entrante_menos_1_min'], total_contatos, perdidas, perdidas_porcentagem ) dados_dict['resumo']['agentes'].append( { 'extensao' : extensao, 'sainte_total' : consolidado[extensao]['sainte_total'], 'sainte_nao_atendidas' : consolidado[extensao]['sainte_nao_atendidas'], 'ativos' : consolidado[extensao]['ativos'], 'sainte_menos_1_min' : consolidado[extensao]['sainte_menos_1_min'], 'entrante_total' : consolidado[extensao]['entrante_total'], 'entrante_ocupado' : consolidado[extensao]['entrante_ocupado'], 'entrante_nao_atendidas' : consolidado[extensao]['entrante_nao_atendidas'], 'receptivos' : consolidado[extensao]['receptivos'], 'entrante_menos_1_min' : consolidado[extensao]['entrante_menos_1_min'], 'total_contatos' : total_contatos, 'perdidas' : perdidas, 'perdidas_porcentagem' : perdidas_porcentagem } ) resumo_calls += "\n\n\n\n" resumo_calls += "Fila; Chamadas atendidas (un); Espera Média (seg); Conversação Média (seg); Transferidas (un); Abandonadas(un); Abandono Médio (seg) \n" for queue in queues_dict: if queues_dict[queue]['atendidas'] != 0 or queues_dict[queue]['transferidas'] != 0: espera_media = queues_dict[queue]['tempo_espera'] / (queues_dict[queue]['atendidas'] + queues_dict[queue]['transferidas']) else: espera_media = 0 if queues_dict[queue]['atendidas']: conversacao_media = queues_dict[queue]['tempo_conversacao'] / queues_dict[queue]['atendidas'] else: conversacao_media = 0 if queues_dict[queue]['abandonadas']: abandono_medio = queues_dict[queue]['tempo_abandono'] / queues_dict[queue]['abandonadas'] else: abandono_medio = 0 resumo_calls += "{};{};{};{};{};{};{} \n".format( queue, queues_dict[queue]['atendidas'], round(espera_media), round(conversacao_media), queues_dict[queue]['transferidas'], queues_dict[queue]['abandonadas'], round(abandono_medio) ) dados_dict['resumo']['queues'].append( { 'queue' : queue, 'atendidas' : queues_dict[queue]['atendidas'], 'espera_media' : round(espera_media), 'conversacao_media' : round(conversacao_media), 'transferidas' : queues_dict[queue]['transferidas'], 'abandonadas' : queues_dict[queue]['abandonadas'], 'abandono_medio' : round(abandono_medio) } ) if tipo == 'dict': dados_dict['csv'] = { 'chamadas' : calls, 'resumo' : resumo_calls } return dados_dict else: return { 'chamadas' : calls, 'resumo' : resumo_calls }
def insert_to_mysql(data): execute("DROP TABLE IF EXISTS comentario") execute("DROP TABLE IF EXISTS tweet") execute("DROP TABLE IF EXISTS usuario") execute("""CREATE TABLE usuario ( id int NOT NULL PRIMARY KEY, usuario varchar(45), nombre varchar(100), direccion varchar(200), email varchar(55), descripcion varchar(55), foto_perfil varchar(45) ) """) execute("""CREATE TABLE tweet ( id int NOT NULL PRIMARY KEY, fk_usuario int NOT NULL, fecha_publicacion datetime, contenido varchar(55), likes int, retwits int, FOREIGN KEY (fk_usuario) REFERENCES usuario(id) ) """) execute("""CREATE TABLE comentario ( id int NOT NULL PRIMARY KEY, fk_tweet int NOT NULL, contenido varchar(55), autor varchar(55), fecha_comentario datetime, FOREIGN KEY (fk_tweet) REFERENCES tweet(id) ) """) insert_user = """INSERT INTO usuario ( id, usuario, nombre, direccion, email, descripcion, foto_perfil ) VALUES (%s, %s, %s, %s, %s, %s, %s)""" insert_tweet = """INSERT INTO tweet ( id, fk_usuario, fecha_publicacion, contenido, likes, retwits ) VALUES (%s, %s, %s, %s, %s, %s)""" insert_comentario = """INSERT INTO comentario ( id, fk_tweet, contenido, autor, fecha_comentario ) VALUES (%s, %s, %s, %s, %s)""" conn = db.mysql_conn() cursor = conn.cursor() user_id = 0 tweet_id = 0 comment_id = 0 for user in data: val = ( user_id, user['usuario'], user['nombre'], user['direccion'], user['email'], user['descripcion'], user['foto_perfil'], ) cursor.execute(insert_user, val) for tweet in user['tweets']: val = ( tweet_id, user_id, tweet['fecha_publicacion'], tweet['contenido'], tweet['likes'], tweet['retwits'], ) cursor.execute(insert_tweet, val) for comment in tweet['comentarios']: val = ( comment_id, tweet_id, comment['contenido'], comment['autor'], comment['fecha_comentario'], ) cursor.execute(insert_comentario, val) comment_id += 1 tweet_id += 1 user_id += 1 conn.commit()