yml

Aumentando o timeout da sessão do usuário (sf 1.2)

Editar arquivo apps/(aplicacao)/config/factories.yml e alterar os segundos do ‘timeout’:

all:
  user:
   class: myUser
   param:
     timeout:         2700
 

php
snippet
yml

Comments (0)

Permalink

Gerenciando aplicações em produção (Profiling production)

Neste post irei mostrar como fazer para ter um feedback automático das aplicações quando elas já estiverem em produção. A intenção é detectar anormalidades na execução de um script e/ou saber um pouco mais do andamento da aplicação. Neste caso é estabelecido um tempo máximo para a execução de uma action, caso ela demore mais que esse tempo, um email é enviado para o administrador e um arquivo de log específico é criado.

Para executar essa tarefa vamos utilizar os filters do symfony.
Por padrão o tempo de execução é de 200ms, mas isso pode ser configurado no arquivo app.yml

Vamos criar o arquivo app.yml:


all:
  log_slow_requests:
    status: on
    tempo: 200
 

Vamos criar o arquivo logSlowRequestsFilter.php na pasta lib/:


<?php
class myFilter extends sfFilter
{
  public function execute ($filterChain)
  {
    $timer = sfTimerManager::getTimer(‘slow_request’);
    $filterChain->execute();

    // pegamos o tempo de execucao
    $elapsedTimeMs = $timer->getElapsedTime() * 1000;

    if (($elapsedTimeMs >= sfConfig::get(‘app_log_slow_requests_tempo’, 200)) && (sfConfig::get(‘app_log_slow_requests_status’) == "on")) {
        $logfile = sfConfig::get(‘sf_log_dir’) . ‘/slow_requests.log’;
   
        // vamos logar a URL e o tempo de execucao
        $text = sprintf("[%s Tempo: %.2f ms] %s – %s", date(‘Y-m-d H:m’) , $elapsedTimeMs, sfRouting::getInstance()->getCurrentInternalUri(true), sfRouting::getInstance()->getCurrentInternalUri());
   
        // escrevendo no log
        file_put_contents($logfile, $text . "\n", FILE_APPEND);

        // essa é uma classe de email personalizada.. use seu metodo para o envio do email
        Email::enviar("[slowRequest] Cliente" , "Um script demorou mais que o tempo de execucao estipulado. <br/ >O log foi gravado." , "to@email.com");
        // cuidado ao utilizar a linha acima porque pode sobrecarregar o servidor
    }
    else
    {
      $filterChain->execute();
    }
  }
}
 

Vamos adicionar o novo filtro no myapp/config/filters.yml:


rendering: ~
web_debug: ~
security:  ~

slow_requests:
  class: myFilter

cache:     ~
common:    ~
flash:     ~
execution: ~
 

Limpe o cache!

$ symfony cc

Pronto! O arquivo `log/slow_requests.log` será atualizado sempre que um script passar do tempo estipulado. Faça uns testes diminuindo o valor no yml (200).

Você terá um arquivo mais ou menos assim…

$ more log/slow_requests.log
[2008-06-20 Tempo: 292.67 ms] @default_index – modulo/index
$

Atualmente estou com a linha que envia email comentada e um script na crontab que faz o envio do log para meu email toda semana.. Isso foi bom para reduziu um pouco a carga no servidor..

Esse é o meu script..

$ more slow_request.sh
#!/bin/bash
mail -s “[Cliente] slow_request.log” to@email.com < ../../log/slow_requests.log
$

Saiba como utilizar a crontab…

Adaptado de http://groups.google.com/group/symfony-users/browse_thread/thread/535b264eb31cf4ac

log
php
producao
symfony
yml

Comments (0)

Permalink

Alterando valores no app.yml dinamicamente

Suponha que você tenha o arquivo apps/frontend/config/app.yml ,

all:
  count: 10
 

e agora você quer atualizar este valor:


$config = sfYaml::load( sfConfig::get("sf_app_config_dir") . "/app.yml");
$config[‘all’][‘count’] = "20";
$yaml = sfYaml::dump($config);
file_put_contents( sfConfig::get("sf_app_config_dir") . "/app.yml" , $yaml);
 

Pronto. O app.yml estará com o novo valor.

É interessante limpar o cache depois de uma alteração desse tipo.

cache
php
symfony
yml

Comments (0)

Permalink