Zend Server – Parte 5 – Eventos e Code Tracing

Boa tarde pessoal!

Update: Existe um post atualizado com a versão 8. Pode ser encontrada neste link.

Hoje vou falar um pouco sobre dois recursos muito bons do Zend Server, Eventos e Code Tracing.

É dito que 80% do tempo gasto em solucionar um bug é apenas para localizar o bug. Até acharmos onde está a linha com problema pode demorar muito. A falta de um ponto-e-vírgula é relativamente rápido, só olhar no log do php, o problema é quando o erro acontece “de vez em quando”, dependendo de certas condições do sistema, talvez uma variável sendo passada errada por exemplo.

O Zend Server facilita em MUITO este trabalho de localizar os problemas, e não só erros, mas consumos exagerados de memória, lentidão ao abrir uma página, etc.

Então vamos ver na prática como funciona. Vamos usar nosso Zend Server e nosso projeto tutorial instalado nesta série (veja os posts anteriores).

Tentei abrir meu projeto e demorou muito, o que está gerando esta demora? Vamos analisar. Primeiro vamos abrir o Zend Server:

1

Primeiro notamos pela gráfico da pizza que, de todos os eventos no sistema, 75% são de erros e 25% de performance.

Ta tabela abaixo, ele ja me informa que o meu projeto gerou um evento “Slow Request Execution” dizendo que levou mais de 10 segundos para abrir e que também gerou alguns erros de PHP na função date. Vamos começar analisando este último.

Vamos clicar em cima da linha do erro sobre a data para vermos os detalhes:

2

 

Hmm, pare que está faltando uma configuração da timezone do PHP. Este é rápido de ajustar e nem precisamos acessar servidor, editar php.ini, nada. Faremos pelo próprio Zend Server.

Primeiro vamos na aba “Configurations” -> “PHP” e clicamos na linha do “date”:

3

 

Podemos ver que o campo “timezone” realmente está em branco. Basta digitarmos nele “America/Sao_Paulo” e clicarmos no botão “Save” acima. Depois da alteração, basta reiniciar o Zend Server e pronto.

Vamos tentar abrir novamente o projeto e ver se o erro sobre a data parou:

4

 

Bom. Atualizei a tela e gerou apenas mais 1 evento, o da lentidão na resposta. Novamente vamos clicar em cima dele para vermos os detalhes:

5

 

E clicar em “More details” para vermos os detalhes:

6

 

Nesta tela podemos ver todas as variáveis do $_SERVER, as do request e detalhes da rota. Infelizmente a versão gratuita não possui o recurso de “Code Tracing” que nos permite ir linha a linha no caminho da requisição, o que nos obrigaria a procurar o motivo da demora do jeito “tradicional”. Mas vou mostrar como o recurso funciona, pois possuo a licença Developer. Ao clicar na pequena engrenagem à esquerda, vamos para a tela do Code Tracing:7

 

E verificamos que a função “indexAction” do Application\Controller\IndexController está levando, sozinha, 10 segundos. Vamos ver o que ela faz:

public function indexAction()
{
    sleep(10);
    return new ViewModel();
}

Parece que achamos nosso problema de lentidão 🙂

Dependendo da licença do Zend Server, pode-se mandar alerta por email também, caso uma regra de monitoramento aconteça. Já existem várias regras por padrão:

9

 

E cada uma com níveis de alerta e cada nível com suas configurações. Por exemplo, podemos mandar email caso uma página leve mais de 5 segundos, mas se levar 4 o servidor irá apenas registrar o evento:

10

 

Ele permite também criarmos nossas próprias regras, inclusive na versão gratuita (apesar de alguns recursos estarem bloqueados).

Realmente facilita e acelera em MUITO a procura de erros, já mostra qual a função com problema, qual linha, quais parâmetros foram passados para a função, quais os retornos das funções, o caminho inteiro, etc. Uma ferramenta muito boa.

Referências:

Parte 1 – Visão Geral

Parte 2 – Instalação e Configuração

Parte 3 – Distribuição (Deployment)

Parte 3.5 – Definir uma aplicação

Parte 4 – Métrica

Parte 5 – Eventos e Code Tracing

 

 

Até a próxima!

Leandro Silva

Lançado MySQL Workbench 6.0

Boa noite pessoal!

Hoje foi lançado o MySQL Workbench versão 6.0.

