Como fazer com que o Logwatch rastreie git commits

1

Eu tenho um servidor web com um repositório git contendo um site. Eu fiz um CMS usando PHP, onde o PHP automaticamente se compromete a git quando os arquivos são alterados. Gostaria de acompanhar esses commits (de preferência em um formulário próximo a git log --name-status para mostrar os arquivos adicionados / excluídos) usando o Logwatch. Li sobre a criação de serviços personalizados do Logwatch, mas o Logwatch é realmente novo para mim e isso realmente não me levou a lugar algum.

    
por cmeeren 05.01.2015 / 21:35

1 resposta

0

Nota: Em vez do código PHP abaixo, se você quisesse rastrear todas as confirmações do git (e não apenas aquelas com o PHP), seria possível configurar um hook pós-commit com saída similar.

Depois de escrever a pergunta, deparei-me com este guia realmente simples . Com base nisso, eis o que fiz:

Crie um diretório de log e defina permissões

Eu não testei isso sem definir permissões, mas suponho que seja necessário.

sudo mkdir /var/log/gitweb
sudo chown: www-data /var/log/gitweb

Função de registro git do PHP

Esta linha de código é executada sempre que eu executo git commit no código php. As novas linhas são substituídas por uma string personalizada, de modo que cada commit esteja em sua própria linha (até onde eu sei, o Logwatch só pode operar linha a linha). Isso será substituído novamente por novas linhas ao analisar com o Logwatch.

shell_exec('(git log -1 --date=iso --name-status | awk 1 ORS="[NEWLINE_HERE]" ; echo) >> /var/log/gitweb/gitweb.log');

Grupo de arquivos de log do Logwatch

# /etc/logwatch/conf/logfiles/gitweb.conf

LogFile = gitweb/*.log
Archive = gitweb/*.gz
*ExpandRepeats

Não tenho certeza do que * ExpandRepeats faz, mas estava no guia ao qual eu me vinculei.

Serviço de Logwatch

# /etc/logwatch/conf/services/gitweb.conf

Title = "Git commits"
LogFile = gitweb

Analisador de Logwatch

Isso faz duas coisas:

  • Filtragem de tempo (apenas imprime linhas / confirmações com a data correta)
  • Converte a string custrom de volta para novas linhas (veja o código PHP acima)

Eu sei absolutamente zero perl (eu olhei para outros scripts do Logwatch para ajuda), então eu peço desculpas se isso é um sacrilégio contra todas as coisas perl-y.

use Logwatch ':dates';

my $filter = TimeFilter('%Y-%m-%d %H:%M:%S');

while (defined(my $ThisLine = <STDIN>)) {
   if ($ThisLine =~ /$filter/) {
      $ThisLine =~ s/\[NEWLINE_HERE\]/\n/g;
      print $ThisLine;
   }
}

exit(0);

Configurar rotação de log

# /etc/logrotate.d/gitweb

/var/log/gitweb/*log {

    daily

    # keep 10 old logs
    rotate 10

    # don't do anything if the log is missing
    missingok

    # don't do anything if the log is empty
    notifempty

    # zip the archived logs
    compress
}
    
por 05.01.2015 / 23:03