snep arquitetura

42
Amim Knabben <[email protected]> Rafael Bozzetti <[email protected]>

Upload: rafaelbozzetti

Post on 28-May-2015

1.263 views

Category:

Documents


5 download

DESCRIPTION

Slides da apresentação no Snep Conference

TRANSCRIPT

Page 1: Snep arquitetura

Amim Knabben <[email protected]>Rafael Bozzetti <[email protected]>

Page 2: Snep arquitetura

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

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

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

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

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

O Arquivo de Configuração

includes/setup.conf

Parametriza dados de configuração do ambiente SNEP

Page 8: Snep arquitetura

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

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

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

/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

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

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

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

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
Page 17: Snep arquitetura

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

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

Padrão - MVC

Model View

Controller

Page 20: Snep arquitetura

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

Controllers

<?phpclass AgentsController extends Zend_Controller_Action {

public function indexAction() { } public function addAction() { } public function removeAction() { } public function editAction() { }}?>

Page 22: Snep arquitetura

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

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

Hands On

● Estrutura do MVC.● Escrever um

controlador.● Escrever uma view.

Page 25: Snep arquitetura

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

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

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

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

lib/PBX

$asterisk = PBX_Asterisk_AMI::getInstance();

$asterisk->Command(“core show channels”);

PBX_Trunks::getAll();

Page 30: Snep arquitetura

Asterisk SNEPRegras

DeNegócio

DialPlan

AGI

DialplanDialplan

InterfacesInterfaces

RegrasRegras

RamaisRamaisTroncosTroncosAçõesAções

Page 31: Snep arquitetura

Hands On

● Consultas no Asterisk utilizando a classe PBX_Asterisk_AMI.

● Exemplo com Ramais

Page 32: Snep arquitetura

lib/Zend

Biblioteca Zend, dão suporte a aplicação.

Podem ser estendidas por outras Classes.

Page 33: Snep arquitetura

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

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

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

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

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

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

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

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

Hands On

● Zend_Config● Zend_Db● Zend_Form● Zend_Translate

Page 42: Snep arquitetura

Obrigado!

Perguntas?Sugestões?

Rafael [email protected]

[email protected]

@rafaelbozzetti