Para quem não conhece, é uma ótima ferramenta que conta com administração do banco de dados (backup, usuários, permissões, gráficos de desempenho, etc), design do banco de dados (de forma visual), scripts e comandos SQL, etc.

Entre as várias mudanças desta versão, a maior novidade é a ferramenta de migração, onde você pode migrar dados do Microsoft SQL Server, Sybase ASE, PostreSQL entre outras para o MySQL.

Até a próxima!

Leandro

Zend Server – Parte 4 – Métrica

Bom dia pessoal!

Update: Existe um post atualizado com a versão 8. Pode ser encontrada neste link.

Nesta quarta parte da série sobre o Zend Server vamos falar sobre os diversos gráficos que ele nos oferece.

Todo acesso e desempenho do servidor é logado e transformado em estatísticas para acompanharmos e tratarmos os problemas. E estes dados ficam separados por aplicação, que é um recurso legal, pois podemos ver o desempenho de cada projeto independente.

Continue lendo

Zend Server – Parte 3.5 – Definindo uma aplicação

Bom dia pessoal!

Update: Existe um post atualizado com a versão 8. Pode ser encontrada neste link.

No post anterior desta série sobre o Zend Server, vimos como fazemos a distribuição ou deployment da nossa aplicação para ele.

Mas esta operação tem por finalidade distribuir uma nova versão da aplicação e não durante o desenvolvimento. Já imaginou você alterar um “echo” e ter que fazer o procedimento todo para vê-lo durante o desenvolvimento? 🙂

O que faço durante o desenvolvimento é usar o Zend Server local na minha máquina (possuo a versão developer, mas a gratuita também funciona) e apontar um “Alias” do apache para o diretório do projeto.

Então vamos ao passo a passo!

Criando o Alias

Vamos assumir que nosso projeto esteja em “/Users/leandro/Dev/PHP/ZFTutorial”:

leandro@iMac-de-Leandro-Silva:~$ cd /Users/leandro/Dev/PHP/ZFTutorial
leandro@iMac-de-Leandro-Silva:~/Dev/PHP/ZFTutorial$ ls -l
total 1440
-rw-r--r--   1 leandro  staff    1548  6 Ago 07:00 LICENSE.txt
-rw-r--r--   1 leandro  staff    1759  6 Ago 07:00 README.md
drwxr-xr-x  14 leandro  staff     476  6 Ago 07:24 build
-rw-r--r--   1 leandro  staff     342  6 Ago 07:00 composer.json
-rw-r--r--   1 leandro  staff     300  6 Ago 07:00 composer.lock
-rw-r--r--   1 leandro  staff  709565  6 Ago 07:00 composer.phar
drwxr-xr-x   4 leandro  staff     136  6 Ago 07:00 config
drwxr-xr-x   5 leandro  staff     170  6 Ago 07:06 data
-rw-r--r--   1 leandro  staff    2337  6 Ago 08:13 deployment.xml
-rw-r--r--   1 leandro  staff    1993  6 Ago 07:00 init_autoloader.php
drwxr-xr-x   3 leandro  staff     102  6 Ago 07:00 module
drwxr-xr-x   8 leandro  staff     272  6 Ago 07:00 public
drwxr-xr-x  12 leandro  staff     408  6 Ago 07:51 scripts
drwxr-xr-x   6 leandro  staff     204  6 Ago 07:00 vendor
leandro@iMac-de-Leandro-Silva:~/Dev/PHP/ZFTutorial$

Agora vamos editar o arquivo do apache de virtual hosts.

Numa instalação padrão no Linux e MacOS o arquivo está em “/usr/local/zend/etc/sites.d/zend-default-vhost-10088.conf”:

Include "/usr/local/zend/etc/sites.d/http/__default__/0/*.conf"
<Directory "/usr/local/zend/var/apps/http/__default__/0/">
	Allow From All
</Directory>

Alias /zftutorial /Users/leandro/Dev/PHP/ZFTutorial/public
<Directory /Users/leandro/Dev/PHP/ZFTutorial/public>
	Allow from All
	AllowOverride All
</Directory>

E vamos acrescentar as linhas destacadas (altere o diretório e nome para seu próprio projeto).

No Windows, o padrão está no arquivo “C:\Arquivos de Programas (x86)\Zend\ZendServer\etc\sites.d\zend-default-vhost-80.conf”:

