вторник, 27 марта 2012 г.

Failed packages

Пока откатывал glibc, родилась мысля - выяснить пакеты, сборка которых сфейлилась.
Искать решил периодами в сутки - т.е. за последние сутки, 2-е/3-е/т.д. суток
Вот, свелосипедил(?)
#!/bin/bash

SUM_LOG="/var/log/portage/elog/summary.log"
EM_LOG="/var/log/emerge.log"

[[ -n ${1} ]] && DAYS="${1}" || DAYS="1"

secs="86400" # seconds in 1 day

for count in `seq ${DAYS}`;do
  DATA="$(date --date="@$(( `date +%s` - $(( $secs * ${count} )) ))" --rfc-3339=date)"
  ALL="$(grep ${DATA} ${SUM_LOG} | awk '{print $13}' | tr -d \: | uniq)"
  ALL_FAILED="$(
  for i in ${ALL};do
 grep "ERROR\: ${i}" ${SUM_LOG}
  done | awk '{print $2}' | sort | uniq
  )"

  for x in ${ALL_FAILED};do
 grep "${x}" ${EM_LOG} | tail -n1 | grep -q "completed" || FAILED+=" =${x}"
  done
done

echo ${FAILED} | tr " " "\n" | sort | uniq
как параметр принимает цифру, означающую кол-во суток
без параметров ищет за одни последние сутки