#!/usr/bin/python2
#
# Copyright (c) 2010 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

__author__ = 'kdlucas@chromium.org (Kelly Lucas)'

import logging, os

from autotest_lib.client.bin import test, utils
from autotest_lib.client.common_lib import error


class platform_CheckErrorsInLog(test.test):
    """
    Check system logs for errors.
    """
    version = 1

    def search_log(self, logfile):
        """
        Try to ping the remote host and report the status.
        Args:
            logfile: string, pathname of logfile to search.
        Returns:
            integer: number of errors found.
        """
        errors = 0
        kerrors = ['fatal', 'oops', 'panic', 'segfault']
        f = open(logfile, 'r')
        log = f.readlines()
        for line in log:
            for key in kerrors:
                if key in line:
                    errors += 1
                    logging.error('%s found in %s' ,line, logfile)
        f.close()

        return errors


    def run_once(self):
        errors = 0
        logs = ['kern.log', 'syslog', 'dmesg']

        for log in logs:
            logfile = os.path.join('/var/log', log)
            if os.path.isfile(logfile):
                errors += self.search_log(logfile)
            else:
                logging.warning('%s does not exist' % logfile)

        if errors:
            raise error.TestFail('%d failures found in logs' % errors)