Include "C:\Program Files (x86)\Zend\ZendServer/etc/sites.d/http/__default__/0/*.conf"
<Directory "C:\Program Files (x86)\Zend\ZendServer/data/apps/http/__default__/0/">
	Allow From All
</Directory>

Alias /zftutorial "C:\Dev\PHP\ZFTutorial\public"
<Directory "C:\Dev\PHP\ZFTutorial\public">
	Allow from All
	AllowOverride All
</Directory>

Antes de proseguirmos, vamos conferir que o Alias está correto e podemos acessar nossa aplicação. Entre na tela administração do Zend Server (http://localhost:10081/ZendServer) e o reinicie (botão no topo à direita).

Quando terminar tente acessar  o projeto (http://localhost:10088/zftutorial). Se conseguiu acessar, então pode passar para o passo seguinte.

Definindo a aplicação

Agora vá na tela de administração do Zend Server (http://localhost:10081/ZendServer) e vamos definir nossa aplicação. Vá na aba “Applications” -> “Apps” e clique em “Define Application”.

1

Preencha as informações como no print a seguir:

2

Clique em “Define” e nosso projeto já estará definido.

3

Se formos no dashboard, nossa aplicação já está lá!

4

Pronto! Agora você já pode acessar o projeto na versão de desenvolvimento, sem deployment, configuração xml, etc, e vai poder contar com todos os recursos disponíveis durante o desenvolvimento, principalmente o “Code Tracing” e análise de métrica, recursos que ajudam bastante o desenvolvimento e procura de bugs.

Referências:

Parte 1 – Visão Geral

Parte 2 – Instalação e Configuração

Parte 3 – Distribuição (Deployment)

Parte 3.5 – Definir uma aplicação

Parte 4 – Métrica

Parte 5 – Eventos e Code Tracing

 

 

Até a próxima!

Leandro Silva

 

Zend Server – Parte 3 – Distribuição (Deployment)

Bom dia pessoal!

Update: Existe um post atualizado com a versão 8. Pode ser encontrada neste link.

Update: Este post é para mostrar a função de deployment, um procedimento para distribuir uma versão nova da sua aplicação e não para o dia-a-dia de desenvolvimento. Para isso vou fazer um post 3.5 mostrando como usar o Zend Server no desenvolvimento sem usar o deployment.

Neste terceiro post da série sobre Zend Server, vamos ver como fazer a distribuição (ou deployment) para um servidor.

No post anterior fizemos a instalação do Zend Server Free Edition e estamos prontos para rodar nossas aplicações. Uma mudança muito bem vinda na versão 6 é a possibilidade de fazer o deployment também na versão gratuita, apesar de não poder fazer o rollback, ou seja, retornar para uma versão anterior.

Se você usa o Zend Studio, o processo de deployment é bem mais simples pois é feito pelo próprio Zend Studio, mas para quem não tem, o Zend Server vem com uma ferramenta console chamada zdpack destinada a criar pacotes prontos para o deployment.

Continue lendo

Sugestões de Posts

Boa tarde pessoal!

Estou aceitando sugestões de posts que envolvam php, zf2, jquery, mysql, linux, etc.
Por favor, deixem suas sugestões nos comentários!

Até a próxima!
Leandro Silva

Zend Server – Parte 2 – Instalação e Configuração

Boa tarde pessoal!

Update: Existe um post atualizado com a versão 8. Pode ser encontrada neste link.

No primeiro post da série, vimos algumas informações sobre o Zend Server e agora vamos meter a mão na massa e iniciarmos a instalação.

Para baixar a instalação, basta ir em http://www.zend.com/en/products/server/downloads e fazer o download para seu sistema operacional (MacOX, Linux, Windows ou IBM i). Você também poderá escolher entre o PHP 5.3 e o 5.4.

Neste post vou mostrar o passo a passo da instalação para o MacOX, Linux e Windows. Então vamos lá!

Continue lendo

Congregi 2013 – Brasília

Bom dia pessoal!

Para vocês que estão em Brasília, nos dias 13 a 15 de agosto estará acontecendo o IV Congresso Internacional Software Livre e Governo Eletrônico (CONSEGI) e no primeiro dia o Flávio Gomes da Silva Lisboa (alguns conhecem como FGSL) estará realizando uma oficina Zend Framework 2 – criando aplicações PHP de verdade. 

Recomendo a todos que puderem irem. O evento é gratuito.

Referência:

http://fgsl.eti.br/blog/?p=706

Até a próxima!

Leandro Silva