예제 #1
0
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,
예제 #2
0
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()
예제 #3
0
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)
예제 #4
0
def execute(sql):
    conn = db.mysql_conn()
    cursor = conn.cursor()
    cursor.execute(sql)
    conn.commit()
예제 #5
0
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
        }   
예제 #6
0
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()