'-', "matricula" => '-', "nome" => '-', "tempo_login" => '00:00:00', "modo_atendimento" => '-', "origem_destino" => '-', "status" => 'LOGOFF', "duracao" => '00:00:00' ); $infoFila = array( "fila" => '-', "abandonadas" => '0', "atendidas_pa" => '0', "espera" => '0', "tme" => '00:00:00', "tma" => '00:00:00', "qt_fila" => '0' ); $infoFilaOld = array( "fila" => '-', "abandonadas" => '0', "atendidas_pa" => '0', "espera" => '0', "tme" => '00:00:00', "tma" => '00:00:00', "qt_fila" => '0' ); /* * Informações da chamada corrente */ $queryAgente = "select ramal, matricula, nome, (LOCALTIMESTAMP(0) - tempo_login) as tempo_login, modo_atendimento, origem_destino, status, (LOCALTIMESTAMP(0) - duracao) as duracao from pbx_supervisor_agentes where matricula = '$matricula' "; $queryFila = GetQueryInfoFila($nomeDac, $matricula); echo $queryFila; try { //Indica o tempo entre as requisições para verifica o status do agente no banco de dados define("TEMPO_DORME", 10); define("MAX_ERROS", 10); //Variavel armazena o status do agente na sessao atual // if(!$_SESSION[AGT_CONECT]) // throw new Exception ('O agente não esta logado!'); //Tolerancia de tentavias de acesso ao banco de dados $numErros = 0; //Id do bloco de informacoes retornado $idBloco = 1; //Buffer necessário para o browser comecar a receber atualizações echo(str_repeat(' ', 256)); _flush(); //Contera blocos de informações sobre filas e agentes /* $encode = $GLOBALS['server']->getEncoding(); $info = "\n\n"; $info .= "\n"; $info .= "ok\n"; * */ $info = "Inicializando monitoramento de agente! Aguarde...\n"; DisplayInfo($info); //simplexml_load_string($info)->asXml(); $info = ""; //Flag que indica se ha dados a enviar ao processo chamador $display = 0; //Variavel define o status atual do agente //$statusAgente = $_SESSION[SS_STATUS_AGENTE]; $start = 0; //Indica que houve mudança na fila $statusFila = 0; //Display das informações para o chamador while (true) { $info = ""; $display = 0; $result = pg_query($dbcon, $queryAgente); $ret = array(); if (!$result) { $numErros++; } else { //Se o agente foi desconectado, gera uma excessão informando o processo chamador if (!pg_num_rows($result)) throw new Exception('O agente foi desconectado!'); // Recupera informações do banco de dados sobre o agente logado $row = @pg_fetch_array($result); GetValoresInfo($row, $infoChamada); if ((!$start) || ($statusAgente != $infoChamada["status"])) { // $ret[] = $infoChamada; $statusAgente = $infoChamada["status"]; $info = "\n"; $info .= ArrToStrXml($infoChamada); $info .= "\n"; DisplayInfo($info); $display++; } if ($display) { $idBloco++; $display = 0; } //Recupera informações sobre a fila de atendimento $result = pg_query($dbcon, $queryFila); if (!$result) { $numErros++; } else { $row = @pg_fetch_array($result); if (!empty($row["fila"])) { GetValoresInfo($row, $infoFila); if (!$start) GetValoresInfo($row, $infoFilaOld); $statusFila = GetStatusFila($infoFila, $infoFilaOld); if (!$start || $statusFila) { $ret = array(); // $ret[] = $infoFila; $info = "\n"; $info .= $info .= ArrToStrXml($infoFila); $info .= "\n"; $display++; DisplayInfo($info); GetValoresInfo($row, $infoFilaOld); } } } if ($display) { $idBloco++; $display = 0; } } if ($numErros > MAX_ERROS) throw new Exception('A aplicação foi encerrada porque atingiu o limite máximo de erros ao tentar acessar o banco de dados!'); $start++; sleep(TEMPO_DORME); } } catch (Exception $ex) { echo GetErroSimples("InformacoesAtendimentoRT", $ex); } } function GetErroSimples($method, $ex) { $xml = "\n"; $xml .= "erro\n"; $xml .= "%s\n"; $xml .= "%s\n"; $xml .= "%s\n"; $xml .= "%s\n"; $xml .= "%s\n"; $xml .= "%s\n"; $xml .= "\n"; $xml = sprintf($xml, session_id(), $method, $ex->getCode(), $ex->getMessage(), $ex->getLine(), $ex->getFile()); return $xml; } function DisplayInfo($info) { echo $info; //simplexml_load_string($info)->asXml(); _flush(); } function _flush() { echo(str_repeat(' ', 256)); // check that buffer is actually set before flushing if (ob_get_length()) { @ob_flush(); @flush(); } } function GetStatusFila($infoFila, $infoFilaOld) { $count = count($infoFila); for ($i = 0; $i < $count; $i++) { if ($infoFila[$i] != $infoFilaOld[$i]) return true; } return false; } function GetValoresInfo($row, &$infoArray) { foreach ($row as $key => $value) { if (array_key_exists($key, $infoArray)) { $infoArray[$key] = $value; } } } function GetQueryInfoFila($nomeDac, $matricula) { return "SELECT fila ,ABANDONADAS ,ATENDIDAS_PA ,ESPERA ,round( CASE WHEN(ESPERA = 0)THEN 0 ELSE (TEMPO_ESPERA / ESPERA) END ) * INTERVAL '1 SECOND' AS TME ,round( CASE WHEN(ATENDIDAS_PA = 0)THEN 0 ELSE (TEMPO_ATENDIMENTO / ATENDIDAS_PA)END) * INTERVAL '1 SECOND' AS TMA, coalesce((select espera from pbx_supervisor_dacs where dac = DADOS.fila), '0') as qt_fila FROM ( SELECT fila ,SUM (CASE WHEN EVENTO = 'ABANDON' THEN 1 ELSE 0 END) AS ABANDONADAS ,SUM (CASE WHEN EVENTO IN ('CONNECT') THEN 1 ELSE 0 END) AS ATENDIDAS_PA ,SUM (CASE WHEN EVENTO IN ('CONNECT') AND to_number(param1,'999999999') > '3' THEN 1 ELSE 0 END) AS ESPERA ,SUM (CASE WHEN EVENTO IN ('CONNECT') AND to_number(param1,'999999999') > '1' THEN to_number(param1,'999999999') ELSE 0 END) AS TEMPO_ESPERA ,SUM (CASE WHEN EVENTO IN ('COMPLETEAGENT','COMPLETECALLER') AND to_number(param2,'999999999') > '1' THEN to_number(param2,'999999999') ELSE 0 END) AS TEMPO_ATENDIMENTO FROM ( SELECT a.calldate,b.fila,b.evento,b.param1,b.param2 FROM ast_bilhetes a INNER JOIN ast_eventos_dacs b on b.uid2 = a.uniqueid WHERE b.evento in ('ABANDON','COMPLETEAGENT','COMPLETECALLER','CONNECT','ENTERQUEUE') AND a.calldate IS NOT NULL AND a.lastapp <> 'Transferred Call' AND cast(a.calldate as date) = cast(now() as date) AND substring(b.agente, 7,4) = '$matricula' AND b.fila = '$nomeDac' ) AS DADOS GROUP BY FILA ) AS DADOS "; } function UpdatePausa($db) { $idPausa = $_SESSION[AGT_ID_PAUSA]; $query = "update pbx_eventos_agentes set saida_pausa = now(), flag = 1 where id = $idPausa "; pg_query($db, $query); } function UpdateLogoff($db) { $idLogoff = $_SESSION[AGT_ID_LOGIN]; $matricula = GetMatriculaAgente(); $query = "update pbx_supervisor_agentes set logado = now() where matricula = '$matricula'"; $result = pg_query($db, $query); $query = "update pbx_eventos_agentes set logoff = now(), flag = 1 where id = $idLogoff"; pg_query($db, $query); } ?>