Amim Knabben <amim@thesource.com.br>Rafael Bozzetti <rafael@thesource.com.br>
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 ambi...
Como é distribuído. A versão ISO, vem com ambiente previamenteinstalado e configurado. É baseado em Debian.               ...
Repositório SVN    O Projeto é hospedado no Source Forge.       O repositório TRUNK é a versão    atual de desenvolvimento...
Versão de Desenvolvimento    Para obter do projeto é necessário o            Subversion (SVN).      A estrutura pode ser a...
Download do Código   http://192.168.0.14/dev/    Disponibilizamos o código fonte do    SNEP 1.4 para acompanhamento.      ...
O Arquivo de Configuração     includes/setup.conf  Parametriza dados de configuração         do ambiente SNEP
Configuração do Apache      /install/snep.apacheArquivo previamente configurado que define a      configuração no Apache d...
Banco de DadosA estrutura do banco e os dados iniciais do  SNEP estão na pasta default/installer/schema.sql             Es...
Atualização de Banco                             install / update /●   As atualizações do       ├── 1.1.0    banco são ver...
/etc/asterisk O SNEP possui sua própria estrutura de     configuração para o Asterisk.Os arquivos de configuração do SNEP ...
AGIs   O Asterisk delega o roteamento de           ligações ao SNEP.    Isso é feito por intermédio do AGI.Deve ser criado...
Arquivos de SomAs rotinas do SNEP precisam de acesso aos        arquivos de som do Asterisk.    São os arquivos de áudio p...
UnixodbcO acesso do Asterisk ao banco de dados é feito por            intermédio do Unixodbc.   O SNEP também disponibiliz...
Hands On●   Estrutura de Arquivos●   setup.conf●   Apache.●   Banco de dados.●   Arquivos /etc/asterisk/●   Integração AGI...
Estrutura do Projeto   Interface do Usuário ( web )    Manipula Dados no Banco de Dados    Manipula Arquivos de Configuraç...
Padrão - MVCO MVC é um padrão de arquitetura que o SNEP segue, é utilizado para construir as rotinas da                   ...
Padrão - MVC        ControllerModel            View
ControllersControllers são classes que representam as           rotinas da aplicação.Uma classe de controlador deve estend...
Controllers<?phpclass AgentsController extendsZend_Controller_Action {  public function indexAction() { }  public function...
ControllersA estrutura do Controlador e seus métodos       definem a URL da aplicação.modulo/controlador/index/modulo/cont...
ViewsAs visões são a interface com o usuário.  Emprega PHP, HTML e Javascript.      São organizadas por pastas      com o ...
Hands On●   Estrutura do MVC.●   Escrever um    controlador.●   Escrever uma view.
Bibliotecas    Representam a camada Model do MVC.lib/Zend – Dá suporte a aplicação como um todo.lib/Snep – Persistência de...
lib/SnepPossui classes para manipulação de dados.Estão associadas a interface web do SNEP.Manipula informações do banco de...
Hands On●   Estrutura de Classes.●   Exemplo de uso no    controlador criado.●   CostCenter_Manager●   Mostra Snep_Form   ...
lib/PBXClasses que abstraem diversos      aspectos do PBX.  Interface (Ramais, Troncos)        Regra de Negócio   Ação de ...
lib/PBX$asterisk = PBX_Asterisk_AMI::getInstance();$asterisk->Command(“core show channels”);PBX_Trunks::getAll();
AGI                                      Regras           DialAsterisk           Plan                  SNEP   De          ...
Hands On●   Consultas no Asterisk    utilizando a classe    PBX_Asterisk_AMI.●   Exemplo com Ramais
lib/ZendBiblioteca Zend, dão suporte a aplicação.Podem ser estendidas por outras Classes.
Zend_Registry    É um recipiente onde objetos sãoarmazenados. Objetos ficam disponíveis em             toda aplicação.Esse...
Zend_Db$db = Zend_Registry::get(“db”);$select = $db->select()             ->from(“peers”)             ->where(“name != adm...
Zend_Config  Faz o parse de arquivos de configuração.                .ini ou .xml   O SNEP utiliza Zend_Config_Ini para le...
Zend_TranslateA versão 1.4 do SNEP conta com suporte ainternacionalização.Toda e qualquer string deve ser definida comZend...
Zend_Translate// Uso na Visãoecho $this->translate(“Texto”);// Uso no Controladorecho $this->view->translate(“Texto”);// N...
FormsCada form é definido em XML seguindo um padrão.Define tipo do elemento e validação do formulário.$xml = new Zend_Conf...
Forms<?xml version="1.0" encoding="UTF-8"?><form>   <elements>        <nome>           <type>text</type>           <option...
FormsUm objeto do tipo Snep_Form possui diversos    métodos herdados de Zend_Form. O método isValid() é responsável por va...
Hands On●   Zend_Config●   Zend_Db●   Zend_Form●   Zend_Translate
Obrigado!                  Perguntas?                  Sugestões?Rafael Bozzettirafael@thesource.com.brrafael@opens.com.br...
Snep arquitetura
Próximos SlideShares
Carregando em…5
×

Snep arquitetura

1.577 visualizações

Publicada em

Slides da apresentação no Snep Conference

0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.577
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
37
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Snep arquitetura

  1. 1. Amim Knabben <amim@thesource.com.br>Rafael Bozzetti <rafael@thesource.com.br>
  2. 2. 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.
  3. 3. Como é distribuído. A versão ISO, vem com ambiente previamenteinstalado 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.
  4. 4. 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/
  5. 5. 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/
  6. 6. Download do Código http://192.168.0.14/dev/ 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/
  7. 7. O Arquivo de Configuração includes/setup.conf Parametriza dados de configuração do ambiente SNEP
  8. 8. Configuração do Apache /install/snep.apacheArquivo 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.
  9. 9. Banco de DadosA 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.
  10. 10. Atualização de Banco install / update /● As atualizações do ├── 1.1.0 banco são versionadas │ └── database.sql e encontram-se na ├── 1.1.3 pasta install/update/. │ └── database.sql ├── 1.1.6 │ └── database.sql ├── 1.2.0● A atualização do banco │ └── database.sql de dados deve ser ├── 1.3.0 gradual, versão a │ └── database.sql ├── 1.3.1 versão. │ └── database.sql └── 1.3.2 └── database.sql
  11. 11. /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/
  12. 12. AGIs 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 Agis do SNEP estão na pasta /agi/
  13. 13. Arquivos de SomAs 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_BR moh - /var/lib/asterisk/moh
  14. 14. UnixodbcO 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
  15. 15. Hands On● Estrutura de Arquivos● setup.conf● Apache.● Banco de dados.● Arquivos /etc/asterisk/● Integração AGI● Arquivos de Som● Unixodbc
  16. 16. Estrutura do Projeto Interface do Usuário ( web ) Manipula Dados no Banco de Dados Manipula Arquivos de Configuração Interage com Asterisk via AMI. Interface com Asterisk ( agi )Asterisk delega a Lógica de ligações ao SNEP Por intermédio do AGI
  17. 17. Padrão - MVCO 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.
  18. 18. Padrão - MVC ControllerModel View
  19. 19. ControllersControllers 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.
  20. 20. Controllers<?phpclass AgentsController extendsZend_Controller_Action { public function indexAction() { } public function addAction() { } public function removeAction() { } public function editAction() { }}?>
  21. 21. ControllersA 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/
  22. 22. ViewsAs 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
  23. 23. Hands On● Estrutura do MVC.● Escrever um controlador.● Escrever uma view.
  24. 24. 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/ouarquivos de configuração.lib/PBX – Abstração do PBX.
  25. 25. lib/SnepPossui classes para manipulação de dados.Estão associadas a interface web do SNEP.Manipula informações do banco de dados earquivos de configuração do SNEP/Asterisk. Classes mais especializadas. Snep_Form, Snep_Db
  26. 26. Hands On● Estrutura de Classes.● Exemplo de uso no controlador criado.● CostCenter_Manager● Mostra Snep_Form uma especialização de Zend_Form.
  27. 27. lib/PBXClasses que abstraem diversos aspectos do PBX. Interface (Ramais, Troncos) Regra de Negócio Ação de Regra de NegócioInterface com o Asterisk via AMI.
  28. 28. lib/PBX$asterisk = PBX_Asterisk_AMI::getInstance();$asterisk->Command(“core show channels”);PBX_Trunks::getAll();
  29. 29. AGI Regras DialAsterisk Plan SNEP De Negócio Dialplan Dialplan Interfaces Interfaces Regras Regras Troncos Troncos Ramais Ramais Ações Ações
  30. 30. Hands On● Consultas no Asterisk utilizando a classe PBX_Asterisk_AMI.● Exemplo com Ramais
  31. 31. lib/ZendBiblioteca Zend, dão suporte a aplicação.Podem ser estendidas por outras Classes.
  32. 32. Zend_Registry É um recipiente onde objetos sãoarmazenados. 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);
  33. 33. Zend_Db$db = Zend_Registry::get(“db”);$select = $db->select() ->from(“peers”) ->where(“name != admin”) ->order(“id”);$stmt = $db->query( $select );$resultado = $stmt->fetchAll( );
  34. 34. 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 obtidosZend_Config::get(config)->system->debug;
  35. 35. Zend_TranslateA versão 1.4 do SNEP conta com suporte ainternacionalização.Toda e qualquer string deve ser definida comZend_Translate, desta forma ela torna-sedinâmica.Como o Zend_Translate é um atributo daView, seu uso é diferente na Visão, Controladore Modelo.
  36. 36. 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”);
  37. 37. FormsCada form é 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;
  38. 38. 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>
  39. 39. FormsUm 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!”;}
  40. 40. Hands On● Zend_Config● Zend_Db● Zend_Form● Zend_Translate
  41. 41. Obrigado! Perguntas? Sugestões?Rafael Bozzettirafael@thesource.com.brrafael@opens.com.br@rafaelbozzetti

×