snep arquitetura
DESCRIPTION
Slides da apresentação no Snep ConferenceTRANSCRIPT
![Page 2: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/2.jpg)
Histórico - SNEP
Escrito por Flávio Somensi, em PHP puro. Modelo mantido até a versão 1.2.2.
Na versão 1.3.0 o ambiente Zend Framework começou a ser introduzido gradualmente.
A série 1.3.x convive com dois ambientes.
A série 1.4.x foi totalmente reescrita utilizando o Zend Framework.
![Page 3: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/3.jpg)
Como é distribuído.
A versão ISO, vem com ambiente previamente instalado e configurado. É baseado em Debian.
Só Série 1.3.x.
Código fonte disponibilizado no formato tar.gz, exige a configuração do ambiente.
Pode ser obtido no repositório SVN.
![Page 4: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/4.jpg)
Repositório SVN
O Projeto é hospedado no Source Forge.
O repositório TRUNK é a versão atual de desenvolvimento, não estável.
https://snep.svn.sourceforge.net/svnroot/snep/trunk/
Os repositórios TAGS são versões fechadas e estáveis.
https://snep.svn.sourceforge.net/svnroot/snep/tags/
![Page 5: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/5.jpg)
Versão de Desenvolvimento
Para obter do projeto é necessário o Subversion (SVN).
A estrutura pode ser atualizada quando necessário.
https://snep.svn.sourceforge.net/ svnroot/snep/trunk/
![Page 6: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/6.jpg)
Download do Código
Disponibilizamos o código fonte do SNEP 1.4 para acompanhamento.
Baixe-o e Descompacte.
tar xvf snep-1.4.tar.gz -C /var/www/
http://192.168.0.14/dev/
![Page 7: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/7.jpg)
O Arquivo de Configuração
includes/setup.conf
Parametriza dados de configuração do ambiente SNEP
![Page 8: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/8.jpg)
Configuração do Apache
/install/snep.apache
Arquivo previamente configurado que define a configuração no Apache do SNEP
Copiar para /etc/apache/sites-enabled/
É baseado no ambiente Debian.
Necessita que o serviço seja reiniciado.
![Page 9: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/9.jpg)
Banco de Dados
A estrutura do banco e os dados iniciais do SNEP estão na pasta default/installer/
schema.sql Estrutura de tabelas.
system_data.sql Dados iniciais do SNEP.
cnl-data.sql Dados para localização de chamadas.
![Page 10: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/10.jpg)
Atualização de Banco
● As atualizações do banco são versionadas e encontram-se na pasta install/update/.
● A atualização do banco de dados deve ser gradual, versão a versão.
install / update /├── 1.1.0│ └── database.sql├── 1.1.3│ └── database.sql├── 1.1.6│ └── database.sql├── 1.2.0│ └── database.sql├── 1.3.0│ └── database.sql├── 1.3.1│ └── database.sql└── 1.3.2 └── database.sql
![Page 11: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/11.jpg)
/etc/asterisk
O SNEP possui sua própria estrutura de configuração para o Asterisk.
Os arquivos de configuração do SNEP são incluídos pelos do Asterisk.
Não devem ser manipulados manualmente.
Estão em install/etc/asterisk/
![Page 12: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/12.jpg)
AGI's
O Asterisk delega o roteamento de ligações ao SNEP.
Isso é feito por intermédio do AGI.
Deve ser criado um link simbólico chamado /var/lib/asterisk/agi-bin/snep
Os Agi's do SNEP estão na pasta /agi/
![Page 13: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/13.jpg)
Arquivos de Som
As rotinas do SNEP precisam de acesso aos arquivos de som do Asterisk.
São os arquivos de áudio padrão e as músicas em espera.
Essa integração é feita por links simbólicos criados na pasta /sounds/
pt_BR - /var/lib/asterisk/sounds/pt_BRmoh - /var/lib/asterisk/moh
![Page 14: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/14.jpg)
Unixodbc
O acesso do Asterisk ao banco de dados é feito por intermédio do Unixodbc.
O SNEP também disponibiliza os arquivos de referência para a configuração do mesmo.
Esta referência diz respeito ao res_odbc.conf
Estão na pasta install/etc/
São unixodbc.ini e odbcinst.ini
![Page 15: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/15.jpg)
Hands On
● Estrutura de Arquivos● setup.conf● Apache.● Banco de dados.● Arquivos /etc/asterisk/● Integração AGI● Arquivos de Som● Unixodbc
![Page 16: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/16.jpg)
![Page 17: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/17.jpg)
Estrutura do Projeto
Interface com Asterisk ( agi )Asterisk delega a Lógica de ligações ao SNEP
Por intermédio do AGI
Interface do Usuário ( web )Manipula Dados no Banco de DadosManipula Arquivos de Configuração
Interage com Asterisk via AMI.
![Page 18: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/18.jpg)
Padrão - MVC
O MVC é um padrão de arquitetura que o SNEP segue, é utilizado para construir as rotinas da
aplicação.
Divide de forma organizada as categorias de:
VIEW – Apresentação.
CONTROLLER - Lógica de Negócio
MODEL - Acesso de Dados do projeto.
Norteia o desenvolvimento no SNEP.
![Page 19: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/19.jpg)
Padrão - MVC
Model View
Controller
![Page 20: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/20.jpg)
Controllers
Controllers são classes que representam as rotinas da aplicação.
Uma classe de controlador deve estender a classe Zend_Controller_Action.
Cada método terá a sua Views.
Controle as requisições da aplicação.
![Page 21: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/21.jpg)
Controllers
<?phpclass AgentsController extends Zend_Controller_Action {
public function indexAction() { } public function addAction() { } public function removeAction() { } public function editAction() { }}?>
![Page 22: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/22.jpg)
Controllers
A estrutura do Controlador e seus métodos definem a URL da aplicação.
modulo/controlador/index/ modulo/controlador/add/modulo/controlador/remove/modulo/controlador/edit/
![Page 23: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/23.jpg)
Views
As visões são a interface com o usuário.
Emprega PHP, HTML e Javascript.
São organizadas por pastas com o nome do controlador.
Cada método tem uma view arquivo.phtml
![Page 24: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/24.jpg)
Hands On
● Estrutura do MVC.● Escrever um
controlador.● Escrever uma view.
![Page 25: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/25.jpg)
Bibliotecas
Representam a camada Model do MVC.
lib/Zend – Dá suporte a aplicação como um todo.
lib/Snep – Persistência de dados no banco e/ou arquivos de configuração.
lib/PBX – Abstração do PBX.
![Page 26: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/26.jpg)
lib/Snep
Possui classes para manipulação de dados.
Estão associadas a interface web do SNEP.
Manipula informações do banco de dados e arquivos de configuração do SNEP/Asterisk.
Classes mais especializadas.Snep_Form, Snep_Db
![Page 27: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/27.jpg)
Hands On
● Estrutura de Classes.● Exemplo de uso no
controlador criado.● CostCenter_Manager● Mostra Snep_Form
uma especialização de Zend_Form.
![Page 28: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/28.jpg)
lib/PBX
Classes que abstraem diversos aspectos do PBX.
Interface (Ramais, Troncos)Regra de Negócio
Ação de Regra de Negócio
Interface com o Asterisk via AMI.
![Page 29: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/29.jpg)
lib/PBX
$asterisk = PBX_Asterisk_AMI::getInstance();
$asterisk->Command(“core show channels”);
PBX_Trunks::getAll();
![Page 30: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/30.jpg)
Asterisk SNEPRegras
DeNegócio
DialPlan
AGI
DialplanDialplan
InterfacesInterfaces
RegrasRegras
RamaisRamaisTroncosTroncosAçõesAções
![Page 31: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/31.jpg)
Hands On
● Consultas no Asterisk utilizando a classe PBX_Asterisk_AMI.
● Exemplo com Ramais
![Page 32: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/32.jpg)
lib/Zend
Biblioteca Zend, dão suporte a aplicação.
Podem ser estendidas por outras Classes.
![Page 33: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/33.jpg)
Zend_Registry
É um recipiente onde objetos são armazenados. Objetos ficam disponíveis em
toda aplicação.
Esse mecanismo substitui o uso de variáveis globais. register_globals = Off.
Zend_Registry::set('objeto', $objeto);
$objeto = Zend_Registry::get('index');
![Page 34: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/34.jpg)
Zend_Db
$db = Zend_Registry::get(“db”);
$select = $db->select() ->from(“peers”) ->where(“name != 'admin'”) ->order(“id”);
$stmt = $db->query( $select );$resultado = $stmt->fetchAll( );
![Page 35: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/35.jpg)
Zend_Config
Faz o parse de arquivos de configuração..ini ou .xml
O SNEP utiliza Zend_Config_Ini para ler o setup.conf e Zend_Registry para guarda-lo.
Os parâmetros do setup.conf podem ser obtidos
Zend_Config::get('config')->system->debug;
![Page 36: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/36.jpg)
Zend_TranslateA versão 1.4 do SNEP conta com suporte a internacionalização.
Toda e qualquer string deve ser definida com Zend_Translate, desta forma ela torna-se dinâmica.
Como o Zend_Translate é um atributo da View, seu uso é diferente na Visão, Controlador e Modelo.
![Page 37: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/37.jpg)
Zend_Translate
// Uso na Visãoecho $this->translate(“Texto”);
// Uso no Controladorecho $this->view->translate(“Texto”);
// No Model deve-se recuperar a instancia.$i18n = Zend_Registry::get('i18n');$i18n->translate(“Texto”);
![Page 38: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/38.jpg)
Forms
Cada formform é definido em XML seguindo um padrão.
Define tipo do elemento e validação do formulário.
$xml = new Zend_Config_Xml("example.xml");
$form = new Snep_Form( $xml );
$this->view->form = $form;
![Page 39: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/39.jpg)
Forms<?xml version="1.0" encoding="UTF-8"?><form> <elements> <nome> <type>text</type> <options> <label> Nome </label> <required>true</required> </options> </nome> <id> <type> hidden </type> </id> </elements></form>
![Page 40: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/40.jpg)
Forms
Um objeto do tipo Snep_Form possui diversos métodos herdados de Zend_Form.
O método isValid() é responsável por validar os dados do formulário.
$isValid = $form->isValid( $_POST );
if ( $isValid ) { echo “Form Válido!”;} else { echo “Form Inválido!”;}
![Page 41: Snep arquitetura](https://reader033.vdocuments.mx/reader033/viewer/2022050921/5566699cd8b42a3d3f8b4e24/html5/thumbnails/41.jpg)
Hands On
● Zend_Config● Zend_Db● Zend_Form● Zend_Translate